回复:应用探讨——SCL 编程语言使用探讨

f园园

  • 帖子

    9
  • 精华

    0
  • 被关注

    0

论坛等级:游民

注册时间:2011-03-28

普通 普通 如何晋级?

发布于 2013-09-16 11:32:06

108楼

我编写的一个串口仪表的程序,解析及时序控制,写的不好,供大家参考。
FUNCTION_BLOCK FB61

// Block Parameters
VAR_INPUT
// Input Parameters
TGP_SEN:BOOL;


END_VAR

VAR_IN_OUT
// I/O Parameters
TGP_RcvData: ARRAY[0..15] OF BYTE;
END_VAR

VAR_OUTPUT
// Output Parameters
TGP_SendData: ARRAY[0..15] OF BYTE;
TGP_SendReq:BOOL;
TGP_SendReq_1Time:BOOL;
TGP_SendReq_ENQ:BOOL;
TGP_SendReq_PA1:BOOL;


TGP_SendLen:INT;

TGP_Status_CircuitA1:BYTE;
TGP_Status_CircuitA2:BYTE;
TGP_Status_CircuitB1:BYTE;


TGP_StatusA1:BYTE;
TGP_StatusA2:BYTE;
TGP_StatusB1:BYTE;


TGP_MeasureValueA1:REAL;
TGP_MeasureValueA2:REAL;
TGP_MeasureValueB1:REAL;

END_VAR

VAR_TEMP
// Temporary Variables
RcvLen:INT;
index:INT;
END_VAR
VAR
// Static Variables
TGP_SEN_Flag:BOOL:=FALSE;
RequestReadA1_Flag:BOOL:=FALSE;
ENQ_Flag:BOOL:=FALSE;
CycleSendTimer: SFB4;


TEMP_INT1:INT;
TEMP_REAL1:REAL;
TEMP_INT2:INT;
TEMP_REAL2:REAL;
TEMP_REAL3:REAL;
TEMP_INT3:INT;
TEMP_REAL4:REAL;
END_VAR
BEGIN
// Statement Section


IF TGP_SEN THEN
// Statement Section_IF
FOR index:= 0 TO 15 BY 1 DO
// Statement Section
TGP_RcvData[index]:=0;
END_FOR;

TGP_SEN_Flag:=FALSE;
TGP_SendData[0]:=B#16#53;
TGP_SendData[1]:=B#16#45;
TGP_SendData[2]:=B#16#4E;
TGP_SendData[3]:=B#16#2C;
TGP_SendData[4]:=B#16#33;
TGP_SendData[5]:=B#16#2C;
TGP_SendData[6]:=B#16#33;
TGP_SendData[7]:=B#16#2C;
TGP_SendData[8]:=B#16#31;
TGP_SendData[9]:=B#16#2C;
TGP_SendData[10]:=B#16#31;
TGP_SendData[11]:=B#16#0D;
TGP_SendData[12]:=B#16#0A;

TGP_SendLen:=13;
TGP_SendReq_1Time:=TRUE;
ELSE
TGP_SendReq_1Time:=FALSE;
END_IF;

IF TGP_RcvData[0]=16#06 AND (TGP_SendData[0]=16#53 OR TGP_SendData[0]=16#50) THEN
// Statement Section_IF
FOR index:= 0 TO 15 BY 1 DO
// Statement Section
TGP_RcvData[index]:=0;
END_FOR;

TGP_SendData[0]:=B#16#05;
TGP_SendLen:=1;
TGP_SendReq_ENQ:=TRUE;
ENQ_Flag:=TRUE;
ELSE
TGP_SendReq_ENQ:=FALSE;
END_IF;


IF TGP_RcvData[0]=16#33 AND TGP_SendData[0]=16#05 THEN
// Statement Section_IF
TGP_Status_CircuitA1:=TGP_RcvData[0];
TGP_Status_CircuitA2:=TGP_RcvData[2];
TGP_Status_CircuitB1:=TGP_RcvData[4];

TGP_SEN_Flag:=TRUE;
RequestReadA1_Flag:=FALSE;
ENQ_Flag:=FALSE;
END_IF;
// TON.DBxxx(IN := // IN: BOOL
// ,PT := // IN: TIME
// );
// := DBxxx.Q; // OUT: BOOL
// := DBxxx.ET; // OUT: TIME

CycleSendTimer(IN:=TGP_SEN_Flag AND NOT RequestReadA1_Flag ,PT:=T#2000MS);


IF TGP_SEN_Flag AND CycleSendTimer.Q AND NOT RequestReadA1_Flag THEN

FOR index:= 0 TO 15 BY 1 DO
// Statement Section
TGP_RcvData[index]:=0;
END_FOR;

TGP_SendData[0]:=B#16#50;//reqest for reading pressure measuring circuit A1
TGP_SendData[1]:=B#16#41;
TGP_SendData[2]:=B#16#32;
TGP_SendData[3]:=B#16#0D;
TGP_SendData[4]:=B#16#0A;
TGP_SendLen:=5;
TGP_SendReq_PA1:=TRUE;
RequestReadA1_Flag:=TRUE;
ELSE
TGP_SendReq_PA1:=FALSE;
END_IF;


IF TGP_RcvData[5]=16#45 AND TGP_SendData[1]=16#41 AND TGP_SendData[2]=16#32 THEN
// Statement Section_IF
TGP_StatusA2:=TGP_RcvData[0];
IF TGP_RcvData[9]=16#0D THEN
RcvLen:=11;
ELSE
RcvLen:=10;
END_IF;
IF RcvLen=11 THEN
IF TGP_RcvData[6]= 16#2D THEN
TGP_MeasureValueA1:=(INT_TO_REAL(BYTE_TO_INT(TGP_RcvData[2])-48)+INT_TO_REAL(BYTE_TO_INT(TGP_RcvData[4])-48)*0.1)/EXPD((BYTE_TO_INT(TGP_RcvData[7])-48)*10 +(BYTE_TO_INT(TGP_RcvData[8])-48));
ELSIF TGP_RcvData[6]= 16#2B THEN
TGP_MeasureValueA1:=(INT_TO_REAL(BYTE_TO_INT(TGP_RcvData[2])-48)+INT_TO_REAL(BYTE_TO_INT(TGP_RcvData[4])-48)*0.1)*EXPD((BYTE_TO_INT(TGP_RcvData[7])-48)*10 +(BYTE_TO_INT(TGP_RcvData[8])-48));
END_IF;

ELSIF RcvLen=10 THEN
IF TGP_RcvData[6]= 16#2D THEN
TGP_MeasureValueA1:=(INT_TO_REAL(BYTE_TO_INT(TGP_RcvData[2])-48)+INT_TO_REAL(BYTE_TO_INT(TGP_RcvData[4])-48)*0.1)/EXPD(BYTE_TO_INT(TGP_RcvData[7])-48);
ELSIF TGP_RcvData[6]= 16#2B THEN
TGP_MeasureValueA1:=(INT_TO_REAL(BYTE_TO_INT(TGP_RcvData[2])-48)+INT_TO_REAL(BYTE_TO_INT(TGP_RcvData[4])-48)*0.1)*EXPD(BYTE_TO_INT(TGP_RcvData[7])-48);
TEMP_INT1:=BYTE_TO_INT(TGP_RcvData[2])-48;
TEMP_REAL1:=INT_TO_REAL(BYTE_TO_INT(TGP_RcvData[2])-48);
TEMP_INT2:=BYTE_TO_INT(TGP_RcvData[4])-48;
TEMP_REAL2:=INT_TO_REAL(BYTE_TO_INT(TGP_RcvData[4])-48);
TEMP_REAL3:=INT_TO_REAL(BYTE_TO_INT(TGP_RcvData[4])-48)*0.1;
TEMP_INT3:=BYTE_TO_INT(TGP_RcvData[7])-48;
TEMP_REAL4:=EXPD(BYTE_TO_INT(TGP_RcvData[7])-48);
END_IF;
END_IF;
RequestReadA1_Flag:=FALSE;
ENQ_Flag:=FALSE;
END_IF;
END_FUNCTION_BLOCK
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54768条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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