modbus通讯如何设置同步时钟

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月1日 下午4:19
下一篇 2020年11月1日 下午4:19

相关推荐