Campbell Scientific CR1000KD CR800 and CR850 Measurement and Control Systems - Page 145

Logical Expressions

Page 145 highlights

Section 7. Installation Constants Conversion Constants are not declared with a data type, so the CR800 assigns the data type as needed. If a constant (either entered as a number or declared with CONST) can be expressed correctly as an integer, the compiler will use the type that is most efficient in each expression. The integer version is used if possible, i.e., if the expression has not yet encountered a FLOAT. CRBasic example Constants to LONGs or FLOATs (p. 145) lists a programming case wherein a value normally considered an integer (10) is assigned by the CR800 to be As FLOAT. CRBasic Example 22. Public I As Long Public A1, A2 Const ID = 10 BeginProg A1 = A2 + ID I = ID * 5 EndProg Constants to LONGs or FLOATs In CRBasic example Constants to LONGs or FLOATs (p. 145), I is an integer. A1 and A2 are FLOATS. The number 5 is loaded As FLOAT to add efficiently with constant ID, which was compiled As FLOAT for the previous expression to avoid an inefficient runtime conversion from LONG to FLOAT before each floating point addition. 7.7.3.9.4 Logical Expressions Measurements can indicate absence or presence of an event. For example, an RH measurement of 100% indicates a condensation event such as fog, rain, or dew. The CR800 can render the state of the event into binary form for further processing, i.e., the event is either occurring (true), or the event has not occurred (false). True = -1, False = 0 In all cases, the argument 0 is translated as FALSE in logical expressions; by extension, any non-zero number is considered "non-FALSE." However, the argument TRUE is predefined in the CR800 operating system to only equal -1, so only the argument -1 is always translated as TRUE. Consider the expression If Condition(1) = TRUE Then... This condition is true only when Condition(1) = -1. If Condition(1) is any other non-zero, the condition will not be found true because the constant TRUE is predefined as -1 in the CR800 system memory. By entering = TRUE, a literal comparison is done. So, to be absolutely certain a function is true, it must be set to TRUE or -1. Note TRUE is -1 so that every bit is set high (-1 is &B11111111 for all four bytes). This allows the AND operation to work correctly. The AND operation does an AND boolean function on every bit, so TRUE AND X will be non-zero if at least one of the bits in X is non-zero, i.e., if X is not zero. When a variable of data type BOOLEAN is assigned any non-zero number, the CR800 internally converts it to -1. 145

  • 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
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
  • 378
  • 379
  • 380
  • 381
  • 382
  • 383
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • 399
  • 400
  • 401
  • 402
  • 403
  • 404
  • 405
  • 406
  • 407
  • 408
  • 409
  • 410
  • 411
  • 412
  • 413
  • 414
  • 415
  • 416
  • 417
  • 418
  • 419
  • 420
  • 421
  • 422
  • 423
  • 424
  • 425
  • 426
  • 427
  • 428
  • 429
  • 430
  • 431
  • 432
  • 433
  • 434
  • 435
  • 436
  • 437
  • 438
  • 439
  • 440
  • 441
  • 442
  • 443
  • 444
  • 445
  • 446
  • 447
  • 448
  • 449
  • 450
  • 451
  • 452
  • 453
  • 454
  • 455
  • 456
  • 457
  • 458
  • 459
  • 460
  • 461
  • 462
  • 463
  • 464
  • 465
  • 466
  • 467
  • 468
  • 469
  • 470
  • 471
  • 472
  • 473
  • 474
  • 475
  • 476
  • 477
  • 478
  • 479
  • 480
  • 481
  • 482
  • 483
  • 484
  • 485
  • 486
  • 487
  • 488
  • 489
  • 490
  • 491
  • 492
  • 493
  • 494
  • 495
  • 496
  • 497
  • 498
  • 499
  • 500
  • 501
  • 502
  • 503
  • 504
  • 505
  • 506
  • 507
  • 508
  • 509
  • 510
  • 511
  • 512
  • 513
  • 514
  • 515
  • 516
  • 517
  • 518
  • 519
  • 520
  • 521
  • 522
  • 523
  • 524
  • 525
  • 526
  • 527
  • 528
  • 529
  • 530
  • 531
  • 532
  • 533
  • 534
  • 535
  • 536
  • 537
  • 538
  • 539
  • 540
  • 541
  • 542
  • 543
  • 544
  • 545
  • 546
  • 547
  • 548
  • 549
  • 550
  • 551
  • 552
  • 553
  • 554
  • 555
  • 556
  • 557
  • 558
  • 559
  • 560
  • 561
  • 562
  • 563
  • 564
  • 565
  • 566

Section 7.
Installation
145
Constants Conversion
Constants are not declared with a data type, so the CR800 assigns the data type as
needed. If a constant (either entered as a number or declared with
CONST
) can be
expressed correctly as an integer, the compiler will use the type that is most
efficient in each expression. The integer version is used if possible, i.e., if the
expression has not yet encountered a
FLOAT
. CRBasic example
Constants to
LONGs or FLOATs
(p. 145)
lists a programming case wherein a value normally
considered an integer (10) is assigned by the CR800 to be
As FLOAT
.
CRBasic Example 22.
Constants to LONGs or FLOATs
Public
I
As Long
Public
A1, A2
Const
ID = 10
BeginProg
A1 = A2 + ID
I = ID * 5
EndProg
In CRBasic example
Constants to LONGs or FLOATs
(p. 145),
I is an integer. A1
and A2 are
FLOATS
. The number 5 is loaded
As FLOAT
to add efficiently with
constant ID, which was compiled
As FLOAT
for the previous expression to avoid
an inefficient runtime conversion from
LONG
to
FLOAT
before each floating
point addition.
7.7.3.9.4 Logical Expressions
Measurements can indicate absence or presence of an event.
For example, an RH
measurement of 100% indicates a condensation event such as fog, rain, or dew.
The CR800 can render the state of the event into binary form for further
processing, i.e., the event is either occurring (true), or the event has not occurred
(false).
True = -1, False = 0
In all cases, the argument
0
is translated as
FALSE
in logical expressions; by
extension, any non-zero number is considered "non-FALSE."
However, the
argument
TRUE
is predefined in the CR800 operating system to only equal
-1
, so
only the argument
-1
is
always
translated as
TRUE
.
Consider the expression
If
Condition(1) = TRUE
Then
...
This condition is true only when Condition(1) =
-1
.
If Condition(1) is any other
non-zero, the condition will not be found true because the constant
TRUE
is
predefined as
-1
in the CR800 system memory.
By entering
= TRUE
, a literal
comparison is done.
So, to be absolutely certain a function is true, it must be set
to
TRUE
or
-1
.
Note
TRUE
is
-1
so that every bit is set high (-1 is &B11111111 for all four
bytes).
This allows the
AND
operation to work correctly.
The
AND
operation
does an AND boolean function on every bit, so
TRUE AND X
will be non-zero if
at least one of the bits in X is non-zero, i.e., if X is not zero.
When a variable of
data type BOOLEAN is assigned any non-zero number, the CR800 internally
converts it to
-1
.