Started Modbus Master for Levitronix Pumps and Flow sensors
This commit is contained in:
44
PLC/01_Stationen/MediaStation/DUTs/ST_Levi_ChDStatus.TcDUT
Normal file
44
PLC/01_Stationen/MediaStation/DUTs/ST_Levi_ChDStatus.TcDUT
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TcPlcObject Version="1.1.0.1">
|
||||||
|
<DUT Name="ST_Levi_ChDStatus" Id="{d1bf4f7b-9f39-4e8d-86cd-899174d80a62}">
|
||||||
|
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
|
||||||
|
TYPE ST_Levi_ChDStatus :
|
||||||
|
STRUCT
|
||||||
|
// Detected bubble in sensor. Stays active while ‘bubble detect hold time’
|
||||||
|
bBubbleDetected : BIT;
|
||||||
|
// Sensor signal is abnormal. (Empty sensor, unplugged sensor, too many bubbles)
|
||||||
|
bMeasError : BIT;
|
||||||
|
// Reverse flow
|
||||||
|
bReverseFlow : BIT;
|
||||||
|
// Combination of Full scale and Volume Pulse setting is invalid
|
||||||
|
bVolCntPulseSetError : BIT;
|
||||||
|
// Zero Adjustment is in progress
|
||||||
|
bZeroAdjActive : BIT;
|
||||||
|
// 0: Last Zero Adjustment was successful
|
||||||
|
// 1: Last Zero Adjustment was not successful because sensor was empty or there were too many bubbles in sensor.
|
||||||
|
bZeroAdjErr : BIT;
|
||||||
|
// Parameter set mode active. Settings can be written to Hold register
|
||||||
|
bSetModeActive : BIT;
|
||||||
|
// EEPROM writing active
|
||||||
|
bEEPROMWriting : BIT;
|
||||||
|
// Measured flow is higher than Alarm High level
|
||||||
|
bFlowAlarmHigh : BIT;
|
||||||
|
// Measured flow is lower than Alarm Low level
|
||||||
|
bFlowAlarmLow : BIT;
|
||||||
|
// Volume Counter is greater than Volume Counter Alarm H limit (Volume Counter Alarm enabled)
|
||||||
|
bVolCntAlarmH : BIT;
|
||||||
|
// Volume Counter is greater than Volume Counter Alarm HH limit (Volume Counter Alarm enabled)
|
||||||
|
bVolCntAlarmHH : BIT;
|
||||||
|
// Analog or digital test output is active.
|
||||||
|
bOutputTest : BIT;
|
||||||
|
// EEPROM error active
|
||||||
|
bEEPROMErr : BIT;
|
||||||
|
// Short circuit detected
|
||||||
|
bShortCircuit : BIT;
|
||||||
|
// Device is in firmware download mode
|
||||||
|
bFirmwareUpdateAct : BIT;
|
||||||
|
END_STRUCT
|
||||||
|
END_TYPE
|
||||||
|
]]></Declaration>
|
||||||
|
</DUT>
|
||||||
|
</TcPlcObject>
|
||||||
14
PLC/01_Stationen/MediaStation/DUTs/ST_Levi_ChData.TcDUT
Normal file
14
PLC/01_Stationen/MediaStation/DUTs/ST_Levi_ChData.TcDUT
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TcPlcObject Version="1.1.0.1">
|
||||||
|
<DUT Name="ST_Levi_ChData" Id="{7bd2984e-f05d-431f-83f1-90d65fb7d1bc}">
|
||||||
|
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
|
||||||
|
TYPE ST_Levi_ChData :
|
||||||
|
STRUCT
|
||||||
|
stStatus : ST_Levi_ChDStatus;
|
||||||
|
siCurrFlow : SINT;
|
||||||
|
dwPulseCounter : DWORD;
|
||||||
|
END_STRUCT
|
||||||
|
END_TYPE
|
||||||
|
]]></Declaration>
|
||||||
|
</DUT>
|
||||||
|
</TcPlcObject>
|
||||||
164
PLC/01_Stationen/MediaStation/FB_Levi_Flowsensor.TcPOU
Normal file
164
PLC/01_Stationen/MediaStation/FB_Levi_Flowsensor.TcPOU
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TcPlcObject Version="1.1.0.1">
|
||||||
|
<POU Name="FB_Levi_Flowsensor" Id="{650b4e84-15bc-4cc6-bda5-d5ab333779ee}" SpecialFunc="None">
|
||||||
|
<Declaration><![CDATA[FUNCTION_BLOCK FB_Levi_LFC6IO
|
||||||
|
VAR_INPUT
|
||||||
|
// Base station address
|
||||||
|
byBaseAddr : BYTE;
|
||||||
|
|
||||||
|
xReleaseAlarms : BOOL;
|
||||||
|
xConfirmAlarms : BOOL;
|
||||||
|
END_VAR
|
||||||
|
VAR_IN_OUT
|
||||||
|
// Modbus master comm fb
|
||||||
|
fbMBMaster : ModbusRtuMasterV2_KL6x22B;
|
||||||
|
END_VAR
|
||||||
|
VAR_OUTPUT
|
||||||
|
// Current flowrate in ml/min
|
||||||
|
rCurrFlowrate : ARRAY[0..5] OF REAL;
|
||||||
|
|
||||||
|
xBusy : BOOL;
|
||||||
|
xDone : BOOL;
|
||||||
|
xError : BOOL;
|
||||||
|
END_VAR
|
||||||
|
VAR
|
||||||
|
// Full scale value of all channels in ml/min
|
||||||
|
_dwFullScale : DWORD;
|
||||||
|
|
||||||
|
// Channel data
|
||||||
|
_astChannelData : ARRAY[0..5] OF ST_Levi_ChData;
|
||||||
|
|
||||||
|
// Temporary data storage for writing settings
|
||||||
|
_awTempData : ARRAY[0..1] OF WORD;
|
||||||
|
|
||||||
|
// State machine state
|
||||||
|
_iState : INT;
|
||||||
|
|
||||||
|
// Internal commands
|
||||||
|
_eCmd : (NONE, SET_FULL_SCALE, );
|
||||||
|
END_VAR
|
||||||
|
VAR CONSTANT
|
||||||
|
REG_SET_MODE : WORD := 0;
|
||||||
|
REG_FULL_SCALE : WORD := 2;
|
||||||
|
REG_CH_DATA : WORD := 0;
|
||||||
|
END_VAR]]></Declaration>
|
||||||
|
<Implementation>
|
||||||
|
<ST><![CDATA[CASE _iState OF
|
||||||
|
// Wait for Modbus master to be ready
|
||||||
|
0:
|
||||||
|
IF (NOT fbMBMaster.BUSY)THEN
|
||||||
|
// Get full scale value for later flow calculation
|
||||||
|
fbMBMaster.UnitID := byBaseAddr;
|
||||||
|
fbMBMaster.MBAddr := REG_FULL_SCALE;
|
||||||
|
fbMBMaster.Quantity := 2;
|
||||||
|
fbMBMaster.cbLength := SIZEOF(_dwFullScale);
|
||||||
|
fbMBMaster.pMemoryAddr := ADR(_dwFullScale);
|
||||||
|
|
||||||
|
_iState := 10;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
|
||||||
|
// Wait for reading done
|
||||||
|
10:
|
||||||
|
fbMBMaster.ReadRegs();
|
||||||
|
|
||||||
|
IF (NOT fbMBMaster.BUSY) THEN
|
||||||
|
_iState := 20;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
IF fbMBMaster.Error THEN
|
||||||
|
_iState := 900;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
// Poll channel data
|
||||||
|
20:
|
||||||
|
IF THEN
|
||||||
|
fbMBMaster.UnitID := byBaseAddr;
|
||||||
|
fbMBMaster.MBAddr := REG_CH_DATA;
|
||||||
|
fbMBMaster.Quantity := 24;
|
||||||
|
fbMBMaster.cbLength := SIZEOF(_astChannelData);
|
||||||
|
fbMBMaster.pMemoryAddr := ADR(_astChannelData);
|
||||||
|
|
||||||
|
// Call once to set MB Master to busy
|
||||||
|
fbMBMaster.ReadInputRegs();
|
||||||
|
|
||||||
|
_iState := 21;
|
||||||
|
ELSIF (_eCmd <> NONE) AND (NOT fbMBMaster.BUSY) THEN
|
||||||
|
_iState := 30;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
// Wait for response
|
||||||
|
21:
|
||||||
|
fbMBMaster.ReadInputRegs();
|
||||||
|
|
||||||
|
IF (NOT fbMBMaster.BUSY) THEN
|
||||||
|
// Calculate output flowrates
|
||||||
|
M_CalcOutputData();
|
||||||
|
_iState := 20;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
IF fbMBMaster.Error THEN
|
||||||
|
_iState := 900;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
// Command handling -> Set mode
|
||||||
|
30:
|
||||||
|
// Set bit 1 to 1 for Set Mode
|
||||||
|
_awTempData[0] := 2#10;
|
||||||
|
|
||||||
|
fbMBMaster.UnitID := byBaseAddr;
|
||||||
|
fbMBMaster.MBAddr := REG_SET_MODE;
|
||||||
|
fbMBMaster.Quantity := 1;
|
||||||
|
fbMBMaster.cbLength := 2;
|
||||||
|
fbMBMaster.pMemoryAddr := ADR(_awTempData[0]);
|
||||||
|
|
||||||
|
// Error state
|
||||||
|
900:
|
||||||
|
IF xConfirmAlarms THEN
|
||||||
|
xError := FALSE;
|
||||||
|
_iState := 0;
|
||||||
|
END_IF
|
||||||
|
END_CASE]]></ST>
|
||||||
|
</Implementation>
|
||||||
|
<Method Name="M_CalcOutputData" Id="{5b932e1a-1437-4032-adb5-2eae4b98574c}">
|
||||||
|
<Declaration><![CDATA[METHOD PRIVATE M_CalcOutputData
|
||||||
|
VAR
|
||||||
|
i : int;
|
||||||
|
END_VAR]]></Declaration>
|
||||||
|
<Implementation>
|
||||||
|
<ST><![CDATA[FOR i := 0 TO 5 DO
|
||||||
|
// Current flowrate from channel data is in % of full scale (-30.000 ~ 30.000 => (-300 ~ +300) %
|
||||||
|
// _Full scale is in l/min but scaling is as followed: 10 ~ 500000 => (0.010 ~ 500) l/min => (10 ~ 500.000) ml/min
|
||||||
|
// Result is in ml/min
|
||||||
|
rCurrFlowrate[i] := (SINT_TO_REAL(_astChannelData[i].siCurrFlow) * DWORD_TO_REAL(_dwFullScale)) / 10_000;
|
||||||
|
END_FOR
|
||||||
|
]]></ST>
|
||||||
|
</Implementation>
|
||||||
|
</Method>
|
||||||
|
<Method Name="M_ReadSensorData" Id="{2cd73435-5e66-4519-8bdc-106eb3093539}">
|
||||||
|
<Declaration><![CDATA[METHOD M_ReadSensorData : BOOL
|
||||||
|
VAR_INPUT
|
||||||
|
END_VAR
|
||||||
|
]]></Declaration>
|
||||||
|
<Implementation>
|
||||||
|
<ST><![CDATA[IF xBusy THEN
|
||||||
|
M_ReadSensorData := FALSE;
|
||||||
|
RETURN;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
]]></ST>
|
||||||
|
</Implementation>
|
||||||
|
</Method>
|
||||||
|
<Method Name="M_SetFullScale" Id="{ee32b999-71fe-4e16-ab8c-09e92e1f41ef}">
|
||||||
|
<Declaration><![CDATA[METHOD M_SetFullScale : BOOL
|
||||||
|
VAR_INPUT
|
||||||
|
// Full scale in ml/min
|
||||||
|
siFullScale : SINT;
|
||||||
|
END_VAR
|
||||||
|
]]></Declaration>
|
||||||
|
<Implementation>
|
||||||
|
<ST><![CDATA[]]></ST>
|
||||||
|
</Implementation>
|
||||||
|
</Method>
|
||||||
|
</POU>
|
||||||
|
</TcPlcObject>
|
||||||
@@ -34,6 +34,9 @@ VAR
|
|||||||
// (9) Filmetch
|
// (9) Filmetch
|
||||||
_fbTankFilmetch : FB_Tank;
|
_fbTankFilmetch : FB_Tank;
|
||||||
|
|
||||||
|
// Flowsensors
|
||||||
|
|
||||||
|
|
||||||
END_VAR
|
END_VAR
|
||||||
]]></Declaration>
|
]]></Declaration>
|
||||||
<Implementation>
|
<Implementation>
|
||||||
|
|||||||
17
PLC/LibraryCandidates/ModbusMaster/E_Modbus_Cmd.TcDUT
Normal file
17
PLC/LibraryCandidates/ModbusMaster/E_Modbus_Cmd.TcDUT
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TcPlcObject Version="1.1.0.1">
|
||||||
|
<DUT Name="E_Modbus_Cmd" Id="{750955bf-9dc1-4cb7-bee0-c1c010c28bac}">
|
||||||
|
<Declaration><![CDATA[{attribute 'qualified_only'}
|
||||||
|
{attribute 'strict'}
|
||||||
|
{attribute 'to_string'}
|
||||||
|
TYPE E_Modbus_Cmd :
|
||||||
|
(
|
||||||
|
NONE := 0,
|
||||||
|
READ_HOLDING,
|
||||||
|
READ_INPUTS,
|
||||||
|
WRITE_HOLDING
|
||||||
|
);
|
||||||
|
END_TYPE
|
||||||
|
]]></Declaration>
|
||||||
|
</DUT>
|
||||||
|
</TcPlcObject>
|
||||||
147
PLC/LibraryCandidates/ModbusMaster/FB_ModbusMaster.TcPOU
Normal file
147
PLC/LibraryCandidates/ModbusMaster/FB_ModbusMaster.TcPOU
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TcPlcObject Version="1.1.0.1">
|
||||||
|
<POU Name="FB_ModbusMaster" Id="{90292ada-f5b3-4b38-a85e-d6dc52e68612}" SpecialFunc="None">
|
||||||
|
<Declaration><![CDATA[FUNCTION_BLOCK FB_ModbusMaster
|
||||||
|
VAR_INPUT
|
||||||
|
timGapTime : TIME := T#20MS;
|
||||||
|
END_VAR
|
||||||
|
VAR_OUTPUT
|
||||||
|
xBusy : BOOL;
|
||||||
|
END_VAR
|
||||||
|
VAR
|
||||||
|
// Modbus master comm fb
|
||||||
|
_fbMaster : ModbusRtuMasterV2_KL6x22B;
|
||||||
|
|
||||||
|
// Request queue
|
||||||
|
_astReqQueue : ARRAY[0..(GVL_ModbusMaster.QUEUE_SIZE - 1)] OF ST_Modbus_Req;
|
||||||
|
_iHead : INT := 0;
|
||||||
|
_iTail : INT := 0;
|
||||||
|
|
||||||
|
// Current request from queue
|
||||||
|
_stCurrReq : ST_Modbus_Req;
|
||||||
|
|
||||||
|
// Gap timer so that we dont send requests back to back
|
||||||
|
_tonGapTimer : TON;
|
||||||
|
|
||||||
|
// State machine state
|
||||||
|
_iState : INT := 0;
|
||||||
|
|
||||||
|
// Rerun flag for faster state machine
|
||||||
|
_xSMCycleDone : BOOL := TRUE;
|
||||||
|
END_VAR
|
||||||
|
]]></Declaration>
|
||||||
|
<Implementation>
|
||||||
|
<ST><![CDATA[// Main state machine
|
||||||
|
REPEAT
|
||||||
|
// Safety reset
|
||||||
|
_xSMCycleDone := TRUE;
|
||||||
|
|
||||||
|
CASE _iState OF
|
||||||
|
// Wait for gap timer to be expired
|
||||||
|
0:
|
||||||
|
_tonGapTimer(IN := TRUE);
|
||||||
|
|
||||||
|
IF _tonGapTimer.Q THEN
|
||||||
|
_tonGapTimer(IN := FALSE);
|
||||||
|
_xSMCycleDone := FALSE;
|
||||||
|
_iState := 1;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
// Get next request if there is one in the queue
|
||||||
|
1:
|
||||||
|
// Get next request from queue if there is one
|
||||||
|
IF M_Dequeue() THEN
|
||||||
|
// Set fb data
|
||||||
|
_fbMaster.UnitID := _stCurrReq.bySlaveAddr;
|
||||||
|
_fbMaster.MBAddr := _stCurrReq.wStartAddr;
|
||||||
|
_fbMaster.Quantity := _stCurrReq.wQuantity;
|
||||||
|
_fbMaster.cbLength := _stCurrReq.wDataSize;
|
||||||
|
_fbMaster.pMemoryAddr := _stCurrReq.pvData;
|
||||||
|
|
||||||
|
// Rerun statemachine this cycle
|
||||||
|
_xSMCycleDone := FALSE;
|
||||||
|
_iState := 10;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
// Execute dequeued command
|
||||||
|
10:
|
||||||
|
// Call modbus master corresponding function
|
||||||
|
CASE _stCurrReq.eCmd OF
|
||||||
|
E_Modbus_Cmd.READ_HOLDING:
|
||||||
|
_fbMaster.ReadRegs();
|
||||||
|
|
||||||
|
E_Modbus_Cmd.READ_INPUTS:
|
||||||
|
_fbMaster.ReadInputRegs();
|
||||||
|
|
||||||
|
E_Modbus_Cmd.WRITE_HOLDING:
|
||||||
|
_fbMaster.WriteRegs();
|
||||||
|
|
||||||
|
// Reject unknown commands
|
||||||
|
ELSE
|
||||||
|
_stCurrReq.pxError^ := TRUE;
|
||||||
|
_iState := 0;
|
||||||
|
END_CASE
|
||||||
|
|
||||||
|
// Wait for fb to be done
|
||||||
|
IF (NOT _fbMaster.BUSY) THEN
|
||||||
|
_stCurrReq.pxDone^ := TRUE;
|
||||||
|
// Rerun statemachine this cycle
|
||||||
|
_xSMCycleDone := FALSE;
|
||||||
|
_iState := 0;
|
||||||
|
END_IF
|
||||||
|
|
||||||
|
IF _fbMaster.Error THEN
|
||||||
|
_stCurrReq.pxError^ := TRUE;
|
||||||
|
// Rerun statemachine this cycle
|
||||||
|
_xSMCycleDone := FALSE;
|
||||||
|
_iState := 0;
|
||||||
|
END_IF
|
||||||
|
END_CASE
|
||||||
|
|
||||||
|
// Check if we want to rerun the state machine
|
||||||
|
UNTIL _xSMCycleDone
|
||||||
|
END_REPEAT
|
||||||
|
]]></ST>
|
||||||
|
</Implementation>
|
||||||
|
<Method Name="M_Dequeue" Id="{083aa9a5-ac23-4366-b080-ab00cfa6b4ce}">
|
||||||
|
<Declaration><![CDATA[METHOD PRIVATE M_Dequeue : BOOL
|
||||||
|
VAR_INPUT
|
||||||
|
END_VAR
|
||||||
|
]]></Declaration>
|
||||||
|
<Implementation>
|
||||||
|
<ST><![CDATA[// No entries in queue
|
||||||
|
IF _iHead = _iTail THEN
|
||||||
|
M_Dequeue := FALSE;
|
||||||
|
ELSE
|
||||||
|
// Get next entry
|
||||||
|
_stCurrReq := _astReqQueue;
|
||||||
|
_iHead := (_iHead + 1) MOD GVL_ModbusMaster.QUEUE_SIZE;
|
||||||
|
M_Dequeue := TRUE;
|
||||||
|
END_IF]]></ST>
|
||||||
|
</Implementation>
|
||||||
|
</Method>
|
||||||
|
<Method Name="M_Enqueue" Id="{37963eb3-9b4c-4945-ba35-cfefd78cb427}">
|
||||||
|
<Declaration><![CDATA[METHOD M_Enqueue : BOOL
|
||||||
|
VAR_INPUT
|
||||||
|
stReq : ST_Modbus_Req;
|
||||||
|
END_VAR
|
||||||
|
VAR
|
||||||
|
_iNextTail : INT;
|
||||||
|
END_VAR]]></Declaration>
|
||||||
|
<Implementation>
|
||||||
|
<ST><![CDATA[// Calculate next entry
|
||||||
|
_iNextTail := (_iTail + 1) MOD GVL_ModbusMaster.QUEUE_SIZE;
|
||||||
|
|
||||||
|
// If next tail euqals head, the buffer is full
|
||||||
|
// so disgard this request
|
||||||
|
IF _iNextTail = _iHead THEN
|
||||||
|
M_Enqueue := FALSE;
|
||||||
|
ELSE
|
||||||
|
_astReqQueue[_iNextTail] := stReq;
|
||||||
|
_iTail := _iNextTail;
|
||||||
|
M_Enqueue := TRUE;
|
||||||
|
END_IF]]></ST>
|
||||||
|
</Implementation>
|
||||||
|
</Method>
|
||||||
|
</POU>
|
||||||
|
</TcPlcObject>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TcPlcObject Version="1.1.0.1">
|
||||||
|
<GVL Name="GVL_ModbusMaster" Id="{ea0aca47-a85c-4c28-9c28-281101181bed}">
|
||||||
|
<Declaration><![CDATA[{attribute 'qualified_only'}
|
||||||
|
VAR_GLOBAL CONSTANT
|
||||||
|
QUEUE_SIZE : INT := 10;
|
||||||
|
END_VAR]]></Declaration>
|
||||||
|
</GVL>
|
||||||
|
</TcPlcObject>
|
||||||
18
PLC/LibraryCandidates/ModbusMaster/ST_Modbus_Req.TcDUT
Normal file
18
PLC/LibraryCandidates/ModbusMaster/ST_Modbus_Req.TcDUT
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TcPlcObject Version="1.1.0.1">
|
||||||
|
<DUT Name="ST_Modbus_Req" Id="{6734b81c-4e20-45e9-85c3-05db86b740c0}">
|
||||||
|
<Declaration><![CDATA[TYPE ST_Modbus_Req :
|
||||||
|
STRUCT
|
||||||
|
bySlaveAddr : BYTE;
|
||||||
|
eCmd : E_Modbus_Cmd;
|
||||||
|
wStartAddr : WORD;
|
||||||
|
wQuantity : WORD;
|
||||||
|
pvData : PVOID;
|
||||||
|
wDataSize : WORD;
|
||||||
|
pxDone : POINTER TO BOOL;
|
||||||
|
pxError : POINTER TO BOOL;
|
||||||
|
END_STRUCT
|
||||||
|
END_TYPE
|
||||||
|
]]></Declaration>
|
||||||
|
</DUT>
|
||||||
|
</TcPlcObject>
|
||||||
@@ -185,6 +185,15 @@
|
|||||||
<Compile Include="01_Stationen\MediaStation\DUTs\ST_HMI_Tank.TcDUT">
|
<Compile Include="01_Stationen\MediaStation\DUTs\ST_HMI_Tank.TcDUT">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="01_Stationen\MediaStation\DUTs\ST_Levi_ChData.TcDUT">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="01_Stationen\MediaStation\DUTs\ST_Levi_ChDStatus.TcDUT">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="01_Stationen\MediaStation\FB_Levi_Flowsensor.TcPOU">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="01_Stationen\MediaStation\POUs\FB_MediaCabinet.TcPOU">
|
<Compile Include="01_Stationen\MediaStation\POUs\FB_MediaCabinet.TcPOU">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -235,6 +244,19 @@
|
|||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
<LinkAlways>true</LinkAlways>
|
<LinkAlways>true</LinkAlways>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="LibraryCandidates\ModbusMaster\E_Modbus_Cmd.TcDUT">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="LibraryCandidates\ModbusMaster\FB_ModbusMaster.TcPOU">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="LibraryCandidates\ModbusMaster\GVL_ModbusMaster.TcGVL">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
<LinkAlways>true</LinkAlways>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="LibraryCandidates\ModbusMaster\ST_Modbus_Req.TcDUT">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="LibraryCandidates\PackML\DUTs\E_PackMLCmd.TcDUT">
|
<Compile Include="LibraryCandidates\PackML\DUTs\E_PackMLCmd.TcDUT">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -383,6 +405,7 @@
|
|||||||
<Folder Include="00_Main" />
|
<Folder Include="00_Main" />
|
||||||
<Folder Include="LibraryCandidates" />
|
<Folder Include="LibraryCandidates" />
|
||||||
<Folder Include="GVLs" />
|
<Folder Include="GVLs" />
|
||||||
|
<Folder Include="LibraryCandidates\ModbusMaster" />
|
||||||
<Folder Include="LibraryCandidates\PackML\DUTs" />
|
<Folder Include="LibraryCandidates\PackML\DUTs" />
|
||||||
<Folder Include="LibraryCandidates\PackML\DUTs\PackTags" />
|
<Folder Include="LibraryCandidates\PackML\DUTs\PackTags" />
|
||||||
<Folder Include="LibraryCandidates\PackML\POUs" />
|
<Folder Include="LibraryCandidates\PackML\POUs" />
|
||||||
@@ -443,6 +466,10 @@
|
|||||||
<SystemLibrary>true</SystemLibrary>
|
<SystemLibrary>true</SystemLibrary>
|
||||||
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
|
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
|
||||||
</PlaceholderReference>
|
</PlaceholderReference>
|
||||||
|
<PlaceholderReference Include="Tc2_ModbusRTU">
|
||||||
|
<DefaultResolution>Tc2_ModbusRTU, * (Beckhoff Automation GmbH)</DefaultResolution>
|
||||||
|
<Namespace>Tc2_ModbusRTU</Namespace>
|
||||||
|
</PlaceholderReference>
|
||||||
<PlaceholderReference Include="Tc2_Standard">
|
<PlaceholderReference Include="Tc2_Standard">
|
||||||
<DefaultResolution>Tc2_Standard, * (Beckhoff Automation GmbH)</DefaultResolution>
|
<DefaultResolution>Tc2_Standard, * (Beckhoff Automation GmbH)</DefaultResolution>
|
||||||
<Namespace>Tc2_Standard</Namespace>
|
<Namespace>Tc2_Standard</Namespace>
|
||||||
@@ -639,7 +666,7 @@
|
|||||||
<Type n="OptionKey">{54dd0eac-a6d8-46f2-8c27-2f43c7e49861}</Type>
|
<Type n="OptionKey">{54dd0eac-a6d8-46f2-8c27-2f43c7e49861}</Type>
|
||||||
<Type n="String">System.String</Type>
|
<Type n="String">System.String</Type>
|
||||||
</TypeList>
|
</TypeList>
|
||||||
</XmlArchive>
|
</XmlArchive>
|
||||||
</PlcProjectOptions>
|
</PlcProjectOptions>
|
||||||
</ProjectExtensions>
|
</ProjectExtensions>
|
||||||
</Project>
|
</Project>
|
||||||
260
PLC/PLC.tmc
260
PLC/PLC.tmc
File diff suppressed because one or more lines are too long
@@ -1,9 +1,22 @@
|
|||||||
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.5.2 Chrome/142.0.7444.265 Electron/39.6.1 Safari/537.36" version="29.5.2" pages="5">
|
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.6.1 Chrome/142.0.7444.265 Electron/39.8.0 Safari/537.36" version="29.6.1" pages="5">
|
||||||
<diagram name="Complete_SM" id="ftpb_kXLDtCrtDVQ6dMH">
|
<diagram name="Complete_SM" id="ftpb_kXLDtCrtDVQ6dMH">
|
||||||
<mxGraphModel dx="1203" dy="1022" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
<mxGraphModel dx="2946" dy="1201" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
<root>
|
<root>
|
||||||
<mxCell id="0" />
|
<mxCell id="0" />
|
||||||
<mxCell id="1" parent="0" />
|
<mxCell id="HZ1lZV176OuICY9gLn3O-1" parent="0" style="locked=1;" value="Unbenannte Ebene" />
|
||||||
|
<mxCell id="QfHmVZ-q5NNlDkDn7R8m-1" parent="HZ1lZV176OuICY9gLn3O-1" style="shape=corner;whiteSpace=wrap;html=1;dx=490;dy=440;rounded=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;fillColor=#f9f7ed;strokeColor=#36393d;" value="" vertex="1">
|
||||||
|
<mxGeometry height="535" width="840" x="20" y="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="MSPdzodM52y7OSiT-G8--59" parent="HZ1lZV176OuICY9gLn3O-1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eeeeee;strokeColor=#36393d;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" value="" vertex="1">
|
||||||
|
<mxGeometry height="400" width="800" x="40" y="80" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="MSPdzodM52y7OSiT-G8--48" parent="HZ1lZV176OuICY9gLn3O-1" style="rounded=1;whiteSpace=wrap;html=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;fillColor=#f9f7ed;strokeColor=#36393d;" value="" vertex="1">
|
||||||
|
<mxGeometry height="280" width="160" x="340" y="120" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="MSPdzodM52y7OSiT-G8--44" parent="HZ1lZV176OuICY9gLn3O-1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eeeeee;strokeColor=#36393d;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" value="" vertex="1">
|
||||||
|
<mxGeometry height="160" width="120" x="360" y="220" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="1" parent="0" value="States" />
|
||||||
<mxCell id="ETDFhSajcz1UCc398qXm-1" edge="1" parent="1" source="QfHmVZ-q5NNlDkDn7R8m-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.96;exitY=0.823;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--51">
|
<mxCell id="ETDFhSajcz1UCc398qXm-1" edge="1" parent="1" source="QfHmVZ-q5NNlDkDn7R8m-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.96;exitY=0.823;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--51">
|
||||||
<mxGeometry relative="1" as="geometry">
|
<mxGeometry relative="1" as="geometry">
|
||||||
<Array as="points">
|
<Array as="points">
|
||||||
@@ -16,12 +29,6 @@
|
|||||||
<mxPoint x="11" as="offset" />
|
<mxPoint x="11" as="offset" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="QfHmVZ-q5NNlDkDn7R8m-1" parent="1" style="shape=corner;whiteSpace=wrap;html=1;dx=490;dy=440;rounded=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;fillColor=#f9f7ed;strokeColor=#36393d;" value="" vertex="1">
|
|
||||||
<mxGeometry height="535" width="840" x="20" y="60" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="MSPdzodM52y7OSiT-G8--59" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eeeeee;strokeColor=#36393d;movable=0;resizable=0;rotatable=0;deletable=0;editable=0;locked=1;connectable=0;" value="" vertex="1">
|
|
||||||
<mxGeometry height="400" width="800" x="40" y="80" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="MSPdzodM52y7OSiT-G8--41" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--40">
|
<mxCell id="MSPdzodM52y7OSiT-G8--41" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--40">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
@@ -102,9 +109,6 @@
|
|||||||
<mxPoint as="offset" />
|
<mxPoint as="offset" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="MSPdzodM52y7OSiT-G8--48" parent="1" style="rounded=1;whiteSpace=wrap;html=1;movable=0;resizable=0;rotatable=0;deletable=0;editable=0;locked=1;connectable=0;fillColor=#f9f7ed;strokeColor=#36393d;" value="" vertex="1">
|
|
||||||
<mxGeometry height="280" width="160" x="340" y="120" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="MSPdzodM52y7OSiT-G8--47" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1.008;exitY=0.098;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitPerimeter=0;" target="MSPdzodM52y7OSiT-G8--32">
|
<mxCell id="MSPdzodM52y7OSiT-G8--47" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1.008;exitY=0.098;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitPerimeter=0;" target="MSPdzodM52y7OSiT-G8--32">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
@@ -113,9 +117,6 @@
|
|||||||
<mxPoint as="offset" />
|
<mxPoint as="offset" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="MSPdzodM52y7OSiT-G8--44" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eeeeee;strokeColor=#36393d;movable=0;resizable=0;rotatable=0;deletable=0;editable=0;locked=1;connectable=0;" value="" vertex="1">
|
|
||||||
<mxGeometry height="160" width="120" x="360" y="220" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="MSPdzodM52y7OSiT-G8--11" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--9">
|
<mxCell id="MSPdzodM52y7OSiT-G8--11" edge="1" parent="1" source="MSPdzodM52y7OSiT-G8--2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" target="MSPdzodM52y7OSiT-G8--9">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
@@ -259,16 +260,17 @@
|
|||||||
<mxCell id="MSPdzodM52y7OSiT-G8--40" parent="1" style="ellipse;fillColor=strokeColor;html=1;" value="" vertex="1">
|
<mxCell id="MSPdzodM52y7OSiT-G8--40" parent="1" style="ellipse;fillColor=strokeColor;html=1;" value="" vertex="1">
|
||||||
<mxGeometry height="20" width="20" x="110" y="430" as="geometry" />
|
<mxGeometry height="20" width="20" x="110" y="430" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="A_ADbUNkVSTOonzZ98Np-1" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffcccc;strokeColor=#36393d;" value="Deaktivated" vertex="1">
|
<mxCell id="HZ1lZV176OuICY9gLn3O-2" parent="0" style="locked=1;" value="Legende" />
|
||||||
|
<mxCell id="A_ADbUNkVSTOonzZ98Np-1" parent="HZ1lZV176OuICY9gLn3O-2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffcccc;strokeColor=#36393d;" value="Deaktivated" vertex="1">
|
||||||
<mxGeometry height="60" width="120" x="960" y="220" as="geometry" />
|
<mxGeometry height="60" width="120" x="960" y="220" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="A_ADbUNkVSTOonzZ98Np-2" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#cce5ff;strokeColor=#36393d;" value="Waiting state" vertex="1">
|
<mxCell id="A_ADbUNkVSTOonzZ98Np-2" parent="HZ1lZV176OuICY9gLn3O-2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#cce5ff;strokeColor=#36393d;" value="Waiting state" vertex="1">
|
||||||
<mxGeometry height="60" width="120" x="960" y="60" as="geometry" />
|
<mxGeometry height="60" width="120" x="960" y="60" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="A_ADbUNkVSTOonzZ98Np-3" parent="1" style="rounded=1;whiteSpace=wrap;html=1;" value="Acting state" vertex="1">
|
<mxCell id="A_ADbUNkVSTOonzZ98Np-3" parent="HZ1lZV176OuICY9gLn3O-2" style="rounded=1;whiteSpace=wrap;html=1;" value="Acting state" vertex="1">
|
||||||
<mxGeometry height="60" width="120" x="960" y="140" as="geometry" />
|
<mxGeometry height="60" width="120" x="960" y="140" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="A_ADbUNkVSTOonzZ98Np-4" parent="1" style="rounded=1;whiteSpace=wrap;html=1;strokeWidth=3;" value="Required state" vertex="1">
|
<mxCell id="A_ADbUNkVSTOonzZ98Np-4" parent="HZ1lZV176OuICY9gLn3O-2" style="rounded=1;whiteSpace=wrap;html=1;strokeWidth=3;" value="Required state" vertex="1">
|
||||||
<mxGeometry height="60" width="120" x="960" y="297.5" as="geometry" />
|
<mxGeometry height="60" width="120" x="960" y="297.5" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
Reference in New Issue
Block a user