尤其颜色标出部分想看看大家的意见。
1) somachine中有用于隐含检查的子程序POU,譬如:边界检查CHECKBOUNDS, 除数divisor检查函数CHECKDIVDINT, CHECKDIVLINT, CHECKDIVREAL, CHECKDIVLREAL.
字面理解主要是检查bounds边界,检查LINT,DINT,REAL和LREAL类型数据的除数是否为0,那么bounds指的是什么边界呢? 譬如我一个4~20mA信号对应的数字量上下限分别为0和4164,那么难道它会检查出来实际的数字量低于0或者高于4164吗?
关于除数,下面有一段对应的程序
IF divisor = 0 THEN
CheckDivLInt:=1;
ELSE
CheckDivLInt:=divisor;
END_IF;
如果发现除数为零,这是我要让这个错误在HMI上显示,可以直接将“CHECKDIVLINT”作为一个变量提取出来通过其等于1来让错误输出吗?
2) 轮换交替换工作时,我设置了按照启动次数和启动时间两个参考因素,通过HMI触摸屏认为切换选择不同的轮换模式。
为确保几台电机的工作时间一致,我用了Blink脉冲信号,譬如如果要以1h作为一个高/低电平时间,自动状态下通过水位信号来触发,但blink的时序还不清楚什么样的,如果时间没到1h,譬如只到30m后,水位下去了水位信号就没了,那下次启动时blink是继续未完成的30m后再转换到低电平还是已经就是低电平?
下图是轮换部分程序,大家看看是否可行,或者有没别的更好办法?
3) 关于累计工作时间,我不知道下图写的是否有毛病?或者somachine里有没对应的功能块啊?
4)如果PLC的输入变量也要通过485通讯到HMI人机界面,我先前常规的笨办法是:1)输入是BOOL变量直接再通过一线圈中继,中继的输出直接以%MW寄存器地址赋值;整数/实数等变量是直接在全局变量里定义%MW地址。2) 直接通过ST结构化文本语言将%IW赋值给MW%,如:%MWxx:=%IWxx;
这两种方法优缺点在哪?485通讯的话变量必需要经过中间寄存器吗?
最后修改:2018/4/14 16:32:01