-
Notifications
You must be signed in to change notification settings - Fork 0
/
HS_Encoder.CR1
92 lines (74 loc) · 2.3 KB
/
HS_Encoder.CR1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
' CR1000 Series Datalogger
'
' Program Name: HS_Encoder.CR1
' Author: Simon Leeds, CSA
' Date: August 31, 2005
'
' Program details:
'==================
' This program demonstrates the use of the CR1000 logger to monitor water level from a Quadrature Shaft Encoder via QD1.
' It also shows how a datum setting procedure can be done to correct for a level offset.
'
' Wiring:
' QD1 - CR1000
' P1 - P1
' P2 - P2
' 5V - 5V
' G - G
'
' Shaft Encoder - QD1
' S1 - N/O 1
' S2 - N/O 2
' 5V(logger) - COM
'
' Declare Public Variables
'==========================
Public Flag(8)
Public Counts(2)
Public Level
Public LvlDatum
Public Level_Raw
Alias Counts(1) = UpCount
Alias Counts(2) = DownCount
' Declare Other Variables
'=========================
Dim Lev_Chg
Dim Offset
' Declare Constants
'===================
Const Encoder_Res = 0.25 ' Level (in mm) for one set of pulses from the shaft encoder.
Const Dev = 1 ' Level change (in mm) that will cause a record to be stored.
' Define Data Tables
'====================
DataTable(EventLvl,TRUE,2500)
Sample(1,Level,IEEE4)
EndTable
' Define Subroutines
'====================
' Main Program
'==============
BeginProg
Scan (1,Sec,0,0)
' Record the pulses that have ocurred since last interval.
' The multiplier is Encoder_Res/4 as we get 4 pulse per quadrature output fom the encoder.
PulseCount(Counts(),2,1,0,0,Encoder_Res/4,0)
' Calculate the total change in level since last time.
Lev_Chg = UpCount - DownCount
' Update the level by adding the new counts in the up direction and subtracting the counts in the down direction.
Level_Raw = Level_Raw + Lev_Chg
' Correct the level by adding the offset.
Level = Level_Raw + Offset
' If the level has changed by more than the allowable amount, store the level data.
If Lev_Chg >= Dev then CallTable EventLvl
' If Flag 1 has been set, we are calculating a new offset.
If Flag(1) then
' Check the actual level - staff gauge level and calculate the difference from the actual measured value.
Offset = LvlDatum - Level_Raw
LvlDatum = 0
' Correct the Level by adding the offset.
Level = Level_Raw + Offset
' Set Flag 1 low so we don't do this again.
Flag(1) = False
EndIf
NextScan
EndProg