技术论坛

 关于s7-200做modbus主站访问多台不同种类智能仪表的构思与问题

返回主题列表
作者 主题
第七印记
侠客

经验值:942
发帖数:197
精华帖:1
楼主    2011-12-13 11:48:49
主题:关于s7-200做modbus主站访问多台不同种类智能仪表的构思与问题 精华帖 
大家好,我最近做个通讯的项目,也一直在看s7-200的自由口通讯和modbus通讯,先把我的构思方案拿出来让大家分析分析,多提提建议!
硬件: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信号。
如果谁有类似的例程,请发一份,不胜感激,学习学习 zzzkkm@126.com
以上为我现在还有疑问的地方。初学通讯,希望各位朋友多多指导。
严谨探索,追求完美。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。