Diff of /trunk/I2C_Template.library.md [000000] .. [r13]  Maximize  Restore

Switch to unified view

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
~~~