-
Thành viên cấp 4
Xin lỗi bạn, quên mất cái pass giải nén @.@
-
-
Thành viên cấp 3
mệt với con trỏ qua anh ơi... nhưng mà nó hay
L P##BoolIn // load boolin vào pointer
LAR1 // đua nó vào AR1
cho em hỏi tai sao lại mở khối DB này
L W [AR1,P#0.0] // lệnh này đưa cái gì vô ACC ạ. em đọc TL rồi ạ, mà test không thấy ACC thay đổi gì
T #DB_Number
OPN DB [#DB_Number]
//đọc data vô ACC
L D [AR1,P#2.0] // tại sao chỗ này lại load DWORD ạ. sao lại là P#2.0... em test chán rồi.. không hiểu ạ
LAR1 //
mong các anh giúp em ạ.. em có chịu đọc tài liệu, hỏi lệnh này làm gì em biết nhưng em không hiểu ý đồ của người ta
Lần sửa cuối bởi nmh_bk, ngày 10-28-2013 lúc 11:21 AM.
-
-
-
-
Thành viên cấp 4

Gửi bởi
nmh_bk
mệt với con trỏ qua anh ơi... nhưng mà nó hay
L P##BoolIn // load boolin vào pointer
LAR1 // đua nó vào AR1
cho em hỏi tai sao lại mở khối DB này
L W [AR1,P#0.0] // lệnh này đưa cái gì vô ACC ạ. em đọc TL rồi ạ, mà test không thấy ACC thay đổi gì
T #DB_Number
OPN DB [#DB_Number]
//đọc data vô ACC
L D [AR1,P#2.0] // tại sao chỗ này lại load DWORD ạ. sao lại là P#2.0... em test chán rồi.. không hiểu ạ
LAR1 //
mong các anh giúp em ạ.. em có chịu đọc tài liệu, hỏi lệnh này làm gì em biết nhưng em không hiểu ý đồ của người ta
Mình k trả lời cho bạn nhưng mình sẽ có 1 số gợi ý như sau:
L P##BoolIn // load boolin vào pointer ( nghĩa là như thế nào?nếu như đầu vào bạn đựa con trỏ bắt đầu từ DB20.DBW2 chẳng hạn thì giá trị chứa trong ACC1 và AR1 có những gì?
LAR1 // đua nó vào AR1 (Đưa nó là đưa cái gì?
L W [AR1,P#0.0] // lệnh này đưa cái gì vô ACC ạ. em đọc TL rồi ạ, mà test không thấy ACC thay đổi gì (cái này thì nó load word có địa chì là nội dung chứa trong AR1)
T #DB_Number
OPN DB [#DB_Number] Mở khối DB ra để nó ghi các dữ liệu vào Db, nếu k mở thì nó biết ghi vô đâu?
L D [AR1,P#2.0] // tại sao chỗ này lại load DWORD ạ. sao lại là P#2.0 (chỗ này là nó tăng địa chỉ con trỏ lên 2word, ví dụ cau lenh truoc nó trỏ tới word10 thì giờ nó trỏ tới word để lấy giá trị chứa trong Dword12
Lần sửa cuối bởi Mechatronic_Hieu, ngày 10-28-2013 lúc 03:10 PM.
-
The Following 2 Users Say Thank You to Mechatronic_Hieu For This Useful Post:
-
Thành viên cấp 3
FUNCTION FC2 : VOID
//************************************************** *
VAR_INPUT
BYTE_NUM: INT;
START_BIT: INT;
STOP_BIT: INT;
MIEN_NHO: CHAR;
END_VAR
VAR_TEMP
TEM: INT;
END_VAR
VAR_OUTPUT
ERROR: BOOL;
END_VAR;
//************************************************** *
IF STOP_BIT < START_BIT THEN ERROR:=TRUE;
END_IF;
//************************************************** *
TEM:=START_BIT;
WHILE TEM<=STOP_BIT DO
CASE CHAR_TO_INT(MIEN_NHO) OF
77: M[BYTE_NUM,TEM]:=1;
81: Q[BYTE_NUM,TEM]:=1;
73: I[BYTE_NUM,TEM]:=1;
ELSE:
ERROR:=TRUE;
END_CASE;
TEM:=TEM+1;
END_WHILE;
//************************************************** *
END_FUNCTION
cuối cùng em cũng làm được... tại hôm trước xem video của thầy Hiếu em thây chỗ reset nhiều bit hay hay nên đi tìm hiểu con trỏ nhái lại một cái... cuối cũng cùng nhái dc 1 ít... tuy hơi cùi nhưng mà vui vì em đã biết thêm một ít nữa...
mấy anh có hàm toán, hay bài toán nào nhỏ nhỏ cho em xin với... em sẽ cố gắng làm và up lên...
mong các anh giúp đỡ vì em mới học được hơn 2 tuần thôi
-
-
Thành viên cấp 3
FUNCTION FC3 : VOID
TITLE = 'giai phuong trinh bac 2 a*x^2+b*x+c=0'
//************************************************** *
VAR_INPUT
A : REAL;
B : REAL;
C : REAL;
END_VAR
VAR_TEMP
DELTA: REAL;
END_VAR
VAR_OUTPUT
VO_NGHIEM: BOOL;
X1 : REAL;
X2 : REAL;
END_VAR;
//************************************************** *
DELTA:=B*B-4*A*C;
IF DELTA <0 THEN VO_NGHIEM:=TRUE;
ELSIF DELTA =0 THEN X1:=-B/(2*A);X2:=-B/(2*A);
ELSE
X1:=(-B+SQRT(DELTA))/(2*A);
X2:=(-B-SQRT(DELTA))/(2*A);
END_IF;
//************************************************** *
END_FUNCTION
-
-
Thành viên cấp 4
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í
Lần sửa cuối bởi Mechatronic_Hieu, ngày 10-28-2013 lúc 09:52 PM.
-
Bài viết của "Mechatronic_Hieu" đã được cám ơn bởi các thành viên:
-
Thành viên cấp 3

Gửi bởi
Mechatronic_Hieu
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
em hiểu rồi ạ. EM sẽ cố gắng. hi vọng sẽ được... em cảm ơn anh
-
-
Thành viên cấp 3

Gửi bởi
Mechatronic_Hieu
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
-
-
Thành viên cấp 4
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ỳ ý
Lần sửa cuối bởi Mechatronic_Hieu, ngày 10-28-2013 lúc 10:19 PM.
-
Bài viết của "Mechatronic_Hieu" đã được cám ơn bởi các thành viên:
Quyền viết bài
- Bạn Không thể gửi Chủ đề mới
- Bạn Không thể Gửi trả lời
- Bạn Không thể Gửi file đính kèm
- Bạn Không thể Sửa bài viết của mình
-
Nội quy - Quy định
Back to Top
Múi giờ GMT +7. Bây giờ là 08:33 PM.
Phiên bản 4.2.5
Phát triển bởi thành viên PLCVietNam®.
Đánh dấu