Chapter 4 Making Measurements 101
Using the SREAL
Output Format
The following program shows how to convert 10 readings output in the
SREAL format.
10 OPTION BASE 1 !COMPUTER ARRAY NUMBERING STARTS AT 1
20 INTEGER Num_readings !DECLARE VARIABLE
30 Num_readings=10 !NUMBER OF READINGS = 10
40 ALLOCATE REAL Rdgs(l:Num_readings) !CREATE ARRAY FOR READINGS
50 ASSIGN @Dvm TO 722 !ASSlGN MULTIMETER ADDRESS
60 ASSIGN @Buffer TO BUFFER [4*Num_readings] !ASSIGN BUFFER I/O PATH NAME
70 OUTPUT @Dvm;"PRESET NORM;OFORMAT SREAL;NRDGS";Num_readings
75 !TRlG SYN, SREAL OUTPUT FORMAT, 1 PLC, DCV AUTORANGE, 10 READINGS
80 TRANSFER @Dvm TO @Buffer;WAIT !SYN EVENT; TRANSFER READINGS
90 FOR I=1 TO Num_readings
100ENTER @Buffer USING "#,B";A,B,C,D !ENTER ONE 8-BIT BYTE INTO
101!EACH VARIABLE, (# =STATEMENT TERMINATION NOT REQUIRED, B = ENTER ONE
105!8-BIT BYTE AND INTERPRET AS AN INTEGER BETWEEN 0 AND 255)
110S=l !CONVERT READING FROM SREAL
120IF A>127 THEN S=-1 !CONVERT READING FROM SREAL
130IF A>127 THEN A=A-128 !CONVERT READING FROM SREAL
140A=A*2- 127 !CONVERT READING FROM SREAL
150IF B>127 THEN A=A+l !CONVERT READING FROM SREAL
160IF B<=127 THEN B=B+128 !CONVERT READING FROM SREAL
170Rdgs(I)=S*(B*65536.+C*256.+D)*2^(A-23) !CONVERT READING FROM SREAL
180Rdgs(I)=DROUND(Rdgs(I),7) !ROUND READING TO 7 DIGITS; YOU
181!MUST DO THIS WITH SREAL TO ENSURE ANY OVLD VALUES ARE ROUNDED TO
185!l.E+38 (WITHOUT ROUNDING, THE VALUE MAY BE SLIGHTLY LESS)
190IF ABS(Rdgs(I))=l.E+38 THEN !IF OVERLOAD OCCURRED:
200PRINT "Overload Occurred" !PRINT OVERLOAD MESSAGE
210ELSE !IF NO OVERLOAD OCCURRED:
220PRINT Rdgs(I) !PRINT READING
230END IF
240NEXT I
250END
Using the DREAL
Output Format
The following program uses the DREAL output format. Notice that no
conversion is necessary using this format since DREAL is the same format
that the controller uses as its internal data format (8-bytes/word).
10 OPTION BASE 1 !COMPUTER ARRAY NUMBERING STARTS AT 1
20 REAL Rdgs(l:l0) BUFFER !CREATE BUFFER ARRAY
30 ASSIGN @Dvm TO 722 !ASSIGN MULTIMETER ADDRESS
40 ASSIGN @Rdgs TO BUFFER Rdgs(*) !ASSIGN BUFFER I/O PATH NAME
50 OUTPUT @Dvm;l'PRESET NORM;NPLC 10;OFORMAT DREAL;NRDGS 10"
55 !TRIG SYN, 10 PLCs, DCV AUTORANGE, DREAL OUTPUT FORMAT, 10 RDGS/TRIG.
60 TRANSFER @Dvm TO @Rdgs;WAIT !SYN EVENT, TRANSFER READINGS
70 FOR I=1 TO 10
80 IF ABS(Rdgs(I))=l.E+38 THEN !IF OVERLOAD OCCURRED:
90 PRINT "OVERLOAD OCCURRED" !PRINT OVERLOAD MESSAGE
100ElSE !IF NO OVERLOAD:
110Rdgs(I)=DROUND(Rdgs(I),8) !ROUND READINGS
120PRINT Rdgs(I) !PRINT READINGS
130END IF
140NEXT I
150END
The preceding program used the TRANSFER statement to get readings from
the multimeter. The following program uses the ENTER statement to transfer