DECLARE FUNCTION DigitalIn% (port%, Addr$, id%, Checksum%, TimeOut1&, Receive$()) DECLARE FUNCTION DigitalInLatch% (port%, Addr$, id%, Checksum%, TimeOut1&, Receive$()) DECLARE FUNCTION ReceiveResponseFrom7000% (port%, RetStr$, TimeOut1&, Check%) DECLARE FUNCTION printf% (p%, s$) DECLARE FUNCTION print1% (s$) DECLARE FUNCTION print2% (s$) DECLARE FUNCTION print3% (s$) DECLARE FUNCTION print4% (s$) DECLARE FUNCTION SendCmdTo7000% (port%, Cmd$, Check%) DECLARE FUNCTION AnalogIn% (port%, Addr$, id%, Channel%, Checksum%, TimeOut1&, Receive7000!()) DECLARE FUNCTION AnalogIn8% (port%, Addr$, id%, Checksum%, TimeOut1&, Receive7000!()) DECLARE FUNCTION DigitalOut% (port%, Addr$, id%, Checksum%, TimeOut1&, To7000$()) DECLARE FUNCTION DigitalOutSingle% (port%, Addr$, id%, Channel%, Checksum%, TimeOut1&, To7000$()) DECLARE FUNCTION ToComBufn% (port%, Buf$, no%) DECLARE FUNCTION ToComBuf1% (Buf$, no%) DECLARE FUNCTION ToComBuf2% (Buf$, no%) DECLARE FUNCTION ToComBuf3% (Buf$, no%) DECLARE FUNCTION ToComBuf4% (Buf$, no%) FUNCTION AnalogIn% (port%, Addr$, id%, Channel%, Checksum%, TimeOut1&, Receive7000!()) SELECT CASE id% CASE 7011 id% = 0 GOTO break1 CASE 7012 id% = 0 GOTO break1 CASE 7013 id% = 0 GOTO break1 CASE 7014 id% = 0 GOTO break1 'CASE 7016 CASE 7017 id% = 1 GOTO break1 CASE 7018 id% = 1 GOTO break1 CASE 7033 id% = 2 GOTO break1 CASE ELSE AnalogIn = ModuleError END SELECT break1: IF id% = 0 THEN IF Channel% > 1 THEN AnalogIn = ChannelError Cmd$ = "#" + Addr$ ELSEIF id% = 1 THEN 'temp = print4(STR$(id%)) IF Channel% > 7 THEN AnalogIn = ChannelError ELSE Cmd$ = "#" + Addr$ + RIGHT$(STR$(Channel%), 1) temp = print4(Cmd$) END IF ELSEIF id% = 2 THEN IF Channel% > 2 THEN AnalogIn = ChannelError Cmd$ = "#" + Addr$ + RIGHT$(STR$(Channel%), 1) END IF temp = ClearCom(port%) temp = SendCmdTo7000%(port%, Cmd$, Checksum%) IF temp = NoError THEN temp = ReceiveResponseFrom7000%(port%, RetStr$, TimeOut1&, Checksum%) ELSE AnalogIn = PortError END IF IF temp = NoError THEN Receive7000(1) = VAL(MID$(RetStr$, 2, 7)) AnalogIn = NoError ELSEIF temp = TimeOut THEN AnalogIn = TimeOut ELSEIF temp = ChecksumError THEN AnalonIn = ChecksumError END IF END FUNCTION FUNCTION AnalogIn8% (port%, Addr$, id%, Checksum%, TimeOut1&, Receive7000()) SELECT CASE id% CASE 7017 GOTO break CASE 7018 GOTO break CASE ELSE AnalogIn8 = ModuleError END SELECT break: Cmd$ = "" Cmd$ = "#" + Addr$ temp = SendCmdTo7000(port%, Cmd$, Checksum%) IF temp = NoError THEN temp = ReceiveResponseFrom7000%(port%, RetStr$, TimeOut1&, Checksum%) ELSE AnalogIn8 = PortError END IF IF temp = NoError THEN FOR i% = 0 TO 7 Receive7000(i% + 1) = VAL(MID$(RetStr$, 2 + i% * 7, 7)) NEXT i% AnalogIn8 = NoError ELSEIF temp = TimeOut THEN AnalogIn8 = TimeOut ELSEIF temp = ChecksumError THEN AnalogIn8 = ChecksumError END IF END FUNCTION FUNCTION DigitalIn% (port%, Addr$, id%, Checksum%, TimeOut1&, Receive$()) SELECT CASE id% CASE 7041 id% = 1 GOTO break2 CASE 7044 id% = 1 GOTO break2 CASE 7053 id% = 1 GOTO break2 CASE 7050 id% = 1 GOTO break2 CASE 7060 id% = 1 GOTO break2 CASE 7052 id% = 1 GOTO break2 'CASE 7011 'CASE 7012 'CASE 7014 'CASE 7016 'id% = 3 'GOTO break2 CASE ELSE DigitalIn = ModuleError END SELECT break2: Cmd$ = "@" + Addr$ temp = SendCmdTo7000%(port%, Cmd$, Checksum%) IF temp = NoError THEN temp = ReceiveResponseFrom7000%(port%, RecStr$, TimeOut1&, Checksum%) ELSE DigitalIn = PortError END IF IF temp = NoError THEN Receive$(1) = MID$(RecStr$, 2, 4) DigitalIn = NoError ELSEIF temp = TimeOut THEN DigitalIn = TimeOut ELSEIF temp = ChecksumError THEN DigitalIn = ChecksumError END IF END FUNCTION FUNCTION DigitalInLatch% (port%, Addr$, id%, Checksum%, TimeOut1&, Receive$()) SELECT CASE id% CASE 7041 id% = 1 GOTO break5 CASE 7044 id% = 1 GOTO break5 CASE 7053 id% = 1 GOTO break5 CASE 7050 id% = 1 GOTO break5 CASE 7060 id% = 1 GOTO break5 CASE 7052 id% = 1 GOTO break5 'CASE 7011 'CASE 7012 'CASE 7014 'CASE 7016 'id% = 3 'GOTO break5 CASE ELSE DigitalInLatch = ModuleError END SELECT break5: Cmd$ = "$" + Addr$ + "L0" temp = SendCmdTo7000%(port%, Cmd$, Checksum%) IF temp = NoError THEN temp = ReceiveResponseFrom7000%(port%, RecStr$, TimeOut1&, Checksum%) ELSE DigitalInLatch = PortError END IF IF temp = NoError THEN Receive$(1) = MID$(RecStr$, 2, 4) temp = print4(Receive$(1)) Cmd$ = "$" + Addr$ + "C" temp = SendCmdTo7000(port%, Cmd$, Checksum%) temp = ReceiveResponseFrom7000%(port%, RecStr$, TimeOut1&, Checksum%) DigitalInLatch = NoError ELSEIF temp = TimeOut THEN DigitalInLatch = TimeOut ELSEIF temp = ChecksumError THEN DigitalInLatch = ChecksumError END IF END FUNCTION FUNCTION DigitalOut% (port%, Addr$, id%, Checksum%, TimeOut1&, To7000$()) SELECT CASE id% CASE 7050 '#AA00DD id% = 0 GOTO break3 CASE 7060 id% = 0 GOTO break3 CASE 7063 id% = 0 GOTO break3 CASE 7065 id% = 0 GOTO break3 CASE 7066 id% = 0 GOTO break3 CASE 7067 id% = 0 GOTO break3 CASE 7044 id% = 0 GOTO break3 CASE 7042 '@AADDDD id% = 1 GOTO break3 CASE 7043 id% = 1 GOTO break3 CASE 7011 '@AADO0? id% = 2 '0?=03 Bit0:on Bit1:on GOTO break3 CASE 7012 '0?=00 Bit0:off Bit1:off id% = 2 '0?=03 Bit0:on Bit1:on GOTO break3 CASE 7014 '0?=01 Bit0:on Bit1:off id% = 2 '0?=03 Bit0:on Bit1:on GOTO break3 CASE 7080 '0?=02 Bit0:off Bit1:on id% = 2 '0?=03 Bit0:on Bit1:on GOTO break3 'CASE 7016 ' id% = 3 '@AADO0? for Bit0, Bit1 ' GOTO break3 '@AADO1? for Bit2, Bit3 CASE ELSE DigitalOut = ModuleError END SELECT break3: IF id% = 0 THEN IF LEN(To7000$(1)) = 2 THEN Cmd$ = "#" + Addr$ + "00" + To7000$(1) ELSE DigitalOut = DataError END IF ELSEIF id% = 1 THEN IF LEN(To7000$(1)) = 4 THEN Cmd$ = "@" + Addr$ + To7000$(1) ELSE DigitalOut = DataError END IF ELSEIF id% = 2 THEN IF LEN(To7000$(1)) > 1 OR To7000$(1) > "3" THEN DigitalOut = DataError ELSE Cmd$ = "@" + Addr$ + "DO0" + To7000$(1) END IF END IF temp = SendCmdTo7000%(port%, Cmd$, Checksum%) IF temp = NoError THEN temp = ReceiveResponseFrom7000%(port%, RecStr$, TimeOut1&, Checksum%) ELSE DigitalOut = PortError END IF IF temp = NoError THEN DigitalOut = NoError ELSEIF temp = ChecksumError THEN DigitalOut = ChecksumError ELSEIF temp = TimeOut THEN DigitalOut = TimeOut END IF END FUNCTION FUNCTION DigitalOutSingle% (port%, Addr$, id%, Channel%, Checksum%, TimeOut1&, To7000$()) SELECT CASE id% CASE 7050 '#AA00DD id% = 0 GOTO break4 CASE 7060 id% = 0 GOTO break4 CASE 7063 id% = 0 GOTO break4 CASE 7065 id% = 0 GOTO break4 CASE 7066 id% = 0 GOTO break4 CASE 7067 id% = 0 GOTO break4 CASE 7044 id% = 0 GOTO break4 CASE 7042 '@AADDDD id% = 1 GOTO break4 CASE 7043 id% = 1 GOTO break4 CASE 7011 '@AADO0? id% = 2 '0?=03 Bit0:on Bit1:on GOTO break4 CASE 7012 '0?=00 Bit0:off Bit1:off id% = 2 '0?=03 Bit0:on Bit1:on GOTO break4 CASE 7014 '0?=01 Bit0:on Bit1:off id% = 2 '0?=03 Bit0:on Bit1:on GOTO break4 CASE 7080 '0?=02 Bit0:off Bit1:on id% = 2 '0?=03 Bit0:on Bit1:on GOTO break4 'CASE 7016 ' id% = 3 '@AADO0? for Bit0, Bit1 ' GOTO break4 '@AADO1? for Bit2, Bit3 CASE ELSE DigitalOutSingle = ModuleError END SELECT break4: IF id% = 0 THEN IF LEN(To7000$(1)) = 2 THEN IF Channel% > 8 THEN Cmd$ = "#" + Addr$ + "1" + RIGHT$(STR$(Channel%), 1) + To7000$(1) ELSE DigitalOutSingle = ChannelError END IF ELSE DigitalOutSingle = DataError END IF ELSEIF id% = 1 THEN IF LEN(To7000$(1)) = 2 THEN IF Channel% >= 0 AND Channel% <= 7 THEN Cmd$ = "#" + Addr$ + "A" + RIGHT$(STR$(Channel%), 1) + To7000$(1) ELSEIF Channel% > 7 AND Channel% < 15 THEN Cmd$ = "#" + Addr$ + "B" + RIGHT$(STR$(Channel%), 1) + To7000$(1) ELSE DigitalOutSingle = ChannelError END IF ELSE DigitalOutSingle = DataError END IF ELSEIF id% = 2 THEN IF LEN(To7000$(1)) > 1 OR To7000$(1) > "3" THEN DigitalOutSingle = DataError ELSE Cmd$ = "@" + Addr$ + "DO0" + To7000$(1) END IF END IF temp = SendCmdTo7000%(port%, Cmd$, Checksum%) IF temp = NoError THEN temp = ReceiveResponseFrom7000%(port%, RecStr$, TimeOut1&, Checksum%) ELSE DigitalOutSingle = PortError END IF IF temp = NoError THEN DigitalOutSingle = NoError ELSEIF temp = ChecksumError THEN DigitalOutSingle = ChecksumError ELSEIF temp = TimeOut THEN DigitalOutSingle = TimeOut END IF END FUNCTION FUNCTION print1% (s$) length% = LEN(s$) FOR i% = 1 TO length% tmp% = ToCom1(ASC(MID$(s$, i%))) IF tmp% <> 0 THEN EXIT FOR NEXT i% print1 = tmp% END FUNCTION FUNCTION print2% (s$) length% = LEN(s$) FOR i% = 1 TO length% tmp% = ToCom2(ASC(MID$(s$, i%))) IF tmp% <> 0 THEN EXIT FOR NEXT i% print2 = tmp% END FUNCTION FUNCTION print3% (s$) length% = LEN(s$) FOR i% = 1 TO length% tmp% = ToCom3(ASC(MID$(s$, i%))) IF tmp% <> 0 THEN EXIT FOR NEXT i% print3 = tmp% END FUNCTION FUNCTION print4% (s$) length% = LEN(s$) FOR i% = 1 TO length% tmp% = ToCom4(ASC(MID$(s$, i%))) IF tmp% <> 0 THEN EXIT FOR NEXT i% print4 = tmp% END FUNCTION FUNCTION printf% (p%, s$) length% = LEN(s$) FOR i% = 1 TO length% tmp% = ToCom(p%, ASC(MID$(s$, i%))) IF tmp% <> 0 THEN EXIT FOR NEXT i% printf = tmp% END FUNCTION FUNCTION ReceiveResponseFrom7000% (port%, RetStr$, TimeOut1&, Check%) DIM t AS LONG DIM tmp AS INTEGER DIM data1 AS INTEGER DIM idx AS INTEGER DIM i AS INTEGER DIM sum AS INTEGER DIM tmpStr$ RetStr$ = "" idx = 0 FOR t = 0 TO TimeOut1& tmp = IsCom(port%) IF tmp <> 0 THEN data1 = ReadCom(port%) ' tmp = ToCom4(data1) 'for test t = 0 IF data1 = 13 THEN ' tmp = ToCom4(10) 'for test IF Check% <> 0 THEN sum = 0 FOR i = 1 TO idx - 2 sum = sum + ASC(MID$(RetStr$, i, 1)) NEXT i sum = sum AND &HFF tmpStr$ = HEX$(sum) IF sum < 16 THEN tmpStr$ = "0" + tmpStr$ IF tmpStr$ = MID$(RetStr$, idx - 1, 2) THEN ReceiveResponseFrom7000 = NoError RetStr$ = LEFT$(RetStr$, idx - 2) ELSE ReceiveResponseFrom7000 = ChecksumError END IF ELSE ReceiveResponseFrom7000 = NoError END IF EXIT FOR ELSE RetStr$ = RetStr$ + CHR$(data1) idx = idx + 1 END IF END IF 'tmp <> 0 NEXT t IF t >= TimeOut1& THEN ReceiveResponseFrom7000 = TimeOut END FUNCTION FUNCTION SendCmdTo7000% (port%, Cmd$, Check%) STATIC sum AS INTEGER STATIC i, j AS INTEGER STATIC data1 AS INTEGER STATIC tmp AS INTEGER sum = 0 j = LEN(Cmd$) tmp = Set485DirToTransmit(port%) FOR i = 1 TO j data1 = ASC(MID$(Cmd$, i, 1)) tmp = ToCom(port%, data1) IF Check% <> 0 THEN sum = sum + data1 NEXT i IF Check% <> 0 THEN sum = sum AND &HFF IF sum < 16 THEN tmp = ToCom2(&H30) IF port% = 1 THEN tmp = print1(HEX$(sum AND &HFF)) ELSE tmp = print2(HEX$(sum AND &HFF)) END IF END IF 'if checksum<>0 tmp = ToCom(port%, 13) tmp = WaitTransmitOver(port%) tmp = Set485DirToReceive(port%) SendCmdTo7000 = NoError END FUNCTION FUNCTION ToComBuf1% (Buf$, no%) FOR i% = 1 TO no% temp = ToCom1(ASC(MID$(Buf$, i%, 1))) IF temp <> NoError THEN GOTO endprogram1 NEXT i% endprogram1: ToComBuf1 = temp END FUNCTION FUNCTION ToComBuf2% (Buf$, no%) FOR i% = 1 TO no% temp = ToCom2%(ASC(MID$(Buf$, i%, 1))) IF temp <> NoError THEN GOTO endprogram2 NEXT i% endprogram2: ToComBuf2 = temp END FUNCTION FUNCTION ToComBuf3% (Buf$, no%) FOR i% = 1 TO no% temp = ToCom3%(ASC(MID$(Buf$, i%, 1))) IF temp <> NoError THEN GOTO endprogram3 NEXT i% endprogram3: ToComBuf3 = temp END FUNCTION FUNCTION ToComBuf4% (Buf$, no%) FOR i% = 1 TO no% temp = ToCom4(ASC(MID$(Buf$, i%, 1))) IF temp <> NoError THEN GOTO endprogram4 NEXT i% endprogram4: ToComBuf4 = temp END FUNCTION FUNCTION ToComBufn% (port%, Buf$, no%) FOR i% = 1 TO no% temp = ToCom(port%, ASC(MID$(Buf$, i%, 1))) IF temp <> NoError THEN GOTO endprogram NEXT i% endprogram: ToComBufn = temp END FUNCTION