回复:一种MB-RTU多站通讯的实现

已锁定

zy5840

  • 帖子

    29
  • 精华

    0
  • 被关注

    2

论坛等级:游士

注册时间:2017-03-06

普通 普通 如何晋级?

发布于 2021-10-09 16:56:10

1楼

这个编辑器太累了;

后面直接上程序,就不一个网络一个网络注释了,程序里也有注释,感兴趣的自己看看吧。

大致思路:

  1. 首先自定义任务号,把每个任务号需要的参数整理好,其实,也就是MBUS_MSG指令需要的参数

  2. 先创建一张表(队列),即将表格长度传送到一个VW寄存器,smart最多支持100个数据的表,因此,最多有100个通讯任务在表格(队列)中

  3. 如果有通讯需求,先锁定当前状态,然后判断表格长度是否达到100,没达到就在后面添加一条记录,也就是将当前状态对应的任务号添加到表格中;

  4. 在主程序中,可以通讯的时候,首先检查表格长度是否大于0,如果大于0,则从表格中弹出第一个数据,先入先出(FIFO),接着调用子程序(TaskNoToParameter和ParConvert)来处理弹出的数据,根据任务列表上的任务号,传递参数

  5. 在主程序中,根据4传递的参数发起通讯

  6. 通讯完成后,调用一个子程序(MB_Result)来处理通讯的结果,也就是通讯的异常处理;

简单总结:

  1. 通讯的队列最大只能100个,如果超过100个,就不能使用标准的表格指令,必须自己写;

  2. 如果有优先级,则在定义任务号的时候定义优先级,可以升序也可以降序;然后每次往表格添加完数据后,对表格进行排序,这样在下一次通讯的时候就是优先级最高的先通讯了;或者,每次添加表格的时候就判断,自定义一个子程序,比如MB_Insert,添加的时候就是插入到队列中,这样每次添加完成就自动排序了;

  3. 可以监控表格长度(本程序里是VW1202),查看通讯是否堵塞,这个在需要多站多通讯应用时应该比较有用;

MB_RTU多站通讯.rar


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9017条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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