倍福BECKHOFF PLC:自动化编程入门1
文章目錄
一、編程基礎 - 掌握核心概念,降低入門難度
1.1 TwinCAT2 編程入口 - POUs(Program Organization Unit)
1、PRG
2、FUNCTION
3、FB
4、其他入口
1.2 常用功能塊簡介
1.3 程序編寫實例 - 流水燈
1.4 附錄
一、編程基礎 - 掌握核心概念,降低入門難度
我初學倍福PLC,學習過程的一些總結:
1、熟系編程環境,多操作幾次就熟系了。
2、了解一些功能塊,資料主要在官方幫助系統中查找。
3、理解程序執行流,從代碼第一行開始一步一步執行,再套上周期循環,簡單來說 在PLC中寫代碼就是在周期中斷服務函數中寫代碼。
4、還是與理解程序流有關系,就是plc程序的機制是不斷循環的(周期掃描機制),在PLC中要實現順序控制/狀態機,有固定的套路,有的廠家會提供順序控制功能塊,使用倍福plc + st語言編程,就借助于case語法實現。
1.1 TwinCAT2 編程入口 - POUs(Program Organization Unit)
新建POU程序文件(Ctrl+N / File>New POU)
界面區域功能
1、PRG
新建PRG
ACT子程序
2、FUNCTION
可重入問題(如何開啟多線程)
3、FB
類似高級語言的類
4、其他入口
Data Types(數據類型)
Visu(可視化)
Resources(資源)
1.2 常用功能塊簡介
R_TRIG/F_TRIG
TON/FON
CASE … END_CASE
1.3 程序編寫實例 - 流水燈
在我看來,理解程序的執行過程是編程的重要一步。
PLC程序執行流的常見描述如下:
采用不斷循環的順序掃描工作方式,從上往下,從左往右,每一次掃描所用的時間稱為掃描周期或工作周期。
通過資料查詢,經常會看到如下圖所示的執行順序解釋。這對不熟悉梯形圖語言設計意圖,又習慣文本程序編程的人來說,理解PLC程序如何被執行就比較困難。
習慣文本語言編程(比如用C語言來描述plc程序的執行流),可以簡單的這樣理解:PLC程序 一直是在死循環中的。
如果了解嵌入式,可以用中斷服務函數更準確的模擬PLC執行機制(比起c語言用死循環模擬,中斷的方式可以表達 plc程序是在被周期性循環執行)。如果你倍福plc開發環境中,設置PLC task (掃描周期)是10ms,那么PLC就能做到程序執行一次的時間一定在10ms(掃描時間)以內。(那如果在PLC里面寫一個死循環呢? 程序當然會卡住吧(系統利用率會飆升))。
所以,在PLC的循環機制的作用下,一個典型的一步步執行的加工流程怎么寫出來?舉個栗子,讓變量i從1一步步的變到10000
寫法1:執行的效果的i始終是10000,看不出來從1變化到10000的過程。這種連續賦值的思路,相當于只寫了最后一句 i:=10000;
那如果用延時功能塊TON呢?結果是可以實現流程控制的效果,但如果流程很長,TON功能快會越用越多。。。(這里,需要了解TON延時功能塊);PLC實現流程控制的主流方式肯定不是這樣的,借助TON實現流程控制太繁瑣了。通常,借助ST語言的CASE OF 語法,來實現流程步數的控制。
i :INT;
tDelay1 :TON;
tDelay2 :TON;
tDelay3 :TON;
tDelay4 :TON;
tDelay5 :TON;
START : BOOL; (輕叩按鈕,tap,非自鎖)
tDelay1(IN:=START,PT:=t#2s,ET:=)
IF tDelay1.Q THEN
i:=1
tDelay1(IN:=FLASE,PT:=t#2s,ET:=)
tDelay2(IN:=TRUE,PT:=t#2s,ET:=)
END
if tDelay2.Q THEN
i:=10
tDelay2(IN:=FLASE,PT:=t#2s,ET:=)
tDelay3(IN:=TRUE,PT:=t#2s,ET:=)
END
if tDelay3.Q THEN
i:=100
tDelay3(IN:=FLASE,PT:=t#2s,ET:=)
tDelay4(IN:=TRUE,PT:=t#2s,ET:=)
END
if tDelay4.Q THEN
i:=1000
tDelay4(IN:=FLASE,PT:=t#2s,ET:=)
tDelay5(IN:=TRUE,PT:=t#2s,ET:=)
END
if tDelay5.Q THEN
i:=10000
tDelay5(IN:=FLASE,PT:=t#2s,ET:=)
END
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
實現流程順序控制 - 流水燈。借助CASE OF語法(類似與C語言的 switch case) + 信號上升沿功能塊,
rt_Execute(CLK:=Execute , Q=>Execute_Q);
IF rt_Execute.Q THEN
iState:=0;
END_IF
rt_Restart(CLK:=Restart , Q=>);
IF rt_Restart.Q THEN
iState:=iStateSave;
END_IF
rt_STOP(CLK:=STOP , Q=>);
IF rt_STOP.Q THEN
iStateSave:=iState;
iState:=-1;
END_IF
rt_RESET(CLK:=RESET , Q=>);
IF rt_RESET.Q THEN
iState:=1000;
END_IF
CASE iState OF
-1:
;
0:
el2809[0]:=TRUE;
iState := 1;
1:
el2809[1]:=TRUE;
iState := 2;
2:
el2809[2]:=TRUE;
iState := 3;
3:
el2809[3]:=TRUE;
iState := 4;
4:
el2809[4]:=TRUE;
iState := 5;
5:
el2809[0]:=FALSE;
el2809[1]:=FALSE;
el2809[2]:=FALSE;
el2809[3]:=FALSE;
el2809[4]:=FALSE;
iState := 0;
1000:
el2809[0]:=FALSE;
el2809[1]:=FALSE;
el2809[2]:=FALSE;
el2809[3]:=FALSE;
el2809[4]:=FALSE;
END_CASE
1.4 附錄
倍福幫助系統
官方PLC編程手冊
IEC61131-3 代碼風格(編程約定)
常見數據類型
文件后綴名解釋
總結
以上是生活随笔為你收集整理的倍福BECKHOFF PLC:自动化编程入门1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jmeter中重定向多个正则表达式_20
- 下一篇: html 颜色在线取色器