神秘の宅叔 发表于 2019-12-26 13:46:47

【分享】巧用界面设计去灵活使用迪文os-modbus模版架构的02...

https://v.qq.com/x/page/x3041tebc4h.html
视频中的用的Modbus Slave测试工具演示,该工具来源于网络。
(视频观看如果下面的窗口不够清晰,请选择原视频链接,选择全屏高清观看,其实看的时候只需要留意下界面的“二次弹出确认界面设计”、“Modbus Slave的地址表格内寄存器数据有改变”和“数据记录窗口有信息”即可,实际指令已经写在了正文)
http://cache.tv.qq.com/qqplayerout.swf?vid=x3041tebc4h

附件demo演示是配置0x10指令,将屏上面地址0x1000、0x1001、0x1002、0x1003、变量地址的数据经过数据键盘修改之后,能下发到设备01寄存器地址0000,0001,0002,0003,
每条写指令触发我们用的迪文开发工程师已经写好的os模板,写指令触发用的“02模式”(实质的应用是做一个:键值0x0005A、地址0xxxxx的“按键返回”控件,当这个按键按下之后执行一次本条指令),
本demo里面的“确认按键”地址分别用的0x2000、0x2001、0x2002、0x2003分别将0x1000~0x1003地址的数据0x10写指令单条发出。
(本demo需要留意下4个地址数据采用的4套键盘的确认切换按钮,4套确认按键设计即可)
例如:
◆01 10 00 00 00 01 02 00 01 67 90
◆01 10 00 01 00 01 02 00 02 26 40
◆01 10 00 02 00 01 02 00 03 E7 B3
◆01 10 00 03 00 01 02 00 04 A7 A0

“确认修改按键”是用的一条写指令,将0x1000~0x1003地址的数据0x10写指令一条指令一起发出。
例如:
◆01 10 00 00 00 04 08 00 01 00 02 00 03 00 04 2E B9


22.bin配置文件截图如下。
(22.bin的配置注意理解下02模式配置对应的按键返回地址)


这样的界面设计:虽然在每一个参数修改了之后,要额外的按一次“确认”按键的按键返回,但类似弹出界面的设计使得用户可以不会觉得有多余按键的操作繁琐感,
不过如果参数特别多,那么这种方式可能会占用多套键盘图片和确认界面的图片。

其他的应用拓展:方法2:

加一段os程序,判断数据变化了就给02模式下指向的地址写入0x005a。
这样就不需要额外的用一个按键返回了。实现原理:将变量地址的数读到os寄存器,和之前的值比较是否相等,代码参考如下
MAIN:
CALL Modbus_Master      ;主机Modbus程序
CALL Modbus_Slave      ;从机Modbus程序
CALL TEXT02          ;此处为调用的添加的变化了就触发的代码,将程序添加到此处
GOTO MAIN
;.............................此处为省略行数,下面的为用户添加的变化了就触发的代码
TEXT02:
                           LDWRR0,0x1000                  ;0x1000放置的是屏上面要下发给设备寄存器的参数地址,例如数据录入
                        MOVXR   R50,1,1                        ;DGUS变量地址1000数据读到os R10,R11
                        TESTS      R50,R150,2                ;
                        IJNE      R0,0, 变化1                ;R0=0就会往下执结束os,
                        GOTO      TEXT1                        ;
变化1:                MOV                R50,R150,2                ;将R10的值给R150变成一样,恢复用于下次比较
                         LDWR      R0,0X3000                ;用于配置的02模式下的地址写入0x005A
                        LDWR    R10,005AH                ;
                         MOVXR   R10,0,1                  ;005A写入用于触发modbus写指令
TEXT1:             NOP
                        RET

方法3:
配置录入后上传(DGUSII的0x83指令上传协议我们不需要用,数据是传到串口2,我们用的实际用的是非串口2,利用通过0x0F00系统变量处理,具体方法可以参考论坛相关os代码程序。





zp17777 发表于 2020-3-15 20:24:38

这一个东西不错,谢谢

zp17777 发表于 2020-3-31 21:58:31

我想请问一下在这一个main里面像  CALL TEXT02   加的多了,程序会不会有影响,因为我要判断超几百个这样的状态,或许还有简单的写法吗,不好意思,我上面是一个控制一个的

shirap12peng 发表于 2020-4-2 20:03:56

这个还是要尽量优化

zp17777 发表于 2020-4-4 10:06:42

shirap12peng 发表于 2020-4-2 20:03
这个还是要尽量优化

对他现在的汇编理解的还不是非常透

shirap12peng 发表于 2020-4-4 17:40:13

资料下载栏目里有OS历程,可以参考
http://inforum.dwin.com.cn:20080/forum.php?mod=forumdisplay&fid=66

阿牛啊 发表于 2020-4-7 09:32:38

你好,请教一下:不修改os代码,使用模板modbus-os,怎么实现05功能码,按钮的FF 00 与 0000 发送从机的线圈开关?(我使用的图标变量和增量调节,可以切换开关图标,没有实现和22文件的modbus 02模式5A触发的结合命令的下发):lol

wangyuxiang 发表于 2020-4-7 14:40:54

文档中有说明02模式下,仅在VP指向的变量缓冲区低字节写入005A才执行命令。

xiaoyi 发表于 2020-7-31 16:29:12

问一下,我一个页面有很多参数需要修改,为什么我用02指令不行,要不停的按很多次才可以修改到。 我们用的是06指令比如 :
5A 01 06 02 01 4F 00 0220 0F10 0000 06 0000
5A 01 06 02 01 4F 00 0220 0F10 0500 09 0000
我是这样写的,确认修改按键 地址 是 200F
我要怎么做 可以只按一下就可以把当前页面的的参数一次性修改完。我的屏变量地址 不是连续的,丛机地址也不是连续的。

xiaoyi 发表于 2020-8-20 17:04:30

如何做可以不用比较,录入数据不管有没有变货就写数量
页: [1] 2
查看完整版本: 【分享】巧用界面设计去灵活使用迪文os-modbus模版架构的02...