我没有翻阅各PLC指令表的习惯,当然这不是一个好习惯!
在博途中不使用iec指令的原因在于每次均要添加一个背景数据块,一个任务下来,添加了一大堆背景数据块,我嫌烦。
比如边沿识别和计数,我通常就如下做:
REGION 三,局部时钟脉冲
//--1--SecPules发生器
#b.SecPulse := "Clock_1Hz" AND NOT #b.SecPulsePre;
#b.SecPulsePre := "Clock_1Hz";
//--2--minPulse发生器
IF #b.SecPulse THEN
#i.MinuteTimer += 1;
// 达到60秒,生成分钟上升沿
IF #i.MinuteTimer >= 60 THEN
#b.MinPulse := TRUE;
#i.MinuteTimer := 0; // 重置秒计时器
ELSE
#b.MinPulse := FALSE;
END_IF;
END_IF;
END_REGION
但是最近我在做一个多种药剂的投加调节程序,一是前馈数据列表有点大,二是要做前馈数据的自动优化(相同工况时输出效果好则替换,不同工况时输出效果好则插补新增)。
最后程序量很大,且是多层调用,我就想呀:
1,这个秒脉冲会不会丢失掉?
2,如果确保计时精度?比如执行扫描到某个子程序时,PLC内部计时已经到了999毫秒或者刚好1000ms,不管多少吧,总之,时间上是存在偏差的,且偏差值不固定,本意是满一分钟才执行一次的程序,但实际执行周期是不足一分钟。
我不知道这样说是否准确,列位是否能理解我的表达。
另,问一下,论坛限制了上传图片的像素吗?只能200*200吗?