Campbell Scientific CR9000X Measurement and Control System User Manual

Page 142

Advertising
background image

Section 4. CRBasic – Native Language Programming

EXAMPLE 4.2.4-3. Programming with Bool8 and a bit-shift operator.

Public Alarm(32)
Public Flags As Long
Public FlagsBool8(4) As Long

DataTable (Bol8Data,True,-1)
DataInterval

(0,1,Sec,10)

Sample(2,FlagsBool8(1),Bool8)

'store bits 1 through 16 in columns 1 through 16 of data file

Sample(2,FlagsBool8(3),Bool8)

'store bits 17 through 32 in columns 17 through 32 of data file

EndTable

BeginProg
Scan

(1,Sec,3,0)


'Reset all bits each pass before setting bits selectively

'Set bits selectively. Hex used to save space.

'Logical OR bitwise comparison

'If bit in OR bit in The result

'Flags Is Bin/Hex Is Is

'----------

---------- ----------

'0 0

0

'0 1

1

'1 0

1

'1 1

1

' Binary equivalent of Hex:

If Alarm(1) Then Flags = Flags OR &h1

' &b1

If Alarm(2) Then Flags = Flags OR &h2

' &b10

If Alarm(3) Then Flags = Flags OR &h4

' &b100

If Alarm(4) Then Flags = Flags OR &h8

' &b1000

If Alarm(5) Then Flags = Flags OR &h10

' &b10000

If Alarm(6) Then Flags = Flags OR &h20

' &b100000

If Alarm(7) Then Flags = Flags OR &h40

' &b1000000

If Alarm(8) Then Flags = Flags OR &h80

' &b10000000

If Alarm(9) Then Flags = Flags OR &h100

' &b100000000

If Alarm(10) Then Flags = Flags OR &h200

' &b1000000000

If Alarm(11) Then Flags = Flags OR &h400

' &b10000000000

If Alarm(12) Then Flags = Flags OR &h800

' &b100000000000

If Alarm(13) Then Flags = Flags OR &h1000

' &b1000000000000

If Alarm(14) Then Flags = Flags OR &h2000

' &b10000000000000

If Alarm(15) Then Flags = Flags OR &h4000

' &b100000000000000

If Alarm(16) Then Flags = Flags OR &h8000

' &b1000000000000000

If Alarm(17) Then Flags = Flags OR &h10000

' &b10000000000000000

If Alarm(18) Then Flags = Flags OR &h20000

' &b100000000000000000

If Alarm(19) Then Flags = Flags OR &h40000

' &b1000000000000000000

If Alarm(20) Then Flags = Flags OR &h80000

' &b10000000000000000000

If Alarm(21) Then Flags = Flags OR &h100000

' &b100000000000000000000

If Alarm(22) Then Flags = Flags OR &h200000

' &b1000000000000000000000

If Alarm(23) Then Flags = Flags OR &h400000

' &b10000000000000000000000

If Alarm(24) Then Flags = Flags OR &h800000

' &b100000000000000000000000

If Alarm(25) Then Flags = Flags OR &h1000000

' &b1000000000000000000000000

If Alarm(26) Then Flags = Flags OR &h2000000

' &b10000000000000000000000000

If Alarm(27) Then Flags = Flags OR &h4000000

' &b100000000000000000000000000

If Alarm(28) Then Flags = Flags OR &h8000000

' &b1000000000000000000000000000

If Alarm(29) Then Flags = Flags OR &h10000000

' &b10000000000000000000000000000

If Alarm(30) Then Flags = Flags OR &h20000000

' &b100000000000000000000000000000

If Alarm(31) Then Flags = Flags OR &h40000000

' &b1000000000000000000000000000000

If Alarm(32) Then Flags = Flags OR &h80000000

'&b10000000000000000000000000000000


'Note: &HFF = &B11111111. By shifting at 8 bit increments along 32-bit ‘Flags’ (Long data

type)

'the first 8 bits in the four Longs FlagsBool8(4) are loaded with alarm states. Only the

first

'8 bits of each Long ‘FlagsBool8’ are stored when converted to Bool8.

'Logical AND bitwise comparison

'If bit in OR bit in The result

'Flags Is Bin/Hex Is Is

'----------

---------- ----------

'0 0

0

'0 1

0

'1 0

0

'1 1

1

FlagsBool8(1)

=

Flags

AND

&HFF

'AND 1st 8 bits of "Flags" & 11111111

FlagsBool8(2) = (Flags >> 8) AND &HFF

'AND 2nd 8 bits of "Flags" & 11111111

FlagsBool8(3) = (Flags >> 16) AND &HFF

'AND 3rd 8 bits of "Flags" & 11111111

FlagsBool8(4) = (Flags >> 24) AND &HFF

'AND 4th 8 bits of "Flags" & 11111111

CallTable(Bol8Data)
NextScan
EndProg

4-14

Advertising