optomast.abm (F4-CP128-1)
10 REM ***
20 REM Use F4-CP128-1 as a Simple Optomux Master
30 REM
40 REM Use command M to Read 16 Discrete Inputs from address 0 and put in C0-C17
50 REM Use command L to Read 4 Analog Inputs from address 1 and put in V1400-V1403
60 REM Use command J to Write 16 Discrete Outputs to address 2 from C20-C37
70 REM
80 REM
90 REM Baud Rate = 1200 (BAUD)
100 REM Wait for First = 100 ms (WFF)
110 REM Wait for Last = 3.5 Character Times ((1/BAUD)*10*3.5)
120 REM Optomux Master Port = 2
125 REM ND=On Delay, FD=Off Delay, For Radio Communications
130 REM
140 REM ***
150 REM Allocate String Space and Configure Port 2
160 STRING 2561,255
162 RA=1 : BAUD=9600 : WFF=100 : WFL=30
170 SETPORT 2,BAUD,N,8,1,N
175 SETPORT 1,9600,N,8,1,N
180 REM ***
190 REM Initialize Request Strings
200 REM Read Input Status Request String – Addr 0 / M
202 $(1)=”>00M”
205 REM Read Analog Inputs Request String – Addr 1 / L
207 $(2)=”>01LF”
210 REM Write Output Status Request String – Addr 2 / J
212 $(3)=”>02J”
230 REM ***
240 REM Configure INPUT statement
245 IF WFL<10 THEN WFL=10 : REM WFL Must be 10 or greater
250 SETINPUT 1,1,0,255,WFF,WFL
260 REM ***
262 REM Send Power Up Clear to Address 0, 1, 2
264 $(4)=”>00A” : S=4 : GOSUB 1000
266 IF ERR<>0 THEN GOTO 264 : REM Continuous Retry
268 $(4)=”>01A” : S=4 : GOSUB 1000
270 IF ERR<>0 THEN GOTO 268 : REM Continuous Retry
272 $(4)=”>02A” : S=4 : GOSUB 1000
274 IF ERR<>0 THEN GOTO 272 : REM Continuous Retry
300 REM ***
310 REM Read Input from Addr 0 and Copy to C0-17
320 S=1 : GOSUB 1000
330 IF ERR<>0 THEN GOTO 300 : REM Continuous Retry
340 DPORT(0)=VAL(“0″+MID$($(0),2,4)+”H”)
342 BMOVE W,C(0),C(17)
400 REM ***
410 REM Read Four Analog Inputs from Addr 1 and Copy to V1400-1403
420 S=2 : GOSUB 1000
430 IF ERR<>0 THEN GOTO 400 : REM Continuous Retry
440 DPORT(0)=VAL(“0″+MID$($(0),2,4)+”H”)-01000H
442 DPORT(2)=VAL(“0″+MID$($(0),6,4)+”H”)-01000H
446 DPORT(4)=VAL(“0″+MID$($(0),10,4)+”H”)-01000H
448 DPORT(6)=VAL(“0″+MID$($(0),14,4)+”H”)-01000H
460 BMOVE W,VH(1400),VH(1404)
500 REM ***
510 REM Read C20-37 and write to 16 Point Discrete Output at Addr 2
520 IF S405_C(1) THEN ASC($(3),5)=255 ELSE ASC($(3),5)=0
530 S=3 : GOSUB 1000
540 GOTO 300
1000 REM ***
1010 REM Send Request in $(S) and Get Response in $(0)
1020 $(0)=”” : INLEN2=0
1030 PRINT1 $(S),”??”
1040 DTR2=1 : DELAY ND
1042 REM Wildcard Checksum of ?? is used
1050 PRINT2 $(S),”??”,CR;
1060 DELAY FD : DTR2=0
1070 INPUT2 ,$(0)
1082 PRINT1 $(0)
1089 ERR=0
1090 IF INPLEN=0 THEN PRINT1 “NO RESPONSE” : ERR=NOT(0) : RETURN
1110 RETURN