恭喜,你发布的帖子
发布于 2017-08-15 10:46:46
7楼
如果用DONE位启动下一个设备发送,环环相扣,会存在设备互相干扰的问题,即前一个设备通讯影响后一个设备发送。这个还是不是主要问题所在,通过DONE位控制轮训会使优先级分配问题变得复杂,举个简单例子。
假如有10台称重仪表,每台仪表有一个读重量、写清零的任务;还有一台变频器,控制启停;变频器的优先级是最高的,当变频器需要启停时,前面所有的读写任务都要让步;仪表的写等级中等,正常不需要写,当该仪表需要清零时候,跳过该仪表读数据;所有仪表的读等级最低;另外,在自动控制时候还可以动态分配优先级,比如其中5台仪表不需要参与控制,可以分时每周期读取一台未用仪表等。
如果使用DONE完成上述过程,是很麻烦的,尤其是设备比较多的情况。
另外还有一点,个人猜想不是很确定:采用DONE位轮训肯定会受到扫描周期的影响的,但是定时中断可能不会影响到。假设扫描周期100MS,定时中断20MS,定时中断和接收中断都不受扫描周期限制,那么理论上一个周期可以读取5个任务,保守4个;采用DONE轮训在主程序里调用,很难保证不受扫描周期限制。
其实就是两种不同的思路和框架,用的习惯就觉得好用了!
首先,不知道怎样互相影响。最好慢慢谈。
第二,优先问题并不代表要用Done位决定。而是由另外的流程控程序决定。Done只是个苦力,告诉我们做好了而已。他做好了然后到做什么,是我们的事是我们程序有选择性的决定,不是硬性的一直排队轮。
第三,我觉得你是试过modbus_msg可以在中断中使用。是吧?还是你只是设想?或许你本来就没用库,是自编的程序。那么,我承认,你赢。
第四,你说不须要超时,那么,你是不须要回复吗?只有广播是不须要超时的。你不须要超时,怎么结束本次通讯?万一你放弃本次通讯后从站偏偏回复了,那么线上信号就开始乱了。
请填写推广理由:
分享
只看
楼主