恭喜,你发布的帖子
发布于 2020-06-03 00:03:38
19楼
Modbus_Master 通信规则
● 必须先执行 Modbus_Comm_Load 组态端口,然后 Modbus_Master 指令才能与该端口通信。
● 如果要将某个端口用于初始化 Modbus 主站请求,则 Modbus_Slave 不应使用该端口。Modbus_Master 执行的一个或多个实例可使用该端口,但是对于该端口,所有Modbus_Master 执行都必须使用同一个Modbus_Master 背景数据块。
● Modbus 指令不使用通信中断事件来控制通信过程。用户程序必须轮询 Modbus_Master指令以了解传送和接收的完成情况。
● 对于给定的端口,从程序循环 OB 中调用所有 Modbus_Master 执行。Modbus_Master 指令只能在一个程序循环或循环/延时执行等级执行。它们不能同时在两种执行优先级中执行。如果一个Modbus_Master 指令被另一个执行优先级更高的 Modbus_Master 取代,将导致不正确的操作。Modbus_Master 指令不能在启动、诊断或时间错误执行优先级执行。
● Modbus_Master 指令启动传输后,必须连续执行已启用 EN 输入的该实例,直到返回状态 DONE=1 或状态 ERROR=1 为止。在这两个事件其中之一发生前,一个特殊的Modbus_Master 实例被视为已激活。原始实例激活后,调用已启用 REQ 输入的其它任何实例都将导致错误。如果原始实例的连续执行过程停止,则请求状态保持激活一段时间,该时间由静态变量“Blocked_Proc_Timeout”指定。一旦超出该时间段,则下一个使用激活的 REQ 输入调用的 Modbus_Master 指令成为激活实例。这可以防止单个
Modbus_Master 指令独占或锁定对端口的访问。如果在由静态变量“Blocked_Proc_Timeout”指定的时间段内没有启用原始激活的实例,则下次执行此实例(未设置 REQ)时将清除激活状态。如果设置了REQ,则此次执行将启动新的Modbus_Master 请求,如同其它实例未曾激活一样。
精华帖版主置评:Z版所述的这些规则,是写ModBus RTU通讯程序必须遵守的。通讯要求的最基本的是可靠。快速、高效要建立在可靠的基础之上!-yming
请填写推广理由:
分享
只看
楼主