发布于 2013-01-13 23:39:04
1楼
程序说起来任务也不是多。写两个点和几个D。点信号是RUN,和自动运行。D是目的位置,最高速度,加速时间,减速时间(详细清单还要多着)。各占一个D。通讯的话分两次完成。一次是写连续的4个点。一次是写连续的4个D。
我是用两个MSG通过切换来完成两种发送的。准确抓住写数据时基,切换时基。当目前的这个msg指令出现Done位ON的时候,立即切换指令或者切换数据,本次扫描内驱动下一个msg的EN位和first位。然后使得两个MSG不会同时运行而又不会产生通讯空闲。
因为我知道,实用上肯定不仅仅那几个通讯的。报警位,状态位,当前值,设定值,参数等等。读一个驱动器的必要信息的话都要读两次以上。可以连续的就连续读,那怕中间隔开了几个没需求的值,效率总比一个一个读搞。除了读,还要写。写的话也至少要写两次了。加起来一个驱动器要通讯至少4次。而且能做通讯的驱动器我计划要在3个以上的。否则没有优势了。这样的话一轮通讯下来十几个请求和答复。如果每个MSG切换之间都留有空隙的话,那么这轮通讯的周期相当可观。
我对照那个不太行的程序,他的切换方式是用计时器切换的。一个msg时间到了,轮到下一个。这样的话,你分配的时间肯定要比正常通讯一次的时间要长。然而每次发收都会白白浪费很多重复发收的过程或者是空闲过程。好的话发一次就够了。这个我觉得要避免的。
上述不知方向对否,反正,仅仅是把自己第二次使用的问题点要点描述一下。
欢迎随时拍砖。