65
FINS Commands with Host Link Protocol Section 3-5
Programming Example for Host Computer Side (BASIC): Reception
10 ’***************************************
20 ’**** CS1W-SCU21 Serial Communications Unit ****
30 ’**** Command to Host Computer (RECV(098)) ****
40 ’**** Sample Reception Program ****
50 ’***************************************
60 ’
70 ’============ Initial Settings ============
80 CLOSE 1
90 ON ERROR GOTO *EROPE
100 DIM CHDATA$ (300) :’ Data array declaration
110 CHDATA$ (0) =”0000”:CHDATA$ (1) =”1111”:CHDATA$ (2) =”2222”
120 CHDATA$ (3) =”3333”:CHDATA$ (4) =”4444”:CHDATA$ (5) =”5555”
130 OPEN ”COM:E73” AS #1 :’ Opens port.
140 ’
150 ’============ Main Process ============
160 RESPDATA$=””
170 INPUT #1, COMMAND$ :’ Receives data from PLC (line).
180 T$=LEFT$ (COMMAND$, LEN (COMMAND$) -3) :’ Checks FCS.
190 GOSUB *FCS
200 IF FCS$<>MID$ (COMMAND$, LEN (COMMAND$) -2, 2) THEN ENDCODE$=”1004”:GOTO *RESPONSE
210 CMNDCODE$=MID$ (COMMAND$, 27, 4) :’ Checks command code.
220 IF CMNDCODE$<>”0101” THEN ENDCODE$=”0401” :GOTO *RESPONSE
230 FOR I=0 TO VAL (”&H”+MID$ (COMMAND$, 39, 4) ) -1 :’ Sets No. of read elements.
240 RESPDATA$=RESPDATA$+CHDATA$ (I)
250 NEXT I
260 PRINT ”Send data”;RESPDATA$
270 ENDCODE$=”0000” :’ Sets end code to “0000”.
280 ’==========================================
290 *RESPONSE :’ Creates a response frame.
300 RSV$=MID$ (COMMAND$, 9, 2) :’ Returns received RSV, SID
310 DA$=MID$ (COMMAND$, 19, 6) :’ without change.
320 SA$=MID$ (COMMAND$, 13, 6) :’ Swaps DNA, DA1, DA2
330 SID$=MID$ (COMMAND$, 25, 2) :’ with SNA, SA1, and SA2.
340 T$=”@000F00C0”+RSV$+”02”+DA$+SA$+SID$+CMNDCODE$+ENDCODE$+RESPDATA$
350 GOSUB *FCS
360 RESPONSE$=T$+FCS$+”*”
370 PRINT #1, RESPONSE$ :’ Transmits data to PLC (line).
380 GOTO 160
390 ’
400 ’===== FCS Calculation Subroutine =====
410 *FCS :’ Adds FCS.
420 L=LEN (T$)
430 A=0
440 FOR J=1 TO L
450 TJ$=MID$ (T$, J, I)
460 A+ASC (TJ$) XOR A
470 NEXT J
480 FCS$=HEX$ (A)
490 IF LEN (FCS$) =1 THEN FCS$=”0”+FCS$
500 RETURN
510 ’
520 ’========== Error processing ==========
530 *EROPE
540 PRINT ”ERL=”:ERL, ”ERR”;ERR
550 CLOSE 1
560 END