跳到主要内容

示例程序

PROGRAM PLC_PRG
VAR
iSize: INT;(*发送数据的组数*)
sTritonDataSend: TritonDataSend; (*发送的数据的结构体,结构体中发送数据的结构体中的szKey和szValue长度均为64个字节(由于内存长度限制)*)
sTritonDataRecv: TritonDataRecv;(*从Neptune获取的数据*)
itriton_status: INT; (*获取和Neptune连接状态*)
aTempKey: ARRAY [0..99] OF string;
aTempNote: ARRAY [0..99] OF string;
strJsonData: ARRAY [0..9] OF JsonDataString;
struuid: STRING; (*获取Triton配置的设备序列号*)
intuuid: ARRAY [0..99] OF BYTE; (*获取设备*)
(*
需要在<数据类型>中定义以下结构体:
TYPE JsonDataString :
STRUCT
szKey:STRING;
szValue:STRING;
END_STRUCT
END_TYPE
*)
loop: WORD := 1000; (* 1000ms给一次实时数据 *)
rt: INT;(*调用接口函数返回值*)
i: INT := 1;
Delay: TON;
irandom: INT;
baction_done: BOOL;

END_VAR

(*获取客户端的在线状态,值为1表示和Neptune连接成功,值为0和Neptune连接失败*)
itriton_status:=triton_status();

(*获取客户端配置的设备序列号*)
rtn:=triton_uuid(ADR(intuuid));
SysMemCpy(ADR(struuid),ADR(intuuid),SIZEOF(intuuid));

(*从Neptune获取数据*)
rtn:=triton_recv(ADR(sTritonDataRecv));
IF sTritonDataRecv.iSize<>0 THEN
FOR i:=0 TO 9 DO
SysMemCpy(ADR(strJsonData[i].szKey),ADR(sTritonDataRecv.payload[i].szKey),SIZEOF(sTritonDataRecv.payload[i].szKey));
SysMemCpy(ADR(strJsonData[i].szValue),ADR(sTritonDataRecv.payload[i].szValue),SIZEOF(sTritonDataRecv.payload[i].szValue));
END_FOR
END_IF
IF strJsonData[1].szKey='0100' THEN
bstrart_lift:=STRING_TO_BOOL(strJsonData[1].szValue);
baction_done:=TRUE;
END_IF
IF baction_done THEN
SysMemSet(ADR(strJsonData),0,SIZEOF(strJsonData));(*清空数据缓存区*)
baction_done:=FALSE;
END_IF

iSize:=0;

aTempKey[0]:='0100H';
aTempNote[0]:=INT_TO_STRING(irandom);
iSize:=iSize+1;

aTempKey[1]:='0101H';
aTempNote[1]:=REAL_TO_STRING(50);
iSize:=iSize+1;

aTempKey[2]:='0102H';
aTempNote[2]:=REAL_TO_STRING(25);
iSize:=iSize+1;

aTempKey[3]:='0103H';
aTempNote[3]:=REAL_TO_STRING(8);
iSize:=iSize+1;

aTempKey[4]:='0104H';
aTempNote[4]:=REAL_TO_STRING(40);
iSize:=iSize+1;

(*循环发送数据,采用的是计时器,每1S发送一次*)
Delay(in:=TRUE, PT:=WORD_TO_TIME(loop), Q=>, ET=>);
IF Delay.Q THEN
Delay(in:=FALSE);
(*给sTritonDataRecv赋值*)
sTritonDataSend.iSize:=iSize;(*发送数据的组数*)
FOR i:=0 TO iSize DO
SysMemCpy(ADR(sTritonDataSend.payload[i].szKey), ADR(aTempKey[i]), LEN(aTempKey[i]));(*发送的key有string转化成数组的byte(库要求的是byte的数组)*)
SysMemCpy(ADR(sTritonDataSend.payload[i].szValue), ADR(aTempNote[i]), LEN(aTempNote[i]));(*发送的value有string转化成数组的byte(库要求的是byte的数组)*)
END_FOR
rt := triton_send(ADR(sTritonDataSend));
SysMemSet(ADR(sTritonDataSend),0,SIZEOF(sTritonDataSend));(*清空数据缓存区*)
END_IF
END_PROGRAM