我通讯读取120个从站,每个从站只做读取,需要一个MSG指令,这样算下来要写120个指令,有没有便捷一点的方法啊?
问题补充:
MSG指令最短的轮询时间是多少?我测试的100ms不行,200ms可以。
最佳答案
S7-200SMART通过RS485接口读取120个从站的数据,使用MBUS_MSG指令,任何时候只能有一条MBUS_MSG使能有效,涉及的参数有En、First、Slave、RW、Addr、Count、DataPtr等参数:
1、可以使用如SM0.5的脉冲信号使能、触发通信请求(连接En、边沿指令连接First)以保障只有一条MBUS_MSG激活;关于轮询可以参考下午尾末所附例程:
http://www.ad.siemens.com.cn/productportal/prods/s7-200-smart-portal/200smarttop/communication/serial_port/modbus/Master/Master.htm
2、Slave可以是Byte型变量,RW只读可以固定为0,Addr是从站待读取区的首地址,Count读取的寄存器数量。若从只能地址是连续的、而且读取的从站的映射地址及数量是相同的。则可以例用主循环,每次读取1个从站。或者写一个循环读120个站。读一个站Slave对应的变量+1(INC_B指令)
3、DataPtr则是读回来后存在PLC的位置的首地址,显然读不同的从站,这个地址一定要不同,可以使用地址指针如AC0=&VB200或VD1000=&VB200等,由于这是4个字节的指针变量,因此使用INC_DW实现加1.
4、判断120个从站是否读完毕。已遍历完,将Slave、DataPtr指向的变量恢复初值,指向首站。
总结来看,若你的从站地址连续、读取的寄存器空间及其数量相同,则很容采用指针、循环来实现,而不用写120条MBUS_MSG指令
提问者对于答案的评价:
你的理论是正确的,但是我对指针不太了解,DataPtr设置不熟悉,能举个例子吗?
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc343291.html