quote:以下是引用Zaxife在2011-07-30 00:29:50的发言:不知道你通讯用的什么协议,也就不清楚你的数据格式,无从回答你的问题。
如果是
modbusRTU协议的话:
1 协议规定保持寄存器是32位的Word类型数据,不是VB,而是VW。如果你定义了MBUS_INIT的HoldStart是&VB100的话,那么6个保持寄存器连续排列就是VW100、VW102、VW104、VW106、VW108、VW110,你用16功能码写的6个数据就是按这个顺序保持到上述6个字内存中,而不是字内存VB。
2 结束符?用库不是比较简单么?反正266大把内存可用。
3 如果用VB分开写保持寄存器,只要用写单个寄存器功能码06就可以了,不要用16功能码多写。
比如往12号地址的PLC写你说的分割数据用到6次写指令:
0C 06 00 0A 00 0A 28 D2
0C 06 00 0F 00 14 B8 DB
0C 06 00 14 00 1E 48 DB
0C 06 00 19 00 28 59 0E
0C 06 00 1E 00 32 69 04
0C 06 00 23 00 3C 79 0C
....既然是自己写的程序,何必分隔开来?
非常感谢你的细心回答.
其实我的问题没那么复杂,可能你们实战的比较多,所以会考虑的更深入 更专业.我是用的s7-200自由口通讯模式,系统也是简单的单机PC与单个s7-200 CPU226 CN,并不涉及一主多从.我的目的就是想在PC上做个interface,能按照不同的需求设置PLC里面的变量参数,
例如:PLC中我的定时器设定值是个变量(VW120),这就需要在PC上设置参数并能传到VW120中。
因为有不同的变量,我的VB程序一次字符串传送的话,在PLC接收方就有一个识别分隔的问题了。
当然RCV和XTM,第一VB位表示的是字节数据量--这点我知道的。
我目前的状况是:PC上的VB程序和PLC里的RCV/XTM通讯没问题,但PC上传过来的数据没有送到我想要的地址。如:我想要输入十进制500或者50,到PLC的VW120字地址中,那么在PLC程序里 我需要进行怎样的处理呢?
ps:唉,不知道我有没说清楚,感觉搞的好乱。个人感慨想起来很顺利,实际做起来就会发现各种问题,郁闷。