' 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 AS INTEGER, i AS INTEGER, 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 OutBuf = OutBuf + CHR$(data1) outidx = outidx + 1 tmp = ToCom4(data1) IF data1 = 13 THEN sum% = 0 tmp = ToCom4(10) tmp = print4(OutBuf) 'test tmp = ToCom4(10) 'test outidx = outidx - 1 tmp = Set485DirToTransmit(2) FOR i = 1 TO outidx data1 = ASC(MID$(OutBuf, i, 1)) tmp = ToCom2(data1) IF checksum <> 0 THEN sum% = sum% + data1 NEXT i IF checksum <> 0 THEN sum% = sum% AND &HFF IF sum% < 16 THEN tmp = ToCom2(&H30) tmp = print2(HEX$(sum% AND &HFF)) END IF 'if checksum<>0 outidx = 0 tmp = ToCom2(13) tmp = WaitTransmitOver(2) tmp = Set485DirToReceive(2) ' tmp=SendCmdTo7000(2,OutBuf,checksum) ' outidx = 0 OutBuf = "" 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)