MAIN.TcPOU
3.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.11">
<POU Name="MAIN" Id="{968875a9-52a2-46cd-ac4e-792ab91256f6}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM MAIN
VAR
bSamplingStart : BOOL;
nAcuNodeId : INT := 1;
iSeq : INT;
nIncCtr : INT;
nFirstAcuIndex : UINT;
AcquisitionBlockBuffer : ARRAY [0..nFifoSize] OF stAcquisitionBlock; (* Put one Acq Block into fifo buffer *)
fbBufferAccess : FB_DataFifo;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[
CASE iSeq OF
0:
IF bSamplingStart THEN
iSeq := iSeq + 1;
END_IF
1:
(* reserve for init process *)
fbBufferAccess.bClearFifo := TRUE;
IF fbBufferAccess.bFifoEmpty THEN (* Makesure no data in buffer in inital phase *)
fbBufferAccess.bClearFifo := FALSE;
iSeq := 10;
END_IF
10: (* Cyclic Acquisition *)
nIncCtr := nIncCtr + 1; (* Generate a dummy data *)
AcquisitionData[nAcuNodeId].ECAT_IRQ_Counter := nIncCtr;
AcquisitionData[nAcuNodeId].nDcTimeStamp := UInt64Add64( F_GetCurDcTickTime(), EC_DCTIME_DELTA_OFFSET); (* Shift time from GMT+0 to Current time Zone *)
AcquisitionBlock[nAcuNodeId].DataBlock[nFirstAcuIndex] := AcquisitionData[nAcuNodeId];
nFirstAcuIndex := nFirstAcuIndex + 1;
IF nFirstAcuIndex > nAcquisitionBlock THEN
nFirstAcuIndex := 0 ; (* Block collect finish , put into buffer *)
fbBufferAccess.bPutData := TRUE;
IF NOT(bSamplingStart) THEN
iSeq := 20; (* Stop Acquisition *)
END_IF
END_IF
20: (* Should call close file process *)
iSeq := 0;
END_CASE
fbBufferAccess(bPutData:= ,
bGetData:= ,
bClearFifo:= ,
pPutData:= ADR(AcquisitionBlock[nAcuNodeId]),
pGetData:= ADR(PRG_DatFileCreat.DatAcqBlock),
nDataLen:= SIZEOF(AcquisitionBlock[nAcuNodeId]),
pFifoMemory:= ADR(AcquisitionBlockBuffer),
nFifoSize:= nFifoSize,
bFifoEmpty=> ,
bFifoFull=> ,
iFifoSizeLeft=> );
IF fbBufferAccess.bPutData THEN
fbBufferAccess.bPutData := FALSE;
END_IF;
IF fbBufferAccess.bGetData THEN
fbBufferAccess.bGetData := FALSE;
END_IF
PRG_DatFileCreat();
]]></ST>
</Implementation>
<LineIds Name="MAIN">
<LineId Id="29" Count="0" />
<LineId Id="35" Count="0" />
<LineId Id="45" Count="0" />
<LineId Id="62" Count="0" />
<LineId Id="67" Count="1" />
<LineId Id="61" Count="0" />
<LineId Id="49" Count="0" />
<LineId Id="110" Count="1" />
<LineId Id="113" Count="0" />
<LineId Id="69" Count="0" />
<LineId Id="112" Count="0" />
<LineId Id="51" Count="0" />
<LineId Id="121" Count="0" />
<LineId Id="72" Count="0" />
<LineId Id="167" Count="0" />
<LineId Id="198" Count="0" />
<LineId Id="119" Count="0" />
<LineId Id="52" Count="0" />
<LineId Id="75" Count="0" />
<LineId Id="53" Count="0" />
<LineId Id="76" Count="0" />
<LineId Id="84" Count="0" />
<LineId Id="88" Count="0" />
<LineId Id="78" Count="0" />
<LineId Id="81" Count="1" />
<LineId Id="77" Count="0" />
<LineId Id="56" Count="2" />
<LineId Id="46" Count="0" />
<LineId Id="30" Count="1" />
<LineId Id="18" Count="0" />
<LineId Id="20" Count="8" />
<LineId Id="2" Count="0" />
<LineId Id="97" Count="1" />
<LineId Id="90" Count="0" />
<LineId Id="103" Count="0" />
<LineId Id="99" Count="0" />
<LineId Id="94" Count="0" />
<LineId Id="92" Count="0" />
<LineId Id="108" Count="0" />
<LineId Id="106" Count="0" />
<LineId Id="117" Count="1" />
<LineId Id="182" Count="1" />
<LineId Id="175" Count="0" />
<LineId Id="114" Count="0" />
</LineIds>
</POU>
</TcPlcObject>