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

Switch to unified view

a b/trunk/SPI_Template.library.md
1
---
2
3
~~~ST
4
FUNCTION_BLOCK SPITemplate EXTENDS spi
5
VAR_OUTPUT
6
    dwRaw: DWORD;
7
    rValue: REAL;
8
END_VAR
9
VAR
10
    usiBitWidth: USINT;
11
    rResolution: REAL;
12
END_VAR
13
14
~~~
15
~~~ST
16
SUPER^();
17
18
CASE _iState OF
19
0:
20
    IF SUPER^.init() THEN
21
        _iState := 1;
22
    END_IF  
23
1:
24
    _iState := 10;
25
END_CASE
26
27
~~~
28
---
29
~~~ST
30
METHOD AfterReadInputs: INT
31
VAR
32
    aby: ARRAY [..] OF ;
33
    usiChannel: USINT;
34
END_VAR
35
36
~~~
37
~~~ST
38
SUPER^.AfterReadInputs();
39
40
IF _iState = 10 THEN
41
42
    FOR usiChannel := 0 TO 0 DO
43
        aby[0] := 1;
44
        aby[1] := 16#80 + SHL(usiChannel AND 7, 4);
45
        aby[2] := 0;
46
        aby[3] := 0;
47
        
48
        IF NOT transfer(pabyTxBuffer:=ADR(aby) , pabyRxBuffer:=ADR(aby) , udiLen:=3 , uiDelayus:=0) THEN
49
            _iState := 1000;
50
        END_IF
51
52
        CASE usiChannel OF
53
            0:      
54
                dwRaw := aby[3];
55
                dwRaw := SHL(dwRaw,8) OR aby[2];
56
                dwRaw := SHL(dwRaw,8) OR aby[1];
57
                dwRaw := SHL(dwRaw,8) OR aby[0];
58
                
59
                rValue := DWORD_TO_REAL(SHR(dwRaw, usiBitWidth));
60
                rValue := rValue * rResolution;
61
        END_CASE
62
    END_FOR     
63
END_IF
64
65
~~~
66
---
67
~~~ST
68
METHOD BeforeWriteOutputs: INT
69
VAR
70
    i: USINT;
71
END_VAR
72
73
~~~
74
~~~ST
75
SUPER^.BeforeWriteOutputs();
76
77
~~~
78
---
79
~~~ST
80
METHOD Initialize: UDINT
81
VAR_INPUT
82
    wModuleType: UINT;
83
    dwInstance: UDINT;
84
    pConnector: pointer;
85
END_VAR
86
VAR
87
    pParam: pointer;
88
    udiResult: UDINT;
89
    pusiBitWidth: pointer;
90
    prResolution: pointer;
91
END_VAR
92
93
~~~
94
~~~ST
95
SUPER^.Initialize(wModuleType, dwInstance, pConnector);
96
pParam := ConfigGetParameter(_pConnector, 1000);
97
IF pParam <> 0 THEN
98
    pusiBitWidth := IoStandard.ConfigGetParameterValuePointer(pParam, ADR(udiResult));
99
    usiBitWidth := pusiBitWidth^;
100
END_IF
101
102
pParam := ConfigGetParameter(_pConnector, 1001);
103
IF pParam <> 0 THEN
104
    prResolution := IoStandard.ConfigGetParameterValuePointer(pParam, ADR(udiResult));
105
    rResolution := prResolution^;
106
END_IF
107
108
109
110
~~~