硬件:CPU226 cn 版本02.01 用port0 口与三台上海盛善电气SD系列多功能电力监测仪表通讯,三台飞力水泵监控系统MAS711通讯,两类设备都支持modbus RTU通讯,port1口与触摸屏触摸屏或编程软件调试程序使用!
软件:编程软件版本为STEP.7.-.MicroWIN.V4.0.6.35,同时已安装modbus RTU主站指令库MBUS_CTRL,和MBUS_MSG.
我现在有如下几个问题没有搞的太明白:
问题1.智能仪表的modbus地址
例如SD电表说明书上可以用03H命令读出的地址
地址 参数 读写属性 数据类型
0000H 相电UA R word
0001H 相电UB R WORD
.....................等等
0013H 总无功电能 R WORD
这些地址是不是0000H 对应modbus地址 40001,0001H对应modbus地址 40002?
问题2.过于读取某个仪表站的程序流程。
比如我要读取1号站SD电表的0000H--0013H寄存器中电压电流等信息
电表说明书上说,上位机发送命令:01 03 00 00 00 14 45 C5
其中01H为仪表地址,03H为命令字,0000H为要查询数据的起始地址,0014H指要查询的数据为20个字节,45C5H为CRC校验码。
仪表响应:01 03 28 xx(20个字节) CRC码
这些是不是采用自由口通讯自己编写程序时才这样按照它的说明 先发送查询命令,再都会数据。如果采用MUDBUS主站库指令,是不是直接用MBUS_MSG指令直接读取该地址即可,不必先用MBUS_MSG先写 01 03 00 00 00 14 45 C5等等数据,然后再用MBUS_MSG指令再度从40001开始的20个字节的数据?
问题3 采用轮询方式访问智能仪表,MBUS_MSG超时,done引脚是不是还能为1
我打算采用轮询方式访问各个仪表,看资料说MBUS_msg用上一个的DONE信号作为起动该次MBUS_MSG的EN 和first信号,如果上一个仪表出现故障或者断电,出现超时时,它的done信号会不会出现 1的信号,启动下一个仪表的查询,如果不能,程序不能继续,该如何处理,如果可以,我就不用担心程序死掉!
问题4.
如果问题三中,必须先发送命令,在读取数值,是不是可以把MBUS_MSG库做到子程序中。因为种类不同,发送的命令也不同,我打算把每台仪表发送的数据和收到的数据放到不同的数据区,想做个子程序,该子程序有三个输入端子,1.为仪表地址,2.启动读信号,3.发送命令寄存器起始地址
2个输出端子, 1.读写完成标志,2 读到得数据起始寄存器
把MBUS_MSG封装到该子程序中,在程序中调用6个这样的子程序,第一个的完成标志位第二个的启动输入,第二个的完成为第三个的启动输入,等等,第6个的为第一个的启动输入,同时第一个的输入在并上MBUS_CTRL的DONE信号。
楼主最近还看过