Trích dẫn Gửi bởi Mechatronic_Hieu Xem bài viết
hàm bạn viết như SFC20 vậy, có 1 chân Int và 1 chân Out. Thì là hàm Move thôi, bạn cho giá trị các word đầu vào rồi kiểm tra đầu ra thế là test dc thôi. Viết thì tất nhiên sẽ dc nhưng vấn đề là hàm thế nào cho tổng quát: đầu nào người dùng có thể đưa vào địa chỉ bất kỳ vùng nhớ nào( Db,M,DW...) và có thể 1 dãy 100 hay 200 word tuỳ ý

FUNCTION FC4 : VOID
TITLE = 'MOVE N BYTE'
//************************************************** *****************
VAR_INPUT
VUNG_NHO: CHAR; //TEN VUNG NHO BYTE/WORD/DWORD (B-D-W)
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/WORD/DWORD
END_VAR
VAR_OUTPUT
ERROR: BOOL;
END_VAR
VAR_TEMP
I : INT;
BUFFER : ARRAY[1..30] OF BYTE;
BUFFER1 : ARRAY[1..30] OF WORD;
BUFFER2 : ARRAY[1..30] OF DWORD;
END_VAR;
//************************************************** *****************
//coppy data tu from_ad den from_ad+n vao BUFFER
FOR I:=FROM_AD TO (FROM_AD + N) BY 1 DO

CASE CHAR_TO_INT(VUNG_NHO) OF
66: BUFFER[I-FROM_AD]:=WORD_TO_BLOCK_DB(INT_TO_WORD(DB_BLOCK)).DB[I];
87: BUFFER1[I-FROM_AD]:=WORD_TO_BLOCK_DB(INT_TO_WORD(DB_BLOCK)).DW[I];
68: BUFFER2[I-FROM_AD]:=WORD_TO_BLOCK_DB(INT_TO_WORD(DB_BLOCK)).DD[I];
ELSE:
ERROR:= TRUE;
END_CASE;
END_FOR;
//************************************************** *****************
//coppy data tu BUFFER vao dich
FOR I:= TO_AD TO TO_AD+N BY 1 DO
CASE CHAR_TO_INT(VUNG_NHO) OF
66: WORD_TO_BLOCK_DB(INT_TO_WORD(DB_BLOCK)).DB[I]:=BUFFER[I-TO_AD];
87: WORD_TO_BLOCK_DB(INT_TO_WORD(DB_BLOCK)).DW[I]:=BUFFER1[I-TO_AD];
68: WORD_TO_BLOCK_DB(INT_TO_WORD(DB_BLOCK)).DD[I]:=BUFFER2[I-TO_AD];
ELSE:
ERROR:= TRUE;
END_CASE;
END_FOR;
//************************************************** *****************
END_FUNCTION

em không làm được.
một đầu vào 1 đầu ra thì em không biêt làm.... anh chỉ em với. em không biết làm thế nào để nhận biết ngõ vào ở là byte, word, hay dword