0:
fbSocketSend.bExecute:=FALSE;
fbSocketReceive.bExecute:=FALSE;
fbClientServrConnection.bEnable:=FALSE;
fbTON.IN:=FALSE;
IF NOT fbSocketSend.bBusy
AND NOT fbSocketReceive.bBusy
AND NOT fbClientServrConnection.bBusy
AND fbRTrig.Q
THEN
MEMSET(
destAddr:=ADR(arrbReceBuffer)
,fillByte:=0
,n:=SIZEOF(arrbReceBuffer)
);
MEMSET(
destAddr:=ADR(arrwWord)
,fillByte:=0
,n:=SIZEOF(arrwWord)
);
iStep:=10;
xStart:=FALSE;
xBusy:=TRUE;
xError:=FALSE;
END_IF
10:
fbClientServrConnection.bEnable:=TRUE;
IF fbClientServrConnection.eState = E_SocketConnectionState.eSOCKET_CONNECTED THEN
iCounter:=iCounter+1;
iStep:=20;
END_IF;
IF fbClientServrConnection.bError THEN
iStep:=990;
iErrorID:=990;
END_IF
20:
//
arrbSendBuffer[0]:=INT_TO_BYTE(eMCProtocol.e3EFrame);
//
arrbSendBuffer[1]:=16#0;
//Network Number
arrbSendBuffer[2]:=16#0;
//SubNetwork Number
arrbSendBuffer[3]:=16#FF;
//Requested unit I/O number
arrbSendBuffer[4]:=16#FF;
arrbSendBuffer[5]:=16#03;
//Requesting Unit Station Number
arrbSendBuffer[6]:=16#00;
//Requested data length Bytes
arrbSendBuffer[7]:=16#0C;
arrbSendBuffer[8]:=16#00;
//Monitor Timer
arrbSendBuffer[9]:=16#10;
arrbSendBuffer[10]:=16#00;
//Command
arrbSendBuffer[11]:=16#01;
arrbSendBuffer[12]:=16#04;
//SubCommand
arrbSendBuffer[13]:=16#00;
arrbSendBuffer[14]:=16#00;
//first number of Register
MEMMOVE(
ADR(_arrbTempArray)
,ADR(udiFirstRegister)
,n:=SIZEOF(udiFirstRegister)
);
arrbSendBuffer[15]:=_arrbTempArray[0];
arrbSendBuffer[16]:=_arrbTempArray[1];
arrbSendBuffer[17]:=_arrbTempArray[2];
//device code
arrbSendBuffer[18]:=INT_TO_BYTE(ProtocolDeviceCode);
//numbers
MEMMOVE(
ADR(_arrbTempArray)
,ADR(uiTotalDevices)
,n:=SIZEOF(uiTotalDevices)
);
arrbSendBuffer[19]:=_arrbTempArray[0];
arrbSendBuffer[20]:=_arrbTempArray[1];
iStep:=30;
30:
fbSocketSend.cbLen:=21;
fbSocketSend.bExecute:=TRUE;
IF fbSocketSend.bBusy THEN
iStep:=35;
ELSIF fbSocketSend.bError THEN
iStep:=991;
iErrorID:=991;
END_IF;
35:
fbSocketSend.bExecute:=FALSE;
fbSocketReceive.bExecute:=TRUE;
IF fbSocketReceive.nRecBytes >0 THEN
iStep:=40;
END_IF
40:
fbSocketReceive.bExecute:=FALSE;
IF NOT fbSocketReceive.bBusy THEN
iStep:=50;
END_IF
50:
//IF arrbReceBuffer[0]
IF arrbReceBuffer[0] <> 16#D0 AND arrbReceBuffer[9] <> 16#00 AND arrbReceBuffer[10] <> 16#00 THEN
iStep:=992;
iErrorID:=992;
ELSE
iStep:=60;
END_IF
60:
//11 is data
MEMMOVE(
destAddr:=ADR(iReceiveWord)
,srcAddr:=ADR(arrbReceBuffer[7])
,n:=SIZEOF(iReceiveWord)
);
MEMMOVE(
destAddr:=ADR(arrwWord)
,srcAddr:=ADR(arrbReceBuffer[11])
,n:=iReceiveWord*2
);
xError:=FALSE;
iStep:=20;
100:
fbClientServrConnection.bEnable:=FALSE;
IF fbClientServrConnection.eState = E_SocketConnectionState.eSOCKET_DISCONNECTED THEN
iStep:=299;
END_IF;
299:
iStep:=0;
990,991,992:
fbTON(IN:=TRUE,PT:=T#1S);
IF fbTON.Q THEN
iStep:=0;
END_IF
END_CASE
0:
fbSocketSend.bExecute:=FALSE;
fbSocketReceive.bExecute:=FALSE;
fbClientServrConnection.bEnable:=FALSE;
IF NOT fbSocketSend.bBusy
AND NOT fbSocketReceive.bBusy
AND NOT fbClientServrConnection.bBusy
AND fbRTrig.Q
THEN
iStep:=10;
xStart:=FALSE;
xBusy:=TRUE;
xError:=FALSE;
END_IF
10:
fbClientServrConnection.bEnable:=TRUE;
IF fbClientServrConnection.eState = E_SocketConnectionState.eSOCKET_CONNECTED THEN
iCounter:=iCounter+1;
iStep:=20;
END_IF;
IF fbClientServrConnection.bError THEN
iStep:=990;
iErrorID:=990;
END_IF
20:
//
arrbSendBuffer[0]:=INT_TO_BYTE(eMCProtocol.e3EFrame);
//
arrbSendBuffer[1]:=16#0;
//Network Number
arrbSendBuffer[2]:=16#0;
//SubNetwork Number
arrbSendBuffer[3]:=16#FF;
//Requested unit I/O number
arrbSendBuffer[4]:=16#FF;
arrbSendBuffer[5]:=16#03;
//Requesting Unit Station Number
arrbSendBuffer[6]:=16#00;
//Requested data length Bytes
uiSendDataTotalLength:=12+uiTotalDevices*2;
MEMMOVE(
ADR(_arrbTempArray)
,ADR(uiSendDataTotalLength)
,n:=SIZEOF(uiSendDataTotalLength)
);
arrbSendBuffer[7]:=_arrbTempArray[0];
arrbSendBuffer[8]:=_arrbTempArray[1];
//Monitor Timer
arrbSendBuffer[9]:=16#10;
arrbSendBuffer[10]:=16#00;
//Command
arrbSendBuffer[11]:=16#01;
arrbSendBuffer[12]:=16#14;
//SubCommand
arrbSendBuffer[13]:=16#00;
arrbSendBuffer[14]:=16#00;
//first number of Register
MEMMOVE(
ADR(_arrbTempArray)
,ADR(udiFirstRegister)
,n:=SIZEOF(udiFirstRegister)
);
arrbSendBuffer[15]:=_arrbTempArray[0];
arrbSendBuffer[16]:=_arrbTempArray[1];
arrbSendBuffer[17]:=_arrbTempArray[2];
//device code
arrbSendBuffer[18]:=INT_TO_BYTE(ProtocolDeviceCode);
//numbers
MEMMOVE(
ADR(_arrbTempArray)
,ADR(uiTotalDevices)
,n:=SIZEOF(uiTotalDevices)
);
arrbSendBuffer[19]:=_arrbTempArray[0];
arrbSendBuffer[20]:=_arrbTempArray[1];
MEMMOVE(
destAddr:=ADR(arrbSendBuffer[21])
,srcAddr:=ADR(arrwWord[0])
,n:=uiTotalDevices*2
);
// arrbSendBuffer[21]:=51;
// arrbSendBuffer[22]:=0;
iStep:=30;
30:
fbSocketSend.cbLen:=21+uiTotalDevices*2;
fbSocketSend.bExecute:=TRUE;
IF fbSocketSend.bBusy THEN
iStep:=35;
ELSIF fbSocketSend.bError THEN
iStep:=991;
iErrorID:=991;
END_IF;
35:
MEMSET(
destAddr:=ADR(arrbReceBuffer)
,fillByte:=0
,n:=SIZEOF(arrbReceBuffer)
);
fbSocketSend.bExecute:=FALSE;
fbSocketReceive.bExecute:=TRUE;
IF fbSocketReceive.nRecBytes >0 THEN
iStep:=40;
END_IF
40:
fbSocketReceive.bExecute:=FALSE;
IF NOT fbSocketReceive.bBusy THEN
iStep:=50;
END_IF
50:
//IF arrbReceBuffer[0]
IF arrbReceBuffer[0] <> 16#D0 OR arrbReceBuffer[9] <> 16#00 OR arrbReceBuffer[10] <> 16#00 THEN
iStep:=992;
iErrorID:=992;
ELSE
iStep:=60;
END_IF
60:
//11 is data
iStep:=20;
100:
fbClientServrConnection.bEnable:=FALSE;
IF fbClientServrConnection.eState = E_SocketConnectionState.eSOCKET_DISCONNECTED THEN
iStep:=299;
END_IF;
299:
iStep:=0;
990,991,992:
fbTON(IN:=TRUE,PT:=T#1S);
IF fbTON.Q THEN
iStep:=0;
END_IF
END_CASE