-
Thành viên cấp 3
hàm copy khối data dựa trên hàm sfc 20 làm việc với 3 vùng nhớ I Q M
em dã chạy và thành công, copy tốt, mong các anh cho y kiến
FUNCTION "copy" : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
SRC_BLK : ANY ;
DST_BLK : ANY ;
END_VAR
VAR_TEMP
TEMP0 : BYTE ;
kieudulieu_1 : BYTE ; //kieu du lieu
n_1 : WORD ; //so byte muon copy
db_num_1 : WORD ; //khoi db
TEMP1 : BYTE ;
vungnho_1 : BYTE ;
kieudulieu_2 : BYTE ;
n_2 : WORD ;
db_num_2 : WORD ;
vungnho_2 : BYTE ;
index : BYTE ;
cont : BYTE ;
scr : DINT ; //dong vai tro pointer scr
dst : DINT ; //dong vai tro pointer dst
temp_data : BYTE ;
TEMP2 : BYTE ;
END_VAR
BEGIN
NETWORK
TITLE =
// xac dinh kieu du lieu, so byte muon copy, khoi db so___, hoac vung nho
L P##SRC_BLK;
LAR1 ;
L B [AR1,P#1.0];
T #kieudulieu_1;
L W [AR1,P#2.0];
T #n_1;
L W [AR1,P#4.0];
T #db_num_1;
L B [AR1,P#6.0];
T #vungnho_1;
L D [AR1,P#6.0];
T #scr;
// xac dinh kieu du lieu,cac thong so cua noi muon coppy den
// kieu du lieu|so byte|khoi dbso___| hoac vung nho
L P##DST_BLK;
LAR2 ;
L B [AR2,P#1.0];
T #kieudulieu_2;
L W [AR2,P#2.0];
T #n_2;
L W [AR2,P#4.0];
T #db_num_2;
L B [AR2,P#6.0];
T #vungnho_2;
L D [AR2,P#6.0];
T #dst;
//-----------------------------------------------------------------------------------
// if(n2>n1) {index=n1
//elseif(n1>n2){index=m2;}
// else index=n1;
//-----------------------------------------------------------------------------------
A( ;
L #n_2;
L #n_1;
>I ;
) ;
JNB lbb1;
L #n_1;
T #index;
JU next;
lbb1: A( ;
L #n_2;
L #n_1;
<I ;
) ;
JNB lbb2;
L #n_2;
T #index;
JN next;
lbb2: L #n_1;
T #index;
//---------------------------------------------------------------------------------------
//xac dinh kieu du lieu
next: L #vungnho_1;
L W#16#F;
AW ;
T #vungnho_1;
L #vungnho_1;
L 1;
-I ;
T #vungnho_1;
L #vungnho_2;
L W#16#F;
AW ;
T #vungnho_2;
L #vungnho_2;
L 1;
-I ;
T #vungnho_2;
//---------------------------------------------------------------------------------------
L #scr;
LAR1 ;
L #dst;
LAR2 ;
L #index;
lap: T #cont;
//---------coppy data--------------
L #vungnho_1;
JL err;
JU lb_i;
JU lb_q;
JU lb_m;
err: JU exit;
lb_i: L IB [AR1,P#0.0];
T #temp_data;
JU lbb;
lb_q: L QB [AR1,P#0.0];
T #temp_data;
JU lbb;
lb_m: L MB [AR1,P#0.0];
T #temp_data;
JU lbb;
//----------------------------------
lbb: L #vungnho_2;
JL errr;
JU lbbi;
JU lbbq;
JU lbbm;
errr: JU exit;
lbbi: L #temp_data;
T IB [AR2,P#0.0];
JU lbbb;
lbbq: L #temp_data;
T QB [AR2,P#0.0];
JU lbbb;
lbbm: L #temp_data;
T MB [AR2,P#0.0];
JU lbbb;
//------------------------------------
lbbb: +AR1 P#1.0;
+AR2 P#1.0;
L #cont;
LOOP lap;
exit: NOP 0;
//------------------------------------------------------------------------------
END_FUNCTION
-
-
Thành viên cấp 3
hàm set nhiều bít liên tiếp
FUNCTION "set bit" : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
IN : POINTER ;
N : INT ;
END_VAR
VAR_TEMP
cont : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
L P##IN;
LAR1 ;
L D [AR1,P#2.0];
LAR1 ;
A( ;
L #N;
L 0;
<>I ;
) ;
JNB exit;
L #N;
lap: T #cont;
S [AR1,P#0.0]; // doi S=>R =>reset
+AR1 P#0.1;
L #cont;
LOOP lap;
exit: NOP 0;
END_FUNCTION
-
-
Thành viên Mới

Gửi bởi
nmh_bk
hàm set nhiều bít liên tiếp
FUNCTION "set bit" : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
IN : POINTER ;
N : INT ;
END_VAR
VAR_TEMP
cont : INT ;
END_VAR
BEGIN
NETWORK
TITLE =
L P##IN;
LAR1 ;
L D [AR1,P#2.0];
LAR1 ;
A( ;
L #N;
L 0;
<>I ;
) ;
JNB exit;
L #N;
lap: T #cont;
S [AR1,P#0.0]; // doi S=>R =>reset
+AR1 P#0.1;
L #cont;
LOOP lap;
exit: NOP 0;
END_FUNCTION
anh nmh_bk giải thích giúp em mấy dòng lệnh cuối được không , em đọc mãi cũng không hiểu
-
-
Thành viên cấp 3

Gửi bởi
thienan
anh nmh_bk giải thích giúp em mấy dòng lệnh cuối được không , em đọc mãi cũng không hiểu
có gì đâu mà bạn k hiểu...
vòng lặp giống for .. next ấy, đó là set nhiêu bit, muôn đời thành hàm reset nhiều bit thì S=>R... thế thôi
-
-
Thành viên cấp 3
truyền time tu hmi xuống plc: độ phân giải giây, 10ms
định dạng xxhyymzzs ví dụ truyền 2h46m30s tu hmi xuống PLC ta nhập trên HMI như sau 02h46m30s tag kiểu string ví dụ địa chỉ bắt đầu mb100---> trong chương trình PLC nhập p#m100.0 (địa chỉ bắt đầu của tag kiểu string trên hmi) ngõ ra dang word
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
time_add : POINTER ; //dia chi bat dau cua chuoi timer
END_VAR
VAR_OUTPUT
timer_out : WORD ;
END_VAR
VAR_TEMP
TEMP0 : DWORD ;
gio_giay : INT ;
phut_giay : INT ;
giay : INT ;
TEMP1 : INT ;
TEMP2 : INT ;
TEMP3 : INT ;
TEMP4 : INT ;
byte0 : BYTE ;
byte1 : BYTE ;
byte3 : BYTE ;
byte4 : BYTE ;
byte6 : BYTE ;
byte7 : BYTE ;
END_VAR
BEGIN
NETWORK
TITLE =
L P##time_add;
LAR1 ;
L D [AR1,P#2.0];
T #TEMP0;
L #TEMP0;
LAR1 ;
A( ;
L B [AR1,P#2.0];
L 47;
>I ;
) ;
JNB exit;
//-----------------------------------------------
L B [AR1,P#2.0];
L 48;
-I ;
T #byte0;
L #byte0;
L 10;
*I ;
T #byte0;
L B [AR1,P#3.0];
L 48;
-I ;
T #byte1;
L #byte0;
L #byte1;
+I ;
T #gio_giay;
//-------------------------------------------------
L B [AR1,P#5.0];
L 48;
-I ;
T #byte3;
L #byte3;
L 10;
*I ;
T #byte3;
L B [AR1,P#6.0];
L 48;
-I ;
T #byte4;
L #byte3;
L #byte4;
+I ;
T #phut_giay;
//-------------------------------------------------
L B [AR1,P#8.0];
L 48;
-I ;
T #byte6;
L #byte6;
L 10;
*I ;
T #byte6;
L B [AR1,P#9.0];
L 48;
-I ;
T #byte7;
L #byte6;
L #byte7;
+I ;
T #giay;
//-------------------------------------------------
L #gio_giay;
L 3600;
*I ;
T #gio_giay;
//-----------------------------------------------
L #phut_giay; //lay phut
L 60;
*I ;
T #phut_giay;
//-----------------------------------------------
L #gio_giay; //lay giay
L #phut_giay;
+I ;
T #gio_giay;
L #giay;
L #gio_giay;
+I ;
T #giay;
//----------------------------------------------
L #giay;
L 1000;
/I ;
T #TEMP1;
L #giay;
L 1000;
MOD ;
T #giay;
L #giay;
L 100;
/I ;
T #TEMP2;
L #giay;
L 100;
MOD ;
T #giay;
L #giay;
L 10;
/I ;
T #TEMP3;
L #giay;
L 10;
MOD ;
T #giay;
L #TEMP1;
SLD 12;
T #TEMP1;
L #TEMP2;
SLD 8;
T #TEMP2;
L #TEMP3;
SLD 4;
T #TEMP3;
L #TEMP1;
L #TEMP2;
+I ;
T #TEMP4;
L #TEMP4;
L #TEMP3;
+I ;
T #TEMP4;
L #TEMP4;
L #giay;
+I ;
T #giay;
//---------------------------------------------------
A( ;
L #giay;
L W#16#999;
<D ;
) ;
JNB nhan;
L #giay;
L W#16#2000;
OW ;
T #giay;
JC exit;
nhan: L #giay;
SRD 4;
T #giay;
L #giay;
L W#16#3000;
OW ;
T #giay;
exit: L #giay;
T #timer_out;
BEU ;
END_FUNCTION
Lần sửa cuối bởi nmh_bk, ngày 01-24-2014 lúc 07:13 PM.
-
Bài viết của "nmh_bk" đã được cám ơn bởi các thành viên:
-
Không cần phải chỉ nữa đâu
-
-
Thành viên cấp 3

Gửi bởi
hungblack
Không cần phải chỉ nữa đâu
em mới tìm hiểu PLC chắc được gần 3 tháng thôi, mong anh chỉ bảo thêm
-
-
Thành viên cấp 4

Gửi bởi
nmh_bk
em mới tìm hiểu PLC chắc được gần 3 tháng thôi, mong anh chỉ bảo thêm
Khi nào chỉ lại mình 1 ít nhá
-
-
Thành viên cấp 4

Gửi bởi
hungblack
Không cần phải chỉ nữa đâu
Cùng ý kiến với anh này
-
-
Thành viên cấp 4
Cho mình thỉnh giáo với, 3 tháng của bạn bằng 3 năm của mình, cao thủ rồi, phải thỉnh giáo thôi
-
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à 11:52 PM.
Phiên bản 4.2.5
Phát triển bởi thành viên PLCVietNam®.
Đánh dấu