| a | b/test3/I2C_Template.library.md | ||
|---|---|---|---|
| 1 | <?xml version="1.0" encoding="utf-8"?>--- |
||
| 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 | ~~~ |