[ Home ] [ Products ] [ Data Sheets ] [ Support ] [ FAQ ] [ Sales Offices ] [ Request Catalog ] [ Contact duTec ]
10 | REM This is a demo program for the duTec I/O PLEXER Controller. |
20 | REM Many of the tools needed to construct GWBASIC programs to |
30 | REM interact with the IOP have been included. They key to the actual |
40 | REM IOP commands may be found in the DATA statements. |
50 | REM Although this may not be the most efficient algorthim, it does |
60 | REM serve to demonstrate each step in communicating with IOP. |
70 | REM An IV10 analog input module must be installed in position #1 |
80 | REM of IOP in order for the program to function properly. When the |
90 | REM analog input is varied the output to the screen should indicate |
95 | REM the change. |
100 | CLS |
110 | DIM DIGIT$(15) |
120 | GOSUB 610 : REM initialize HEX digit array for future use. |
130 | INPUT "COMMUNICATION BAUDRATE=";BAUD |
140 | OPEN "COM1:"+STR$(BAUD)+",N,89,1,DS,CD,CS,ASC" FOR RANDOM AS #1 |
150 | REM *************************************** |
155 | REM * Here to send first transmission to I/O plexer * |
157 | REM *************************************** |
160 | ADDR$="80": REM Hex address for analog functions in I/O Plexer as shipped from factory |
170 | CMD$="A": REM Power-up-clear command for first trans. to I/O Plexer. |
180 | POSITION$="": REM No position field required for power-up-clear |
185 | GOSUB 400 : REM Build the command with the above values |
190 | PRINT #1,MSG$ : REM send the command to IOP. |
* | |
200 | GOSUB 890 : REM wait for the response from IOP. |
210 | IF FLAG=1 THEN GOTO 190 |
220 | REM *********************** |
222 | REM * Print the table header * |
224 | REM *********************** |
230 | CLS |
240 | PRINT "RAW HEX VALUE";TAB(20);"COMPUTED INPUT VOLTS" |
250 | PRINT "= = = = = = = = = = = = = = = = = = = = " |
252 | REM ********************************************* |
254 | REM * Here to send the request for analog data to I/O Plexer * |
256 | REM ********************************************* |
260 | ADDR$="80": REM Hex address for analog functions in I/O Plexer as shipped from factory |
270 | CMD$="L" : REM command letter to read analog inputs |
272 | POSITION$="0002" : REM Positions field indicating module position #1 |
280 | GOSUB 400 |
290 | PRINT #1,MSG$ |
300 | GOSUB 890 |
305 | IF FLAG=1 THEN GOTO 290 |
340 | REM ********************************************* |
350 | REM * Here to convert raw module HEX into decimal and print. * |
360 | REM ********************************************* |
370 | HEX.ANALOG.DATA$=MID$(RESPONSE$,2,4) : REM if in-range get the actual data |
375 | TOTAL=0 |
380 | FOR I=0 TO 15 : REM |
382 | IF MID$(HEX.ANALOG.DATA$,1,1)=DIGIT$(I) THEN TOTAL=TOTAL+(I*4096) : REM MSB |
384 | IF MID$(HEX.ANALOG.DATA$,2,1)=DIGIT$(I) THEN TOTAL=TOTAL+(I*256) |
386 | IF MID$(HEX.ANALOG.DATA$,3,1)=DIGIT$(I) THEN TOTAL=TOTAL+(I*16) |
388 | IF MID$(HEX.ANALOG.DATA$,4,1)=DIGIT$(I) THEN TOTAL=TOTAL+(I*1) : REM LSB |
390 | NEXT I |
392 | TOTAL=TOTAL-4096 : REM Adjust for range character "rxxx" in response |
394 | VOLTS=(TOTAL/4095)*10 |
396 | PRINT HEX.ANALOG.DATA$;TAB(20);VOLTS |
398 | GOTO 290 : REM continue getting data and printing it out |
410 | REM * Here to assemble message string and calculate checksum.* |
415 | REM build the message |
416 | REM checksum=total ASCII value of all characters |
417 | REM excluding the ">" such that the subtotal after adding each |
418 | REM character does not exceed 255. Convert checksum into hex |
419 | REM value append checksumH to the command |
430 | MSG$=">"+ADDR$+CMD$+POSITION$ |
440 | CHKSUM=0 |
450 | FOR J=2 TO LEN(MSG$) |
460 | CHKSUM=CHKSUM+ASC(MID$(MSG$,J,1)) |
470 | IF CHKSUM>255 THEN CHKSUM=CHKSUM-256 |
480 | NEXT J |
490 | GOSUB 520 |
500 | MSG$=MSG$+HEXSUM$ |
510 | RETURN |
520 | REM ************************************* |
530 | REM * Here to turn CHKSUM into a hex value. * |
540 | REM ************************************* |
550 | HEXSUM$=HEX$(CHKSUM) |
560 | IF LEN(HEXSUM$)<2 THEN HEXSUM$="0"+HEXSUM$ |
600 | RETURN |
610 | REM ************************************* |
620 | REM * Here to build hex digit array. * |
630 | REM ************************************* |
640 | DIGIT$(0)="0" |
650 | DIGIT$(1)="1" |
660 | DIGIT$(2)="2" |
670 | DIGIT$(3)="3" |
680 | DIGIT$(4)="4" |
690 | DIGIT$(5)="5" |
700 | DIGIT$(6)="6" |
710 | DIGIT$(7)="7" |
720 | DIGIT$(8)="8" |
730 | DIGIT$(9)="9" |
740 | DIGIT$(10)="A" |
750 | DIGIT$(11)="B" |
760 | DIGIT$(12)="C" |
770 | DIGIT$(13)="D" |
780 | DIGIT$(14)="E" |
790 | DIGIT$(15)="F" |
830 | RETURN |
890 | REM ****************************** |
900 | REM * Here to receive a response from IOP. * |
910 | REM ****************************** |
920 | RESPONSE$="": R$="":FLAG=0 |
930 | DELAY=1 |
940 | T1=TIMER |
950 | IF LOC(1) THEN R$=INPUT$(LOC(1),1):GOTO 970 |
960 | IF TIMER-T1>DELAY THEN GOTO 990 ELSE GOTO 950 |
970 | RESPONSE$=RESPONSE$+R$ |
980 | IF RIGHT$(RESPONSE$,1)=CHR$(13) THEN RETURN ELSE GOTO 950 |
990 | PRINT "No response from I/O Plexer--retrying":FLAG=1 |
1000 | RETURN |
Copyright 1996-2001 duTec
e-mail comments or questions to
webmaster@dutec.net