| 作者 | 主题 |
|---|---|
|
菲戈 至圣 经验值:28698 发帖数:5874 精华帖:61 |
楼主
主题:【分享】写了一个整数转S5TIME格式FC块,时间基数可以设置毫秒,秒,分钟,小时(简单型)
用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
欢迎交流,QQ:2301013064 邮箱:feige6@139.com
|