恭喜,你发布的帖子
发布于 2018-12-13 20:43:42
33楼
1:参考建议增加了容错机制,建议库程序在1MS的定时中断中调用,捕捉精度正负1MS(若不在1MS中断中调用可以修改功能指针第2个字节开始的双字值(例程中VD5)来设定误差,比如误差设成2MS,意思输出点在大于等于时间戳-2以及小于等于时间戳+2范围内的某个值就可以输出.亲测将函数块放在主程序中测试有漏捕捉错误,将VD5由0MS设成1MS就好了,若函数块放在OB1中时如果扫描周期SMW22较大,此时VD5估计还要适当放大).
2:在SMART-CR60上测试OK.(SMB34的1MS中断捕捉SMB35制造的周期是2MS脉宽是1MS的方波,能想到的最”严格”测试)
3 : 在中断程序SMB34_1MS的网络2中增加检验输出沿是否严格与输入沿数目相等检测机制.
4 : 表格长度TABLE_LEN = 2*延时时间段内缓冲的沿总数+2;(或者=(延时时间+平均周期)*2/平均周期;比如例程中延时时间1500MS,方波信号平均周期是2MS;则表格长度=(1500+2)*2/2 = 1502 ).
各参数说明如下:
输入:
SIM_INPUT : 待延时输入点
INITIAL : 初始化脉冲
S_TIME_SET : 输出开始固定延时时间偏移长度设置(相对于输入上升沿的时间偏置值)( ms )
E_TIME_SET : 输出结束固定延时时间偏移长度设置(相对于输入下降沿的时间偏置值)( ms )
以上两者只能在固定值不重叠失真的很小邻域内微调(可让输入点在输出点的宽度稍微变宽点,变窄点,一边宽一边窄点,一边窄一边宽点,以及一样宽以适用不同工艺要求.当两者相等时输出点延时复现输入点)
TABLE_LEN : 双字表格长度为节省指令开销设置成偶数(每个数据占4个字节)
TABLE_ADDR : 表格开头绝对地址
FUNCTION_POINTER : 功能指针(第一个字节0位=1时仅初始化指针,第0位=0时初始化指针和整个表格区;第4位=1时不输出上升沿时间戳,第4位=0时输出上升沿时间戳;第5位=1时不输出下降沿时间戳,第5位=0时输出下降沿时间戳;第二个字节开始的一个双字是输出偏差设置(多此一项程序增加很多内容)),至少占据5个字节空间.尚未加入先捕上升或先捕下降沿功能.
输入输出:
BUFFER : 双字缓冲变量(分配地址即可,用户不可写地址,否则运行错乱)
WR_NUMBER : 写位置(指示写缓冲区指针位置)
RD_NUMBER : 读位置(指示读缓冲区指针位置)
输出:
SIM_OUTPUT : 延时后的输出点.
S_TIME_POINT: 上升沿BGN相对时间戳(ms).
E_TIME_POINT: 下降沿BGN相对时间戳(ms ) .
TIME_SINCE : 函数块运行以来的BGN相对时间戳(ms) .
ERROR: 第0位=1 溢出,第0位=0 未溢出;第1位=1未初始化,第1位=0已初始化.
以上是测试文件
2.1版本是最终版本.
1: 2.1修复下降沿最后一个数据和上升沿一致的显示方面的BUG.
2: 2.1修复溢出偶尔不报警BUG.
3: 以上两个BUG不对函数块正确运行产生直接影响且已在2.1版本修复.
4:如有不受限于扫描周期需求可采用立即输入输出指令.
以下为处理溢出图
以下图片处理读到的有符号绝对值时间戳小于等于0情况有溢出机制且带误差允许的一个思路 其中功能指针第2个字节开始的双字是时间戳误差值(设成2MS就是在时间戳大于等于时间戳减2以及小于等于时间戳加2就可以输出)
以下处理读到的有符号时间戳大于0且带允许误差情况
请填写推广理由:
分享
只看
楼主