SCL交流

已锁定

虚心+学习

  • 帖子

    110
  • 精华

    6
  • 被关注

    3

论坛等级:游侠

注册时间:2003-11-05

普通 普通 如何晋级?

SCL交流

1225

5

2011-01-08 02:36:35

最近一直在用SCL写程序,感觉SCL真是无所不能,遂开贴想和大家交流交流SCL使用中的一些体会、经验、代码,本人先抛砖引玉,放一些最近写的代码,望大家批评斧正,以利于共同提高。
=========PLC与上位机时间系统===========================
FUNCTION FC301 : VOID

TITLE = 'Block Title'
//
// DT类型数据的显示16进制转10进制.
//用于PLC时间系统
VERSION: '1.0'
AUTHOR: Author
NAME: chenm
FAMILY: Family

// Block Parameters
VAR_INPUT
// Input Parameters
IN:BYTE;
END_VAR

VAR_IN_OUT
// I/O Parameters
END_VAR

VAR_OUTPUT
// Output Parameters
OUT:BYTE;
END_VAR

VAR_TEMP
// Temporary Variables
TEMP2:DINT;
TEMP3:DINT;
X1:DINT;
X10:DINT;
END_VAR
TEMP2:=BYTE_TO_DINT(IN);
X10:=TEMP2/16;
X1:=TEMP2 MOD 16;
X10:=X10*10;
TEMP3:=X1+X10;
OUT:=DINT_TO_BYTE(TEMP3);
END_FUNCTION


FUNCTION FC302 : void

TITLE = 'Block Title'
//
// DT类型数据的显示10进制转16进制.
//用于PLC时间系统
VERSION: '1.0'
AUTHOR: Author
NAME: chenm
FAMILY: Family

// Block Parameters
VAR_INPUT
// Input Parameters
IN:BYTE;
END_VAR

VAR_IN_OUT
// I/O Parameters
END_VAR

VAR_OUTPUT
// Output Parameters
OUT:BYTE;
END_VAR

VAR_TEMP
// Temporary Variables
TEMP2:DINT;
TEMP3:DINT;
X1:DINT;
X10:DINT;
END_VAR
TEMP2:=BYTE_TO_DINT(IN);
X10:=TEMP2/10;
X1:=TEMP2 MOD 10;
X10:=X10*16;
TEMP3:=X1+X10;
OUT:=DINT_TO_BYTE(TEMP3);
;
END_FUNCTION




DATA_BLOCK DB500 FB500
//
//系统时间背景数据块..
//
BEGIN

END_DATA_BLOCK

FUNCTION_BLOCK FB500

TITLE = 'Block Title'
//
// 系统时间设定.
//上位机对时可采取2中方式:
//1:16进制数按年月日时分秒写到DBB0-DBB5,将FLAG16置1即可
//2:10进制数按年月日时分秒写到DBB32-DBB37,将FLAG10置1即可
VERSION: '1.0'
AUTHOR: Author
NAME: Name
FAMILY: Family

VAR_TEMP
// Temporary Variables
temp0:INT;
i:INT;
END_VAR
VAR
// Static Variables
ComputerDT:DATE_AND_TIME;//16进制上位机时间
PLC_DT:DATE_AND_TIME;//PLC时间
PLC_DATE:DATE;//PLC日期
PLC_TOD:TIME_OF_DAY;//
Flag16:BOOL;//16进制上位机对时标志,上位机时间数据区在0-7,16进制数
Flag10:BOOL;//10进制上位机对时标志,上位机时间数据区在32-39,10进制数
P10: BOOL;//上升沿
P16: BOOL;//上升沿
JQJ_DT:ARRAY[0..7]OF BYTE;//外设时间设定,10进制 年月日时分
PLC_DT_BYTE AT PLC_DT:ARRAY[0..7]OF BYTE;
ComputerDT_DEC:ARRAY[0..7]OF BYTE;//10进制上位机时间
ComputerDT_HEX:ARRAY[0..7]OF BYTE;//16进制上位机时间
ComputerDT10 AT ComputerDT_HEX:DATE_AND_TIME;
END_VAR
temp0:=SFC1(CDT:=PLC_DT);// READ_CLK
PLC_DATE:=FC6(IN:=PLC_DT);//DT_DATE
PLC_TOD:=FC8(IN:=PLC_DT);//DT_TOD
IF Flag16 AND NOT P16 THEN
temp0:=SET_CLK(PDT:=ComputerDT);
Flag16:=false;
END_IF;
P16:=Flag16;
IF Flag10 AND NOT P10 THEN
FOR i:= 0 TO 7 BY 1 DO
FC302(IN:=ComputerDT_DEC[i],OUT:=ComputerDT_HEX[i]);
END_FOR;
temp0:=SET_CLK(PDT:=ComputerDT10);
Flag10:=false;
END_IF;
P10:=Flag10;

FOR i:= 0 TO 7 BY 1 DO
FC301(IN:=PLC_DT_BYTE[i],OUT:=JQJ_DT[i]);
END_FOR;


END_FUNCTION_BLOCK

SCL交流 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。