a | b/trunk/I2C_Template.library.md | ||
---|---|---|---|
1 | --- |
||
2 | |||
3 | ~~~ST |
||
4 | FUNCTION_BLOCK I2CTemplate EXTENDS i2c |
||
5 | VAR_INPUT |
||
6 | lrMinDistance: LREAL; |
||
7 | lrMaxDistance: LREAL; |
||
8 | END_VAR |
||
9 | VAR_OUTPUT |
||
10 | lrDistance: LREAL; |
||
11 | xValid: BOOL; |
||
12 | xNewMeasurement: BOOL; |
||
13 | END_VAR |
||
14 | VAR |
||
15 | timer: TON; |
||
16 | END_VAR |
||
17 | |||
18 | ~~~ |
||
19 | ~~~ST |
||
20 | xNewMeasurement := FALSE; |
||
21 | |||
22 | SUPER^(); |
||
23 | |||
24 | CASE _iState OF |
||
25 | 0: |
||
26 | IF usiAddress = 0 THEN |
||
27 | usiAddress := 16#70; |
||
28 | END_IF |
||
29 | IF SUPER^.init() THEN |
||
30 | _iState := 5; |
||
31 | END_IF |
||
32 | |||
33 | 5: |
||
34 | Timer.pt := T#70MS; |
||
35 | _iState := 10; |
||
36 | xValid := FALSE; |
||
37 | END_CASE |
||
38 | ~~~ |
||
39 | --- |
||
40 | ~~~ST |
||
41 | METHOD AfterReadInputs: INT |
||
42 | VAR |
||
43 | Buffer: ARRAY [..] OF ; |
||
44 | len: DINT; |
||
45 | END_VAR |
||
46 | |||
47 | ~~~ |
||
48 | ~~~ST |
||
49 | SUPER^.AfterReadInputs(); |
||
50 | |||
51 | IF _iState = 10 THEN |
||
52 | timer(IN:=TRUE); |
||
53 | IF timer.Q THEN |
||
54 | len := Read(ADR(Buffer), 4); |
||
55 | IF len = 4 THEN |
||
56 | lrDistance := BYTE_TO_LREAL(Buffer[2])*0.01 + BYTE_TO_LREAL(Buffer[3]) * 2.56; |
||
57 | xValid := (lrDistance >= lrMinDistance AND lrDistance <= lrMaxDistance); |
||
58 | xNewMeasurement := TRUE; |
||
59 | ELSE |
||
60 | xValid := FALSE; |
||
61 | END_IF |
||
62 | Write8(0, 16#51); //new measurement |
||
63 | timer(IN:=FALSE); |
||
64 | END_IF |
||
65 | END_IF |
||
66 | ~~~ |
||
67 | --- |
||
68 | ~~~ST |
||
69 | METHOD BeforeWriteOutputs: INT |
||
70 | |||
71 | ~~~ |
||
72 | ~~~ST |
||
73 | SUPER^.BeforeWriteOutputs(); |
||
74 | |||
75 | ~~~ |