' program: ECHO485.BAS ' use : echo485 [/Bbaudrate] ' (1) must run on 7188 ' (2) default baudrate is 9600 ' function description: ' (1) echo any data on the 7188's COM2(RS485) to COM4. ' (2) data come from COM4(end with CR(0x0d)) will be send to ' COM2(RS485)(data in will be buffered,until receive 0x0d, ' 7188 will send out the buffered data.(if checksum enable, ' will append checksum(2 bytes) after the data,before 0x0d.) ' (3) press 'q'(not 'Q') to quit. ' (4) press 's'(not 'S') to toggle checksum mode. ' so 'q' and 's' will not be send to 485. ' (5) default mode is checksum enable. ' (6) protocal is 1 start bit,8 data bit,none parity,1 stop bit. ' ' [PC]<---------->[7188-0]<------------------+----->[7000's] ' RS232 (COM4) (COM2) RS485 | ' [7188-1]<------------------+ ' (COM2/COM1) RS485 ' NOTE: Use echo485 to (1)monitor data on RS485,(2)send command to 7000's REM $INCLUDE: '7188.bi' REM $INCLUDE: 'printf.bas' DIM no AS INTEGER DIM buf AS STRING '* 80 DIM OutBuf AS STRING '* 80 DIM idx AS INTEGER DIM outidx AS INTEGER HEXSTR$ = "0123456789ABCDEF" DIM baud AS LONG DIM quit AS INTEGER DIM data1, i, temp AS INTEGER DIM checksum AS INTEGER ChangeLine$ = CHR$(10) + CHR$(13) checksum = 0 quit = 0 idx = 0 outidx = 0 baud = 9600 tmp = Is7188 IF tmp = 0 THEN PRINT "echo485 must run on 7188!" STOP END IF ' if(argc>1){ ' baud=atol(argv[1]); ' if(baud<=0) baud=9600; ' } i = INSTR(COMMAND$, "/B") IF i <> 0 THEN baud = VAL(MID$(COMMAND$, i + 2)) IF baud < 1200 THEN baud = 9600 END IF tmp = InstallCom(2, baud, 8, 0, 1) tmp = InstallCom(4, 57600, 8, 0, 1) tmp = print4(ChangeLine$ + "Echo485:Use COM2(RS485) connect to 7000's") tmp = print4(ChangeLine$ + "echo485 [baudrate] --> default:9600") tmp = print4(ChangeLine$ + "'s' to toggle checksum ON(1)/OFF(0)") tmp = print4(ChangeLine$ + "'q' to quit to ROM-DOS") tmp = print4(ChangeLine$ + "Current mode:baudrate=" + STR$(baud) + ",checksum=" + STR$(checksum) + ChangeLine$) Init5DigitLed tmp = Show5DigitLed(5, 17) tmp = Show5DigitLed(4, 17) tmp = Show5DigitLed(3, 17) tmp = Show5DigitLed(2, 17) tmp = Show5DigitLed(1, 17) OutBuf = "" buf = "" DO WHILE quit = 0 tmp = IsCom(4) IF tmp <> 0 THEN data1 = ReadCom(4) IF data1 = ASC("q") THEN quit = 1 ELSEIF data1 = ASC("s") THEN IF checksum = 1 THEN checksum = 0 ELSE checksum = 1 END IF tmp = print4("CheckSum=") tmp = print4(STR$(checksum)) tmp = print4(ChangeLine$) ELSEIF data1 = 8 THEN 'BackSpace key IF outidx <> 0 THEN outidx = outidx - 1 tmp = ToCom4(data1) OutBuf = LEFT$(OutBuf, outidx) END IF ELSE tmp = ToCom4(data1) IF data1 = 13 THEN tmp = print4(ChangeLine$) tmp=SendCmdTo7000(2,OutBuf,checksum) outidx = 0 OutBuf = "" tmp=ReceiveResponseFrom7000(2,InBuf$,1000,checksum) if tmp=0 then tmp=print4(InBuf$+ChangeLine$) else tmp=print4("Error="+STR$(tmp)) endif ELSE OutBuf = OutBuf + CHR$(data1) outidx = outidx + 1 END IF 'if data1=13 END IF 'if data1=asc("q") END IF 'if tmp <>0 tmp = IsCom(2) IF tmp <> 0 THEN data1 = ReadCom(2) tmp = ToCom4(data1) IF data1 = 13 THEN tmp = ToCom4(10) buf = buf + CHR$(data1) idx = idx + 1 IF data1 = 13 THEN idx = 0 no = LEN(buf) tmp = Show5DigitLed(5, no MOD 10) no = no / 10 tmp = Show5DigitLed(4, no MOD 10) no = no / 10 tmp = Show5DigitLed(3, no MOD 10) no = no / 10 tmp = Show5DigitLed(2, no MOD 10) no = no / 10 tmp = Show5DigitLed(1, no MOD 10) ELSEIF idx >= 80 THEN idx = 79 END IF END IF LOOP tmp = RestoreCom(2) tmp = RestoreCom(4)