Trích dẫn Gửi bởi Mechatronic_Hieu Xem bài viết
cho bán 1 bài toán thế nay: Trong thư viện cùa S7 manager có hàm SFC20 (block move) để copy 1 mảng dữ liệu nhưng nó có hạn chế là: Ví dụ bạn copy 10word bắt đầu từ db0.dbw0 đến db0.dbw18 sang db0.dbw5 đến db0.dbw23 hoặc copy ngược lại thì chỉ có đúng 1 chiều, 1 chiều copy thì sai nó sẽ bị trùng lắp dữ liệu( chiều nào sai bạn tự tìm hiểu nha). Yêu cầu là bạn viết 1 hàm tương tự nhưng khắc phục dc nhược điểm trên

Bạn cứ làm cái yêu cầu đơn giản này trước, sau đó cũng với bài toán này mình sẽ có yêu cầu cao hơn 1 tí

FUNCTION FC4 : VOID
TITLE = 'MOVE N BYTE'
//************************************************** *****************
VAR_INPUT
DB_BLOCK: INT; // TEN CUA DATA BLOCK
FROM_AD : INT; // COPPY TU FROM_DT
TO_AD : INT; // DEN DIA CHI TO_AD
N : INT; // VOI SO LUONG N BYTE
END_VAR
VAR_TEMP
I : INT;
BUFFER : ARRAY[1..30] OF BYTE;
END_VAR;
//************************************************** *****************
//coppy data tu from_ad den from_ad+n vao BUFFER
FOR I:=FROM_AD TO (FROM_AD + N) BY 1 DO

BUFFER[I-FROM_AD]:=WORD_TO_BLOCK_DB(INT_TO_WORD(DB_BLOCK)).DB[I];

END_FOR;
//************************************************** *****************
//coppy data tu BUFFER vao dich

FOR I:= TO_AD TO TO_AD+N BY 1 DO

WORD_TO_BLOCK_DB(INT_TO_WORD(DB_BLOCK)).DB[I]:=BUFFER[I-TO_AD];

END_FOR;
//************************************************** *****************
END_FUNCTION

em không biết test như thế nào... em có viết ra ở trên nhưng không biết chạy hay không vì em không biết cách test cái SFC 20 đó
nên không biết nó chạy thế nào
cũng không biết đúng không vì em không biết test SFC20 như thế nào