赞
踩
IgH DC计算
IgH在主站启动后,等待从站状态机扫描完从站后,就开始计算传输延时。
ec_master_attach_slave_configs //主站绑定从站配置信息
通过前面的分析我们知道,需要先选择一个从站作为参考时钟,根据总线的拓扑结构来计算各从站的传输延时。
ec_master_find_dc_ref_clock // 没有指定参考从站就把第一个带DC的从站作为参考时钟
同时初始化了时钟漂移补偿用的数据报文
ec_datagram_fpwr(&master->ref_sync_datagram, ref ? ref->station_address : 0xffff, 0x0910, 4); //把主站时间写到从站
ec_datagram_frmw(&master->sync_datagram, ref ? ref->station_address : 0xffff, 0x0910, 4); //漂移补偿
ec_datagram_fprd(&master->sync64_datagram, ref ? ref->station_address : 0xffff, 0x0910, 8); //读取从站时间
计算拓扑结构就是计算出该从站上一个从站接的是谁,下一个从站接的谁,这样就能计算出传输延时。
计算出每个从站的传输延迟,可以看到IgH没有计算t_diff,这部分需要漂移补偿来补偿
计算每个从站相对于参考时钟的传输延时
当启动主站进入配置流程后,计算各从站的系统时间偏移
可以看到IgH根据主站时间来依次计算从站时间偏移,这里可能会因为主站的抖动对偏移计算产生一些偏差,最好改成参考从站的时间来计算偏移,从站的转发抖动非常的小
写入时间偏移和传输延时,还需要用户周期任务周期的广播参考从站时钟
从站需要根据当前状态进行配置,跃迁到op状态
配置从站工作周期
判断当前DC时间是否稳定,等待时间5000ms,如果5S后还不稳定,就继续进行下面工作,不等了,当使用主站作为参考时钟,经常会看到打印
Slave did not sync after 5000 ms
就表明从站同步比较慢
设置从站周期信号触发时间,可以看到启动时间加上了shift_time
Shift_time保证了主站发送报文时间和从站触发sync信号不在同一时间,从站同一时间不能处理两件事情,就可能会导致报文没有接收。
从图中可以看到,Shift Time和从站的处理周期数据的时间有关系。
正确的Shift Time 不是唯一的, 它可以在主站周期的整个区间里的进行选择。
不能随便设置,周期越短,Shift Time设置的就要越精确。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。