恭喜,你发布的帖子
发布于 2021-10-09 16:56:10
1楼
这个编辑器太累了;
后面直接上程序,就不一个网络一个网络注释了,程序里也有注释,感兴趣的自己看看吧。
大致思路:
首先自定义任务号,把每个任务号需要的参数整理好,其实,也就是MBUS_MSG指令需要的参数
先创建一张表(队列),即将表格长度传送到一个VW寄存器,smart最多支持100个数据的表,因此,最多有100个通讯任务在表格(队列)中
如果有通讯需求,先锁定当前状态,然后判断表格长度是否达到100,没达到就在后面添加一条记录,也就是将当前状态对应的任务号添加到表格中;
在主程序中,可以通讯的时候,首先检查表格长度是否大于0,如果大于0,则从表格中弹出第一个数据,先入先出(FIFO),接着调用子程序(TaskNoToParameter和ParConvert)来处理弹出的数据,根据任务列表上的任务号,传递参数
在主程序中,根据4传递的参数发起通讯
通讯完成后,调用一个子程序(MB_Result)来处理通讯的结果,也就是通讯的异常处理;
简单总结:
通讯的队列最大只能100个,如果超过100个,就不能使用标准的表格指令,必须自己写;
如果有优先级,则在定义任务号的时候定义优先级,可以升序也可以降序;然后每次往表格添加完数据后,对表格进行排序,这样在下一次通讯的时候就是优先级最高的先通讯了;或者,每次添加表格的时候就判断,自定义一个子程序,比如MB_Insert,添加的时候就是插入到队列中,这样每次添加完成就自动排序了;
可以监控表格长度(本程序里是VW1202),查看通讯是否堵塞,这个在需要多站多通讯应用时应该比较有用;
请填写推广理由:
分享
只看
楼主