10 REM *** 20 REM F4-CP128-1 Connected to 3300 ACM via RS485 30 REM 40 REM Use Modbus FC 3 to Read Power Meter Information 70 REM 80 REM Modbus Slave Address = 1 (RA) 90 REM Baud Rate = 9600 (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 Modbus 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 2551,254 162 RA=1 : BAUD=9600 : WFF=100 : WFL=10 170 SETPORT 2,BAUD,N,8,1,N : REM 3300 ACM Modbus Slave 175 SETPORT 1,9600,N,8,1,N : REM Dumb Terminal for Debug/Monitoring 180 REM *** 190 REM Initialize Request Strings 195 REM Read 3300 ACM Request String Read 8 Words starting from 196 REM Modbus address 40011 (0AH) 200 $(1)=CHR$(RA)+CHR$(3)+CHR$(0)+CHR$(0AH)+CHR$(0)+CHR$(08H) 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 300 REM *** 310 REM Send Request and Display Response 320 S=1 : GOSUB 1000 330 IF ERR<>0 THEN GOTO 300 : REM Continuous Retry 350 GOTO 300 1000 REM *** 1010 REM Send Request $(S) and Get Response in $(3), Echo in $(2) 1020 $(0)="" : INLEN2=0 1030 SYSTEM(2)=NOT(0) : REM Enable CRC-16 Error Check 1040 DTR2=1 : DELAY ND 1050 PRINT2 USING(\6\),$(S); : REM Send Request 1060 DELAY FD : DTR2=0 1070 INPUT2 ,$(2) : REM Get RS485 Echo 1072 INPUT2 ,$(3) : REM Get Response 1080 SYSTEM(2)=0 : REM Disable CRC-16 Error Check 1085 ERR=0 1090 IF INPLEN=0 THEN PRINT1 "NO RESPONSE" : ERR=NOT(0) : RETURN 1092 PRINT1 : PRINT1 "SENT> "; 1093 FOR X=1 TO 6 : PRINT1 HEX$(ASC$($(1),X),1)," "; : NEXT X 1094 PRINT1 1096 PRINT1 "ECHO> "; 1097 FOR X=1 TO 6 : PRINT1 HEX$(ASC$($(2),X),1)," "; : NEXT X 1098 PRINT1 1100 PRINT1 "RCVD> "; 1102 FOR X=1 TO INPLEN : PRINT1 HEX$(ASC$($(3),X),1)," "; : NEXT X 1104 PRINT1 1110 IF COMERR2 THEN PRINT1 "CRC-16 ERROR" : ERR=NOT(0) : RETURN 1120 RETURN