恭喜,你发布的帖子
发布于 2019-10-12 14:53:31
8楼
VDR要看发什么设备的数据,机舱监测报警的以前做过一个,
////Send Data To VDR通讯
FUNCTION Send_Data_VDR: VOID //FC901
VAR_TEMP
index:Int;
Mod_o:INT;
Time_Now:DATE_AND_TIME;
Time_Array AT Time_Now:ARRAY[0..7] OF BYTE ;
Ret_V:INT;
Temp_Byte:byte;
Time_Send:ARRAY[0..7] OF CHAR ;
Temp:BYTE;
END_VAR
BEGIN
//获取时间
Ret_V:=READ_CLK(CDT := Time_Now // OUT: DATE_AND_TIME
); // INT
//得出时间的HH
Temp:=Time_Array[3] AND B#16#0F;
Time_Send[1]:=BYTE_TO_CHAR(b#16#30 OR Temp);
Temp:=ROL(IN:=Time_Array[3],
N:=4);
Temp:=Temp AND B#16#0F;
Time_Send[0]:=BYTE_TO_CHAR(b#16#30 OR Temp);
//得出时间的MM
Temp:=Time_Array[4] AND B#16#0F;
Time_Send[3]:=BYTE_TO_CHAR(b#16#30 OR Temp);
Temp:=ROL(IN:=Time_Array[4],
N:=4);
Temp:=Temp AND B#16#0F;
Time_Send[2]:=BYTE_TO_CHAR(b#16#30 OR Temp);
//得出时间的SS
Temp:=Time_Array[5] AND B#16#0F;
Time_Send[5]:=BYTE_TO_CHAR(b#16#30 OR Temp);
Temp:=ROL(IN:=Time_Array[5],
N:=4);
Temp:=Temp AND B#16#0F;
Time_Send[4]:=BYTE_TO_CHAR(b#16#30 OR Temp);
//得出时间的SS
Temp:=Time_Array[6] AND B#16#0F;
Time_Send[7]:=BYTE_TO_CHAR(b#16#30 OR Temp);
Temp:=ROL(IN:=Time_Array[6],
N:=4);
Temp:=Temp AND B#16#0F;
Time_Send[6]:=BYTE_TO_CHAR(b#16#30 OR Temp);
FOR index := 0 TO 19 BY 1 DO
// 初始化数据头
VDR.ALR[index].Head[0]:= BYTE_TO_CHAR(B#16#24);
VDR.ALR[index].Head[1]:= 'E';
VDR.ALR[index].Head[2]:= 'R';
VDR.ALR[index].Head[3]:= 'A';
VDR.ALR[index].Head[4]:= 'L';
VDR.ALR[index].Head[5]:= 'R';
//初始化数据的中间符号位
VDR.ALR[index].UTCTime[0]:= ',';
VDR.ALR[index].AlarmIdx[0]:= ',';
VDR.ALR[index].AlarmStatus[0]:= ',';
VDR.ALR[index].AlarmAck[0]:= ',';
// 初始化数据尾
VDR.ALR[index].END_CR:= B#16#0D;
VDR.ALR[index].END_LF:= B#16#0A;
//当前发送帧的时间
VDR.ALR[index].UTCTime[1]:= Time_Send[0]; VDR.ALR[index].UTCTime[2]:= Time_Send[1];
VDR.ALR[index].UTCTime[3]:= Time_Send[2]; VDR.ALR[index].UTCTime[4]:= Time_Send[3];
VDR.ALR[index].UTCTime[5]:= Time_Send[4]; VDR.ALR[index].UTCTime[6]:= Time_Send[5];
VDR.ALR[index].UTCTime[7]:= '.';
VDR.ALR[index].UTCTime[8]:= Time_Send[6]; VDR.ALR[index].UTCTime[9]:=Time_Send[7];
END_FOR;
FOR index := 0 TO 14 BY 1 DO
db902.DBB[index] :=db10.DBB[index] ;
END_FOR;
FOR index:=0 TO 38 BY 1 DO
VDR.ALR[index].AlarmIdx[1]:= '0';
VDR.ALR[index].AlarmIdx[2]:= '0';
VDR.ALR[index].AlarmIdx[3]:= '0';
IF index >=10 AND index< 20 THEN VDR.ALR[index].AlarmIdx[2]:= '1';END_IF;
IF index >=20 AND index< 30 THEN VDR.ALR[index].AlarmIdx[2]:= '2';END_IF;
IF index >=30 AND index< 40 THEN VDR.ALR[index].AlarmIdx[2]:= '3';END_IF;
MOD_o:= index MOD 10;
CASE MOD_o OF
0 :
VDR.ALR[index].AlarmIdx[3]:= '0';
1 :
VDR.ALR[index].AlarmIdx[3]:= '1';
2 :
VDR.ALR[index].AlarmIdx[3]:= '2';
3 :
VDR.ALR[index].AlarmIdx[3]:= '3';
4 :
VDR.ALR[index].AlarmIdx[3]:= '4';
5 :
VDR.ALR[index].AlarmIdx[3]:= '5';
6 :
VDR.ALR[index].AlarmIdx[3]:= '6';
7 :
VDR.ALR[index].AlarmIdx[3]:= '7';
8 :
VDR.ALR[index].AlarmIdx[3]:= '8';
9 :
VDR.ALR[index].AlarmIdx[3]:= '9';
ELSE:
// Statements_ELSE
;
END_CASE;
IF DB902.Data[80 + index] THEN VDR.ALR[index].AlarmStatus[1]:= 'A'; ELSE VDR.ALR[index].AlarmStatus[1]:= 'V';END_IF;
IF DB902.Data[80 + index] THEN VDR.ALR[index].AlarmAck[1]:= 'A'; ELSE VDR.ALR[index].AlarmAck[1]:= 'V';END_IF;
IF DB902.Data[2*index + 0] THEN VDR.ALR[index].AlarmText:= 'OPEN WB_H'; END_IF;
IF DB902.Data[2*index + 1] THEN VDR.ALR[index].AlarmText:= 'CLOSE WB_H'; END_IF;
END_FOR;
END_FUNCTION
请填写推广理由:
分享
只看
楼主