用Easy Screen(用户扩展界面)给840D做界面的朋友一定有都会遇到,如果要在HMI设置一个PLC定时器的话一定需要转换。因为HMI数据类型不支持S5TIME格式(S7300 PLC的定时器的时间格式)。这里面就需要用到一个数据类型转换。我参照了FC40自己写了一个整数转S5TIME格式,方便简单应用。
有错误@zhangli0 请指出详细如下:
时基为ms,范围10ms~9990ms
时基为s,范围0~999s
时基为M,范围0~166
时基为h 0~2(这个估计用户不大)
好了,废话不多说了上源码:
FUNCTION FC 140 : S5TIME
TITLE =int to S5 Time
VERSION : 0.1
VAR_INPUT
Int_Time : INT ; //输入值及范围H<=2 M<=166 S<=999 10<=MS<=9990
Time_base : INT ; //时基 0=:ms,1=:s,2=:m,3=h
END_VAR
VAR_TEMP
y_Base : BYTE ;
W_Temp : WORD ;
I_Temp : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
L #Time_base;
L 0;
==I ; // 单位为ms
JC T_MS;
L #Time_base;
L 1;
==I ; // 单位为S
JC T_S;
L #Time_base;
L 2;
==I ; // 单位为M
JC T_M;
L #Time_base;
L 3;
==I ; // 单位为H
JC T_H;
T_MS: L 0; //时基设置10ms级别
T #y_Base;
L #Int_Time;
L 0;
<I ;
JNB MID1; //如果小于O,就当0处理
L 0;
T #I_Temp;
JU MID3;
MID1: L #Int_Time;
L 9990;
>I ;
JNB MID2;
L 999; //如果大于9990,就当9990处理
T #I_Temp;
JU MID3;
MID2: L #Int_Time;
L L#10;
/I ;
T #I_Temp;
JC MID3;
T_S: L 2;
T #y_Base; //时基 设置为1S
L #Int_Time;
L 0;
<I ;
JNB MID4; //如果小于O,就当0处理
L 0;
T #I_Temp;
JU MID3;
MID4: L #Int_Time;
L 999;
>I ;
JNB MID5;
L 999; //如果大于999,就当999处理
T #I_Temp;
JU MID3;
MID5: L #Int_Time;
T #I_Temp;
JC MID3;
T_M: L 3; //时基础改成10S
T #y_Base;
L #Int_Time;
L 0;
<I ;
JNB MID6; //如果小于O,就当0处理
L 0;
T #I_Temp;
JU MID3;
MID6: L #Int_Time;
L 166;
>I ;
JNB MID7;
L 996; //如果大于166,就166处理
T #I_Temp;
JC MID3;
MID7: L #Int_Time;
L 6;
*I ;
T #I_Temp;
JC MID3;
T_H: L 3;
T #y_Base; //时基 设置为10S
L #Int_Time;
L 0;
<I ;
JNB MID8; //如果小于O,就当0处理
L 0;
T #I_Temp;
JU MID3;
MID8: L #Int_Time;
L 2;
>I ;
JNB MID9;
L 720; //如果大于166,就166处理
T #I_Temp;
JC MID3;
MID9: L #Int_Time;
L 360;
*I ;
T #I_Temp;
JC MID3;
MID3: L #I_Temp;
ITB ;
L #y_Base; // Basis einblenden
SLW 12;
OW ;
T #RET_VAL;
NETWORK
TITLE =
END_FUNCTION