回复:求一个能用的modbus rtu主站轮询程序

已锁定

Zane

版主 西门子1847工业学习平台

  • 帖子

    21062
  • 精华

    399
  • 被关注

    1487

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 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 请求,如同其它实例未曾激活一样。


Zane 注册自动化系统工程师 Always save before download

精华帖版主置评:Z版所述的这些规则,是写ModBus RTU通讯程序必须遵守的。通讯要求的最基本的是可靠。快速、高效要建立在可靠的基础之上!-yming

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15117条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。