226做modbus从站与第三方设备通讯。将PLC内部时钟信息放到缓冲区以便对方读取,查看时间是否正确。若不正确,对方会发送年月日时分秒的数据,同步我PLC的内部时钟。我的问题是:
1。因为不知道对方何时发来时间信息,也有可能发其他信息过来。我用的指令库编程,不知道怎样判断发送来的是时间信息。
2。用指令库编程,怎样查看对方发送命令中的功能码?
问题补充:
多谢一楼的回答。Modbus指令库我也研究过了。
1。但是对方已经把modbus地址规定好了,发送读取的时间信息都在同一个地址里面,所以我想依靠查看功能码的方式来判断,是放数据进缓冲区,还是从缓冲区拿数据。
2。对方发来时间数据同步我PLC,有什么比较好的触发TODW的方法呢? 我本来用的是SMB86的上升沿,但如果对方发来的其他信息,也会触发SMB86,似乎不对。请教!
最佳答案
感觉你们的做法是有矛盾的,不如协商一下,就以主站的时间为准,主站写时间到从站,就不读取了。
另一种方法就是不要用从站库。
第一个问题:
先看看以下内容:
HoldStart处填写的就是保持寄存器V起始地址,
如果是&vb100, 那么保持寄存器(V)第一个地址就是VW100,
如果是&vb1000,那么保持寄存器(V)第一个地址就是VW1000,
MaxHold处填写的是可供主站读写的保持寄存器VW的数量
如果HoldStart=&vb100,MaxHold=10,那么地址对应如下:
VW100 40001
VW102 40002
VW104 40003
VW106 40004
VW108 40005
VW110 40006
VW112 40007
VW114 40008
VW116 40009
VW118 40010
共10个
如果HoldStart=&vb300,MaxHold=100,那么地址对应如下:
VW300 40001
VW302 40002
VW304 40003
...
VW498 40100
共100个
如果你做modbus从站,那么你可以将主站需要的数据,存放在保持寄存器里(HoldStart=&vb300)
如果VW300是A相电压,VW302是B相电压,VW304是C相电压,VW306是A相电流,VW308是B相电流,VW310是C相电流,那么你告诉对方如下的通讯协议:
40001 A相电压
40002 B相电压
40003 C相电压
40004 A相电流
40005 B相电流
40006 C相电流
以上看明白了,就知道怎么做了,
你可以将PLC时间放置到你设定的地址区域,比如40020为小时,40021为分钟,40021为秒钟,
将其他地址放置主站送过来的时间。
第二个问题:
用指令库编程,不需要知道主站发送的信息功能码。
提问者对于答案的评价:
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc316253.html