F0_memory_expansion.abm (F0-CP128)

10           REM ***

12           REM Example program showing one way to expand memory storage of an 05 or

13           REM 06 PLC using the F0-CP128

14           REM This example uses absolute memory accesses in the F0-CP128

16           REM V2000-V2177 will be source/destination in the PLC

18           REM V3000 will specify a block number in the F0-CP128 memory

20           REM The Block number will be between 0 and 127 (128 blocks)

22           REM C100 Triggers copy from V2000-V2177 to F0-CP128 specified block #

24           REM C101 Triggers copy from F0-CP128 specified block # to V2000-V2177

26           REM Set C100 or C101 using One Shot (PD) to SET Coil, BASIC program will

28           REM turn off the C’s when the move is complete

30           REM

32           REM This example will allow 128 blocks of 256 bytes each for a total of

34           REM 32768 bytes or 16384 words

40           REM —

50           REM ***

52           STRING 2551,254

54           SETPORT 1,9600,N,8,1,N : REM Port 1 Programming/Debug

56           MEM_START=75776 : REM Pointer to start of storage memory

58           MEM_FSET=0 : REM Offset / Each Block will be 256 bytes

99           PRINT1 “Program Started”

100         REM ***

102         REM Check for C100 or C101

110         IF S06_C(100) THEN GOSUB 200 : REM Trigger Copy from PLC

120         IF S06_C(101) THEN GOSUB 300 : REM Trigger Copy from F0-CP128

130         GOTO 110 : REM Loop Forever

200         REM ***

202         REM Copy V2000-V2177 to specified block in F0-CP128

204         BLOCK=S06_VB(3000)

206         IF BLOCK>127 THEN GOTO 250

208         MEM_FSET=BLOCK*256 : REM Calculate Offset

210         PRINT1 “—“: PRINT1 “Reading Data from V2000-V2177”

212         BMOVE R,VH(2000),K(256) : REM Read Source Data

214         PRINT “Writing Data to F0-CP128 memory – Block #”,BLOCK

220         FOR X=0 TO 256 STEP 2

222         WORD(MEM_START+MEM_FSET+X)=DPORT(X) : REM Copy Data

224         NEXT X

230         PRINT1 “Turning off C100”

232         S06_C(100)=0 : REM Turn Off C100

240         RETURN

250         REM —

252         REM Handle Invalid Block #

260         S06_VB(3000)=9999

262         PRINT1 “—” : PRINT1 “Invalid Block # on PLC to CoPro Request”

264         S06_C(100)=0

270         RETURN

300         REM ***

302         REM Copy specified block in F0-CP128 to V2000-V2177

304         BLOCK=S06_VB(3000)

306         IF BLOCK>127 THEN GOTO 350

308         MEM_FSET=BLOCK*256 : REM Calculate Offset

310         PRINT1 “—“: PRINT1 “Reading Data from F0-CP128 memory – Block #”,BLOCK

312         FOR X=0 TO 256 STEP 2

314         DPORT(X)=WORD(MEM_START+MEM_FSET+X) : REM Copy Data

316         NEXT X

320         PRINT “Writing Data to V2000-V2177”

322         BMOVE W,VH(2000),K(256) : REM Write Source Data

330         PRINT1 “Turning off C101”

332         S06_C(101)=0 : REM Turn Off C101

340         RETURN

350         REM —

352         REM Handle Invalid Block #

360         S06_VB(3000)=9999

362         PRINT “—” : PRINT1 “Invalid Block # on CoPro to PLC Request”

364         S06_C(101)=0

370         RETURN

×