-
Thành viên cấp 3
em đang học STL nên em viết lại hàm FC 105 theo những gì em biết.... em chạy và so kết quả thấy 2 hàm chạy giống nhau
chắc là đúng. mong các anh chỉ bảo thêm
FUNCTION FC 2 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
in : INT ;
hight_lim : REAL ;
low_lim : REAL ;
bipolar : BOOL ;
END_VAR
VAR_OUTPUT
out : REAL ;
error : INT ;
END_VAR
VAR_TEMP
a : REAL ;
b : REAL ;
b1 : REAL ;
temp : DINT ;
in_temp : REAL ;
ax : REAL ;
temp1 : REAL ;
temp2 : REAL ;
a1 : REAL ;
END_VAR
BEGIN
NETWORK
TITLE =
// chuyen doi dau vao thanh kieu real
L #in;
ITD ;
T #temp;
L #temp;
DTR ;
T #in_temp;
//---------BIPOLAR=1------------------------------------------------------
//if (in_temp > 27648) {in_temp=27648;}
//elseif (in_temp <-27648) {in_temp=-27648;}
// else in_tem=in;
//-----------------------------------------------------------------------
A #bipolar;
JNB lb2;
A( ;
L #in_temp;
L 2.764800e+004;
>R ;
) ;
JNB lbb1;
L 2.764800e+004;
T #in_temp;
lbb1: A( ;
L #in_temp;
L -2.764800e+004;
<R ;
) ;
JNB lbb2;
L -2.764800e+004;
T #in_temp;
lbb2: JU bi;
//---------BIPOLAR=0-------------------------------------------------------------
//if (in_temp > 27648) {in_temp=27648;}
//elseif (in_temp <0) {in_temp=0;}
// else in_tem=in;
//--------------------------------------------------------------------------------
lb2: A( ;
L #in_temp;
L 2.764800e+004;
>R ;
) ;
JNB lbb3;
L 2.764800e+004;
T #in_temp;
lbb3: A( ;
L #in_temp;
L 0.000000e+000;
<R ;
) ;
JNB lbb4;
L 0.000000e+000;
T #in_temp;
lbb4: JU ubi;
//-------------BIPOLAR=0-----------------------------------------------------------
// phuong tinh duong thang y=a*x+b => tim a & b
//trong do b=low_lim
// a=(hight_lim-low_lim)/27648
//----------------------------------------------------------------------------------
ubi: L #low_lim;
T #b; // gan he so b
L #hight_lim;
L #low_lim;
-R ;
T #b1;
L #b1;
L 2.764800e+004;
/R ;
T #a;
JU out;
//-------------BIPOLAR=1------------------------
// phuong tinh duong thang y=a*x+b => tim a & b
//trong do b=(hight_lim +l ow_lim)/2
// a=(hight_lim-low_lim)/55296
//-----------------------------------------------
bi: L #low_lim;
L #hight_lim;
+R ;
T #temp1;
L #temp1;
L 2.000000e+000;
/R ;
T #b;
L #hight_lim;
L #low_lim;
-R ;
T #a1;
L #a1;
L 5.529600e+004;
/R ;
T #a;
//-------------------------------------------------------------------------
//tinh toan dau ra
out: L #in_temp;
L #a;
*R ;
T #ax;
L #ax;
L #b;
+R ;
T #out;
NOP 0;
END_FUNCTION
-
-
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 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
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

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
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
-
-
Mình cũng làm 3 năm rồi nói thật chỉ những chương trình khi viết cho khách hành mà muốn dấu công nghệ thì mình mới viết theo kiều " Con chó"
chứ viết mà cho anh em tham khảo và chỉ giáo thì mệt lắm
-
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à 04:36 AM.
Phiên bản 4.2.5
Phát triển bởi thành viên PLCVietNam®.
Đánh dấu