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

Hex Pairs, Binary, SerialInBlock, SerialInRecord, As Long, Serial buffer, SerialOpen, Variable

Page 210 highlights

Section 7. Installation 17889 ppmV pw=17.81 hPa pws 29.43 hPa h= 52.3 kJ/kg dT= 8.1 °C" • Hex Pairs: Bytes are translated to hex pairs, consisting of digits 0 - 9 and letters a - f. Each pair describes a hexadecimal ASCII / ANSI code. Some codes translate to alpha-numeric values, others to symbols or non-printable control characters. Example (temperature sensor): SerialInString = "23 30 31 38 34 0D", which translates to: #01 84 cr • Binary: Bytes are processed on a bit-by-bit basis. Character 0 (Null, &b00) is a valid part of binary data streams. However, the CR800 uses Null terminated strings, so anytime a Null is received, a string is terminated. The termination is usually premature when reading binary data. To remedy this problem, the SerialInBlock() or SerialInRecord() instruction is required when reading binary data from the serial port buffer to a variable. The variable must be an array set As Long data type, as in, Dim SerialInString As Long 7.8.8.5.5 Memory Considerations Several points regarding memory should be considered when receiving and processing serial data. • Serial buffer: The serial port buffer, which is declared in the SerialOpen() instruction, must be large enough to hold all the data a device will send. The buffer holds the data for subsequent transfer to variables. Allocate extra memory to the buffer when needed, but recognize that added memory to the buffer reduces memory available for long term data storage. Note SerialInRecord() running in pipeline mode, with the number of bytes parameter = 0. For the digital measurement sequence to know how much room to allocate in the Scan() instruction buffers (default of 3), SerialInRecord() has to allocate itself the buffer size specified by SerialOpen() (default 10,000, an overkill), or default 3*10,000 = 30 kB of buffer space. So, while making sure enough bytes are allocated in SerialOpen() (the number of bytes per record * ((records/Scan)+1) + at least one extra byte), there is reason not to make the buffer size too large. (Note that if the NumberOfBytes parameter is non-zero, then SerialInRecord() needs to allocate itself only this many bytes instead of the number of bytes specified by SerialOpen()). • Variable declarations: Variables used to receive data from the serial buffer can be declared as Public or Dim. Declaring variables as Dim has the effect of consuming less telecommunications bandwidth. When public variables are viewed in software, the entire Public table is transferred at the update interval. If the Public table is large, telecommunications bandwidth can be taxed such that other data tables are not collected. • String declarations: String variables are memory intensive. Determine how large strings are and declare variables just large enough to hold the string. If 210

  • 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
210
17889 ppmV
pw=17.81 hPa pws
29.43 hPa h= 52.3 kJ/kg
dT=
8.1 °C"
Hex Pairs
: Bytes are translated to hex pairs, consisting of digits 0 - 9 and
letters a - f. Each pair describes a hexadecimal ASCII / ANSI code. Some
codes translate to alpha-numeric values, others to symbols or non-printable
control characters.
Example (temperature sensor):
SerialInString
= "23 30 31 38 34 0D",
which translates to:
#01 84 cr
Binary
: Bytes are processed on a bit-by-bit basis. Character 0 (Null, &b00) is
a valid part of binary data streams.
However, the CR800 uses Null
terminated strings, so anytime a Null is received, a string is terminated. The
termination is usually premature when reading binary data.
To remedy this
problem, the
SerialInBlock()
or
SerialInRecord()
instruction is required
when reading binary data from the serial port buffer to a variable.
The
variable must be an array set
As Long
data type, as in,
Dim
SerialInString
As Long
7.8.8.5.5 Memory Considerations
Several points regarding memory should be considered when receiving and
processing serial data.
Serial buffer:
The serial port buffer, which is declared in the
SerialOpen()
instruction, must be large enough to hold all the data a device will send. The
buffer holds the data for subsequent transfer to variables. Allocate extra
memory to the buffer when needed, but recognize that added memory to the
buffer reduces memory available for long term data storage.
Note
SerialInRecord()
running in pipeline mode, with the number of bytes
parameter = 0.
For the digital measurement sequence to know how much room to
allocate in the
Scan()
instruction
buffers
(default of 3),
SerialInRecord()
has to
allocate itself the buffer size specified by
SerialOpen()
(default 10,000, an
overkill), or default 3*10,000 = 30 kB of buffer space. So, while making sure
enough bytes are allocated in
SerialOpen()
(the number of bytes per record *
((records/Scan)+1) + at least one extra byte), there is reason not to make the
buffer size too large. (Note that if the
NumberOfBytes
parameter is non-zero, then
SerialInRecord()
needs to allocate itself only this many bytes instead of the
number of bytes specified by
SerialOpen()
).
Variable declarations:
Variables used to receive data from the serial buffer
can be declared as
Public
or
Dim
. Declaring variables as
Dim
has the effect
of consuming less telecommunications bandwidth. When public variables are
viewed in software, the entire
Public
table is transferred at the update
interval. If the
Public
table is large, telecommunications bandwidth can be
taxed such that other data tables are not collected.
String declarations:
String variables are memory intensive. Determine how
large strings are and declare variables just large enough to hold the string. If