You are on page 1of 2

1 TON_UpdateCyle(IN:=not TON_UpdateCyle.

Q and not (iStateMaschineCAN = 0),PT:=TIME#40ms);


2 iNumberMDLS := 8;
3
4
5 CASE iStateMaschineCAN of
6
7
8 INT#0: (* Initiliaze RCV Arrays *)
9
10 (* Search Empty Send Buffer Array *)
11 iCounter := 0;
12
13 While iCounter <= INT#99 DO
14
15 if srCanSendBuffer[iCounter].Id = UDINT#0 then
16 iBeginSendBuffer := iCounter;
17 EXIT;
18 end_if;
19
20 iCounter := iCounter + 1;
21 end_while;
22
23
24 iCounter := 0;
25
26 (* Search Empty RCV Buffer Array *)
27 While iCounter <= INT#99 DO
28
29 if arrsrRcvCompInit[iCounter].Id = UDINT#0 then
30 iBeginRcvBuffer := iCounter;
31 EXIT;
32 end_if;
33
34 iCounter := iCounter + 1;
35 end_while;
36
37
38 iCounter := 0;
39 while iCounter < iNumberMDLS DO
40
41 iArray := iBeginRcvBuffer + iCounter;
42
43 CASE iCaseLoop of
44 0: (* Read Current Voltage *)
45 (* Recive Comp Initial *)
46 arrsrRcvCompInit[iBeginRcvBuffer].id := CAN_ID(WORD#16#06,WORD#16#
81,WORD#16#82,WORD#16#04) ;
47 arrsrRcvCompInit[iBeginRcvBuffer].Length := UDINT#8 ;
48
49
50 iLoopIDs := iLoopIDs+1;
51 if iLoopIDs >= iNumberMDLS then
52 iCaseLoop := 1;
53 iLoopIDs := 0;
54 end_if;
55 ;
56 1: (* Read Status *)
57 arrID1[iLoopIDs] := iArray;
58 arrsrRcvCompInit[iArray].Id := CAN_ID(WORD#16#06,WORD#16#81,WORD
#16#82,WORD#16#04) ;
59 arrsrRcvCompInit[iArray].Length := UDINT#8 ;
60
61 iLoopIDs := iLoopIDs+1;
62 if iLoopIDs >= iNumberMDLS then
63 iCaseLoop := 2;
64 iLoopIDs := 0;
65 end_if;
66 ;
67 9:
68 EXIT;
69 ;
70 end_case;
71 iCounter := iCounter+1;
72 end_while;
73
74 (* SYSTEM MESSAGES *)
75
76 (* Send: Request Number of Mdls *)
77
78 srCanSendBuffer[0].Id := CAN_ID(WORD#16#06,WORD#16#81,WORD#16#82,
WORD#16#84);
79 srCanSendBuffer[0].Length := UINT#8;
80 srCanSendBuffer[0].Data[0] := BYTE#16#01;
81 srCanSendBuffer[0].Data[1] := BYTE#16#79;
82 srCanSendBuffer[0].Send := true;
83
84 srCanSendBuffer[1].Id := CAN_ID(WORD#16#06,WORD#16#81,WORD#16#82,
WORD#16#84);
85 srCanSendBuffer[1].Length := UINT#8;
86 srCanSendBuffer[1].Data[0] := BYTE#16#01;
87 srCanSendBuffer[1].Data[1] := BYTE#16#7A;
88 srCanSendBuffer[1].Send := true;
89
90 iStateMaschineCAN := 1;
91
92 ;
93
94 (* Read Data *)
95
96 INT#1:
97
98 (* Read Data from every Converter (0...Converter N) *)
99 (* Data to be read:
100 Voltage
101 Current
102 Status
103 InputVoltage
104 Iavail
105 *)
106 iCounter := 0;
107 while iCounter < 1 DO
108 iID := iCounter ;
109 PhaseUV := DINT_TO_REAL(RVC_2WORD(srRcvBuffer[iID].Data[4],srRcvBuffer[iID].Data[5
],srRcvBuffer[iID].Data[6],srRcvBuffer[iID].Data[7])/DINT#1024);
110 iCounter := iCounter+1;
111 PhaseVW := DINT_TO_REAL(RVC_2WORD(srRcvBuffer[iID1].Data[4],srRcvBuffer[iID1].Data[
5],srRcvBuffer[iID1].Data[6],srRcvBuffer[iID1].Data[7])/DINT#1024);
112 end_while;
113 ;
114 end_case;
115
116

You might also like