eTOYOPUCAddressList.P1K
,eTOYOPUCAddressList.P2K
,eTOYOPUCAddressList.P3K
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxKLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.PxKLower AND wtempEndAddress <= eTOYOPUCAddressRange.PxKUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxKLower);
eTOYOPUCAddressList.P1V
,eTOYOPUCAddressList.P2V
,eTOYOPUCAddressList.P3V
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxVLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.PxVLower AND wtempEndAddress <= eTOYOPUCAddressRange.PxVUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxVLower);
eTOYOPUCAddressList.P1L
,eTOYOPUCAddressList.P2L
,eTOYOPUCAddressList.P3L
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxLLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.PxLLower AND wtempEndAddress <= eTOYOPUCAddressRange.PxLUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxLLower);
eTOYOPUCAddressList.P1XY
,eTOYOPUCAddressList.P2XY
,eTOYOPUCAddressList.P3XY
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxXYLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.PxXYLower AND wtempEndAddress <= eTOYOPUCAddressRange.PxXYUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxXYLower);
eTOYOPUCAddressList.P1M
,eTOYOPUCAddressList.P2M
,eTOYOPUCAddressList.P3M
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxMLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.PxMLower AND wtempEndAddress <= eTOYOPUCAddressRange.PxMUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxMLower);
eTOYOPUCAddressList.P1S
,eTOYOPUCAddressList.P2S
,eTOYOPUCAddressList.P3S
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxSLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.PxSLower AND wtempEndAddress <= eTOYOPUCAddressRange.PxSUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxSLower);
eTOYOPUCAddressList.P1N
,eTOYOPUCAddressList.P2N
,eTOYOPUCAddressList.P3N
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxNLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.PxNLower AND wtempEndAddress <= eTOYOPUCAddressRange.PxNUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxNLower);
eTOYOPUCAddressList.P1R
,eTOYOPUCAddressList.P2R
,eTOYOPUCAddressList.P3R
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxRLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.PxRLower AND wtempEndAddress <= eTOYOPUCAddressRange.PxRUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxRLower);
eTOYOPUCAddressList.P1D
,eTOYOPUCAddressList.P2D
,eTOYOPUCAddressList.P3D
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxDLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.PxDLower AND wtempEndAddress <= eTOYOPUCAddressRange.PxDUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxDLower);
eTOYOPUCAddressList.P1B
,eTOYOPUCAddressList.P2B
,eTOYOPUCAddressList.P3B
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxBLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.PxBLower AND wtempEndAddress <= eTOYOPUCAddressRange.PxBUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.PxBLower);
eTOYOPUCAddressList.EK
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.EKLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.EKLower AND wtempEndAddress <= eTOYOPUCAddressRange.EKUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.EKLower);
eTOYOPUCAddressList.EV
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.EVLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.EVLower AND wtempEndAddress <= eTOYOPUCAddressRange.EVUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.EVLower);
eTOYOPUCAddressList.EL
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.EKLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.ELLower AND wtempEndAddress <= eTOYOPUCAddressRange.ELUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.ELLower);
eTOYOPUCAddressList.EXY
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.EXYLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.EXYLower AND wtempEndAddress <= eTOYOPUCAddressRange.EXYUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.EXYLower);
eTOYOPUCAddressList.EM
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.EMLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.EmLower AND wtempEndAddress <= eTOYOPUCAddressRange.EMUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.EMLower);
eTOYOPUCAddressList.ES
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.ESLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.ESLower AND wtempEndAddress <= eTOYOPUCAddressRange.ESUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.ESLower);
eTOYOPUCAddressList.EN
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.ENLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.ENLower AND wtempEndAddress <= eTOYOPUCAddressRange.ENUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.ENLower);
eTOYOPUCAddressList.H
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.HLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.HLower AND wtempEndAddress <= eTOYOPUCAddressRange.HUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.HLower);
eTOYOPUCAddressList.U
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.ULower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.ULower AND wtempEndAddress <= eTOYOPUCAddressRange.UUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.ULower);
eTOYOPUCAddressList.GXY
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.GXYLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.GXYLower AND wtempEndAddress <= eTOYOPUCAddressRange.GXYUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.GXYLower);
eTOYOPUCAddressList.GM
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.GMLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.GMLower AND wtempEndAddress <= eTOYOPUCAddressRange.GMUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.GMLower);
//Expansion File Register
eTOYOPUCAddressList.EB0000To7FFF
,eTOYOPUCAddressList.EB8000ToFFFF
,eTOYOPUCAddressList.EB10000To17FFF
,eTOYOPUCAddressList.EB18000To1FFFF
:
wtempStartAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.EB0000To7FFFLower);
wtempEndAddress:=wtempStartAddress+iTotolDevices;
IF wtempStartAddress>=eTOYOPUCAddressRange.EB0000To7FFFLower AND wtempEndAddress <= eTOYOPUCAddressRange.EB0000To7FFFUpper THEN
xSettingVaild:=TRUE;
END_IF
wWordAddress:=iStartAddress+TO_UINT(eTOYOPUCAddressRange.EB0000To7FFFLower);
END_CASE
fcTOYOPUCGetAddressList
こちらの関数はToyopucにアクセスするデバイスタイプに沿ってコードを返します。
VAR
関数の入力ではこれからアクセスするデバイスの種類になります。
FUNCTIONfcTOYOPUCGetAddressList : BYTE
VAR_INPUT
eAddressList:eTOYOPUCAddressList;
END_VAR
VAR
END_VAR
0: //Flag Init
xReset:=0;
xEnable:=FALSE;
xiResult:=0;
wErrorCode:=0;
fbSocketReceive.bExecute:=FALSE;
fbSocketSend.bExecute:=FALSE;
IF xStart AND NOT fbSocketReceive.bBusy AND NOT fbSocketSend.bBusy THEN
istep:=3;
END_IF;
3: //Buffer Init
MEMSET(
destAddr:=ADR(arrSendData)
,fillByte:=0
,n:=SIZEOF(arrSendData)
);
MEMSET(
destAddr:=ADR(arrRevData)
,fillByte:=0
,n:=SIZEOF(arrRevData)
);
istep:=5;
istep:=5;
5: //Build the Frame
//Frame Example
//00 00 06 00 94 01 00 20 02 00
//00 00 06 00 94 07 00 10 01 00
//b0 b1 b2 b3 b4 b5 b6 b7 b8 b9
arrSendData[0]:=16#00; //AlwaysON
arrSendData[1]:=16#00; //AlwaysON
arrSendData[2]:=16#06; //LL,Lower Transfer Number
arrSendData[3]:=16#00; //LH,Higher Transfer Number
arrSendData[4]:=16#94; //Command – pleaes reference to Manual P.55
arrSendData[5]:=fcTOYOPUCGetAddressList( //Get the Address Code
stTOYOPUCCommParameters.eStartReadDevices
);
fcTOYOPUCCheckDevicesRange( //Check the user Parameters
eAddressList:=stTOYOPUCCommParameters.eStartReadDevices
,iStartAddress:=stTOYOPUCCommParameters.wStartReadAddress
,iTotolDevices:=stTOYOPUCCommParameters.wTotalReadAddress
,xSettingVaild=>xSettingVaild
,wTotalBytes=>wTotalBytes
,wWordAddress=>wWordAddress
);
MEMCPY(
destAddr:=ADR(arrSendData[6])
,srcAddr:=ADR(wWordAddress)
,n:=SIZEOF(wWordAddress)
);
MEMCPY(//Lower WordNo.
destAddr:=ADR(arrSendData[8])
,srcAddr:=ADR(stTOYOPUCCommParameters.wTotalReadAddress)
,n:=SIZEOF(stTOYOPUCCommParameters.wTotalReadAddress)
);
IF xSettingVaild THEN //Check the user parameter is ok or not
istep:=10;
ELSE
istep:=295;
END_IF;
10:
xEnable:=TRUE;
IF fbClientServrConnection.eState = E_SocketConnectionState.eSOCKET_CONNECTED THEN
istep:=20;
END_IF
20:
istep:=30;
30:
fbSocketSend.bExecute:=TRUE;
IF fbSocketSend.bBusy THEN
fbSocketSend.bExecute:=FALSE;
istep:=40;
END_IF
40:
fbSocketReceive.bExecute:=TRUE;
IF fbSocketReceive.bBusy THEN
istep:=45;
END_IF
45:
fbTON(IN:=TRUE,PT:=T#0.5S);
IF fbTON.Q THEN
istep:=3;
fbTON(IN:=FALSE);
fbSocketReceive.bExecute:=FALSE;
END_IF
IF fbSocketReceive.nRecBytes > 0 AND NOT fbSocketReceive.bError THEN
MEMCPY(
destAddr:=ADR(arrWord[0])
,srcAddr:=ADR(arrRevData[5])
,n:=30
);
istep:=50;
END_IF
50:
0:
xReset:=0;
xiResult:=0;
xEnable:=FALSE;
fbSocketReceive.bExecute:=FALSE;
fbSocketSend.bExecute:=FALSE;
IF xStart AND NOT fbSocketReceive.bBusy AND NOT fbSocketSend.bBusy THEN
istep:=3;
END_IF;
MEMCPY(
destAddr:=ADR(arrSendData[8])
,srcAddr:=ADR(arrWord)
,n:=wTotalBytes
);
IF xSettingVaild AND xStart THEN
istep:=10;
END_IF;
10:
xEnable:=TRUE;
IF fbClientServrConnection.eState = E_SocketConnectionState.eSOCKET_CONNECTED THEN
istep:=20;
END_IF
20:
istep:=30;
30:
fbSocketSend.bExecute:=TRUE;
IF fbSocketSend.bBusy THEN
fbSocketSend.bExecute:=FALSE;
istep:=40;
END_IF
40:
fbSocketReceive.bExecute:=TRUE;
IF fbSocketReceive.nRecBytes > 0 AND NOT fbSocketReceive.bError THEN
istep:=50;
END_IF
50:
0: //Flag Init
xReset:=0;
xEnable:=FALSE;
xiResult:=0;
wErrorCode:=0;
fbSocketReceive.bExecute:=FALSE;
fbSocketSend.bExecute:=FALSE;
IF xStart AND NOT fbSocketReceive.bBusy AND NOT fbSocketSend.bBusy THEN
istep:=3;
END_IF;
3: //Buffer Init
MEMSET(
destAddr:=ADR(arrSendData)
,fillByte:=0
,n:=SIZEOF(arrSendData)
);
MEMSET(
destAddr:=ADR(arrRevData)
,fillByte:=0
,n:=SIZEOF(arrRevData)
);
istep:=5;
istep:=5;
5: //Build the Frame
//Frame Example
//00 00 06 00 94 01 00 20 02 00
//00 00 06 00 94 07 00 10 01 00
//b0 b1 b2 b3 b4 b5 b6 b7 b8 b9
arrSendData[0]:=16#00; //AlwaysON
arrSendData[1]:=16#00; //AlwaysON
arrSendData[2]:=16#06; //LL,Lower Transfer Number
arrSendData[3]:=16#00; //LH,Higher Transfer Number
arrSendData[4]:=16#94; //Command – pleaes reference to Manual P.55
arrSendData[5]:=fcTOYOPUCGetAddressList( //Get the Address Code
stTOYOPUCCommParameters.eStartReadDevices
);
fcTOYOPUCCheckDevicesRange( //Check the user Parameters
eAddressList:=stTOYOPUCCommParameters.eStartReadDevices
,iStartAddress:=stTOYOPUCCommParameters.wStartReadAddress
,iTotolDevices:=stTOYOPUCCommParameters.wTotalReadAddress
,xSettingVaild=>xSettingVaild
,wTotalBytes=>wTotalBytes
,wWordAddress=>wWordAddress
);
MEMCPY(
destAddr:=ADR(arrSendData[6])
,srcAddr:=ADR(wWordAddress)
,n:=SIZEOF(wWordAddress)
);
MEMCPY(//Lower WordNo.
destAddr:=ADR(arrSendData[8])
,srcAddr:=ADR(stTOYOPUCCommParameters.wTotalReadAddress)
,n:=SIZEOF(stTOYOPUCCommParameters.wTotalReadAddress)
);
IF xSettingVaild THEN //Check the user parameter is ok or not
istep:=10;
ELSE
istep:=295;
END_IF;
10:
xEnable:=TRUE;
IF fbClientServrConnection.eState = E_SocketConnectionState.eSOCKET_CONNECTED THEN
istep:=20;
END_IF
20:
istep:=30;
30:
fbSocketSend.bExecute:=TRUE;
IF fbSocketSend.bBusy THEN
fbSocketSend.bExecute:=FALSE;
istep:=40;
END_IF
40:
fbSocketReceive.bExecute:=TRUE;
IF fbSocketReceive.bBusy THEN
istep:=45;
END_IF
45:
fbTON(IN:=TRUE,PT:=T#0.5S);
IF fbTON.Q THEN
istep:=3;
fbTON(IN:=FALSE);
fbSocketReceive.bExecute:=FALSE;
END_IF
IF fbSocketReceive.nRecBytes > 0 AND NOT fbSocketReceive.bError THEN
MEMCPY(
destAddr:=ADR(arrWord[0])
,srcAddr:=ADR(arrRevData[5])
,n:=30
);
istep:=50;
END_IF
50: