初學PLC梯形圖編程,應(yīng)要遵循一定的規(guī)則,并養(yǎng)成良好的習慣。下面以西門子PLC為例,簡單介紹一下PLC梯形圖編程時需要遵循的規(guī)則,希望對大家有所幫助。有一點需要說明的是,本文雖以西門子PLC為例,但這些規(guī)則在其它PLC編程時也可同樣遵守。
輸入采樣
在輸入采樣階段,PLC以掃描方式依次地讀入所有輸入狀態(tài)和數(shù)據(jù),并將它們存入I/O映象區(qū)中的相應(yīng)得單元內(nèi)。輸入采樣結(jié)束后,轉(zhuǎn)入用戶程序執(zhí)行和輸出刷新階段。在這兩個階段中,即使輸入狀態(tài)和數(shù)據(jù)發(fā)生變化,I/O映象區(qū)中的相應(yīng)單元的狀態(tài)和數(shù)據(jù)也不會改變。因此,如果輸入是脈沖信號,則該脈沖信號的寬度必須大于一個掃描周期,才能保證在任何情況下,該輸入均能被讀入。
用戶程序執(zhí)行
在用戶程序執(zhí)行階段,PLC總是按由上而下的順序依次地掃描用戶程序(梯形圖)。在掃描每一條梯形圖時,又總是先掃描梯形圖左邊的由各觸點構(gòu)成的控制線路,并按先左后右、先上后下的順序?qū)τ捎|點構(gòu)成的控制線路進行邏輯運算,然后根據(jù)邏輯運算的結(jié)果,刷新該邏輯線圈在系統(tǒng)RAM存儲區(qū)中對應(yīng)位的狀態(tài);或者刷新該輸出線圈在I/O映象區(qū)中對應(yīng)位的狀態(tài);或者確定是否要執(zhí)行該梯形圖所規(guī)定的特殊功能指令。
即,在用戶程序執(zhí)行過程中,只有輸入點在I/O映象區(qū)內(nèi)的狀態(tài)和數(shù)據(jù)不會發(fā)生變化,而其他輸出點和軟設(shè)備在I/O映象區(qū)或系統(tǒng)RAM存儲區(qū)內(nèi)的狀態(tài)和數(shù)據(jù)都有可能發(fā)生變化,而且排在上面的梯形圖,其程序執(zhí)行結(jié)果會對排在下面的凡是用到這些線圈或數(shù)據(jù)的梯形圖起作用;相反,排在下面的梯形圖,其被刷新的邏輯線圈的狀態(tài)或數(shù)據(jù)只能到下一個掃描周期才能對排在其上面的程序起作用。
輸出刷新
當掃描用戶程序結(jié)束后,PLC就進入輸出刷新階段。在此期間,CPU按照I/O映象區(qū)內(nèi)對應(yīng)的狀態(tài)和數(shù)據(jù)刷新所有的輸出鎖存電路,再經(jīng)輸出電路驅(qū)動相應(yīng)的外設(shè)。這時,才是PLC的真正輸出。
同樣的若干條梯形圖,其排列次序不同,執(zhí)行的結(jié)果也不同。另外,采用掃描用戶程序的運行結(jié)果與繼電器控制裝置的硬邏輯并行運行的結(jié)果有所區(qū)別。當然,如果掃描周期所占用的時間對整個運行來說可以忽略,那么二者之間就沒有什么區(qū)別了。
西門子plc編程中應(yīng)該注意的問題:
1.中斷程序中可以調(diào)用子程序
累加器和邏輯堆棧式的存蓄器在中斷程序和被調(diào)用的子程序中都是共用的
2.中斷程序和主程序下數(shù)據(jù)是可以共享的
中斷程序雖說是可以共享的,但是我們要注意的是中斷事件中事情異步特性的因數(shù)影響,來解決共享數(shù)據(jù)的一致性問題,在中斷事件中主程序執(zhí)行的任何一個地方都是有可能出現(xiàn)的。
3.通信接口的中斷
PLC的串行通信口是可以有梯形圖或者語句表程序控制的。通信口的這種操作模式稱為自有端口的模式。在自由的情況下,就可以用程序定義波特率,每個字節(jié)的位數(shù)等等,在執(zhí)行主程序的過程中,申請中斷,才能定義自由端口模式,利用接收和發(fā)送中斷可以簡化程序?qū)νㄐ诺目刂啤?
4.I/O中斷
I/O中斷包括上升或下降沿中斷,告訴計數(shù)器中斷和脈沖串輸出中斷。
S7-200CPU用輸入I0.0~I0.3的上升或下降產(chǎn)生了中斷,則發(fā)生的事件被輸入端子捕獲,這樣的上升沿或者下降可被用來指示當某個事件發(fā)生時必須引起注意的條件。
5.時基中斷
6.中斷的優(yōu)先級和排隊
7.中斷的限制
8.中斷程序編程步驟
當數(shù)據(jù)用規(guī)定的格式輸入后,在西門子PLC的內(nèi)部存儲器中均需要以二進制的形式存儲,二進制格式與實際數(shù)據(jù)間的關(guān)系較復雜,它常常會給程序的調(diào)試與檢查帶來困難,為了更清楚地說明數(shù)據(jù)的使用方法與存儲形式,舉例如下。
【例1】利用數(shù)據(jù)裝載指令(指令代碼L),將各種十進制、十六進制數(shù)據(jù)讀入到累加器ACCU1。
程序指令如下:
①L+27 ,/將單字長(16位)的十進制常數(shù)27讀入到累加器l中;
②L1#一1 //將雙字長(32位)的十進制常數(shù)一l讀入到累加器l中:
③L2#1010 0000 0010 0001 //將單字長(16位)的二進制數(shù)1010 0000 0010 0001讀入到累
加器l中;
④LDW#16# AOFl_BCD4 //將雙字長(32位)的十六進制常數(shù)AOFl BCD4讀入到累加器l中;
⑤L-2.5 //將雙字長(32位)的浮點數(shù)“-2.5”讀入到累加器l中(有關(guān)浮點數(shù)c1勺存
儲格式見后述)。
【例2】利用數(shù)據(jù)裝載指令(指令代碼L),將ASCII字符“END”讀入到累加器1中,并確定其執(zhí)行結(jié)果。
程序指令如下:
LfEND. ∥將ASCII字符“END”讀入到累加器l中
對照表8-5.2“ASCII代碼表”可知,E=45;N=4E D=44,所以本字符在累加器1中的執(zhí)行結(jié)果為:“454E44”。
【例3】利用數(shù)據(jù)裝載指令(指令代碼L),將定時器時間值、計數(shù)器計數(shù)值讀入到累加器1中,并確定其執(zhí)行結(jié)果。
程序指令如下:
①LT#500ms ∥將定時器時間值(500ms)讀入到累加器l中;
②LC#100 //將計數(shù)器計數(shù)值(100)讀入到累加器l中;
定時器時間值、計數(shù)器計數(shù)值以常數(shù)形式存儲,因此,累加器l的執(zhí)行結(jié)果分別為500與100。
【例4】利用數(shù)據(jù)裝載指令(指令代碼L),將2字節(jié)(16位)的常數(shù)100、20分別讀入到累加器1的高、低字節(jié)中,并確定其執(zhí)行結(jié)果。
程序指令如下:
LB# (100,20) //將2字節(jié)(16位)的常數(shù)讀入到累加器l中;
本指令與常數(shù)讀入指令“L+27”的區(qū)別在于:
L +27指令:執(zhí)行指令是將常數(shù)27轉(zhuǎn)換為二進制后存儲于累加器1,因為27=(1B) 16,所以累加器l的執(zhí)行結(jié)果為“00 1B”。常數(shù)值的范圍為0~65535(即O—FFFF)。
L B# (100,20)指令:執(zhí)行指令是將2個十進制常數(shù)轉(zhuǎn)換為二進制后,分別存儲于存儲器的高字節(jié)與低字節(jié)中,因為100=(64)16;20=(14) 16,所以累加器1的執(zhí)行結(jié)果為“64 14”。指令中括號內(nèi)的常數(shù)值的范圍為0~255(即O~FF)。
相關(guān)指令:
LB# (100,20,12,15) //將4字節(jié)(32位)的常數(shù)讀入到累加器l中。
【例5】利用數(shù)據(jù)裝載指令(指令代碼L),將4字節(jié)(32位)的地址數(shù)據(jù)10.2、M10.2分別讀入到累加器1中,并確定其執(zhí)行結(jié)果。
程序指令如下:
①LP#10.2 /,將雙字長(32位)的地址數(shù)據(jù)讀入到累加器l中;
②LP#M10.2 //將雙字長(32位)的地址數(shù)據(jù)讀入到累加器l中;
地址位(bit31):“0”指針寄存器不含地址符,地址符bit24~bit26應(yīng)為0;“l(fā)”指針寄存器含地址符,地址符由bit24~bit26指定。
地址符(bit24~bit26):地址位(bit31)為“1”時用于指定存儲器地址,地址的編碼如下:
000:地址P:
001:,地址I;
010:地址Q;
011:地址M;
100:地址DBX;
101:地址DIX;
110:地址L:
111:地址VL。
因此,在累加器1中,指令“L P#10.2”的執(zhí)行結(jié)果為“0000 0052”;指令“L P#10.2”的執(zhí)行結(jié)果為“8300 0052”。
【例6】利用數(shù)據(jù)裝載指令(指令代碼L),將日期數(shù)據(jù)2006-11-18讀入到累加器1中,并確定其執(zhí)行結(jié)果。
程序指令如下:
LD#2006_ll—l8 //將雙字長(32位)的日期讀入到累加器l中;
注意:日期在PLC中的存儲格式為表格數(shù)據(jù),且以1990年1月1日作為起點“O”;以后每天增加1,1990年1月2日為“l(fā)”。因此,2006年11月18日對應(yīng)累加器l的日期存儲數(shù)據(jù)為:6165;而2007年11月18日對應(yīng)累加器1的日期存儲數(shù)據(jù)為:6165+365= 6530。
【例7】利用數(shù)據(jù)裝載指令(指令代碼L),將時間數(shù)據(jù)13:20:33.125s讀入到累加器1中,并確定其執(zhí)行結(jié)果。
程序指令如下:
LTOD#13:20:33.125 ∥將雙字長(32位)的對閱讀入到累加器l中。
注意:時間在PLC中的存儲格式為以ms為單位的數(shù)據(jù),如:
13:20:33.125s =(13×3600 +20×60+ 33.125)s= 48033125 ms
因此,執(zhí)行本指令后累加器1的時間存儲數(shù)據(jù)為:48033125。
西門子plc編程軟件支持新款CP243-1 (6GK7 243-1-1EX01-0XE0)。通過下列改進實現(xiàn)新的互聯(lián)網(wǎng)向?qū)В褐С?BootP 和 DHCP,支持用于電子郵件服務(wù)器的登錄名和密碼。西門子plc編程軟件可進行遠程編程、診斷或數(shù)據(jù)傳輸??刂破鞴δ苤幸鸭闪薖rofibus DP Master/Slave, ProfibusFMS和LONWorks。利用web server進行監(jiān)控。儲存HTML網(wǎng)頁、圖片、PDF文件等到控制器里供通用瀏覽器查看擴展操作系統(tǒng)功能。接下來,詳細為你說下“西門子PLC編程小技巧 西門子PLC編程需注意的八個事項”
一、西門子PLC編程小技巧
1. 程序結(jié)構(gòu)一個完整的程序可分為幾個部分:【初始化程序】:一般是上電時調(diào)用一次,用來初始化設(shè)備,簡單化的初始化程序需要在初始化的時候復位整個工藝設(shè)備到零位。復雜化的初始化程序需要在這里調(diào)用設(shè)備之前的執(zhí)行信息,即延續(xù)上次停機時的執(zhí)行過程。我們一般使用SM0.0(上電時保持一個周期的ON)來使能初始化程序?!局鞒绦颉浚褐鞒绦蜻@里是用來循環(huán)執(zhí)行的,確保設(shè)備的正常工作?!咀映绦颉浚鹤映绦蛞话銥樵O(shè)備執(zhí)行的不同工藝(工序)。供主程序調(diào)用。一些重復多次使用的代碼可以編寫為子程來調(diào)用?!緝?nèi)存分配】:內(nèi)存分配一般是用來規(guī)劃PLC的內(nèi)部寄存器的區(qū)域和適用范圍,方便編程和調(diào)取,同時方便上位機的通訊使用。
2. 關(guān)于內(nèi)存分配技巧一般在編程時我們會將內(nèi)存分配為不同的區(qū)域段,例如:【VW0-VW99】:通訊動態(tài)調(diào)用區(qū)域,寫一些中建變量等。【VW100-VW199】:采集結(jié)果保存區(qū)域。溫度、壓力等?!綱W200-VW299】:通訊區(qū)域,部分為上位機讀取區(qū)域,部分為寫入?yún)^(qū)域或者可讀寫區(qū)域?!綱W2000-VW3000】:庫存儲區(qū),用于加載庫文件的存儲區(qū)域。*說明:良好的內(nèi)存規(guī)劃習慣會使得編程特別便捷和明了。同時也提高了程序的可讀性。配合自定義的變量名使用會使得整個程序的二次讀寫性更好。
3. 變量名規(guī)劃良好的變量名規(guī)劃可以高效的完成程序的編寫,例如:VD100:WD1-f(浮點型溫度值1)VD104:WD2-f(浮點型溫度值2)VB108:ZT1-b(字節(jié)型狀態(tài)值1)VW109:ZS1-w(字型轉(zhuǎn)速值1)其他物理量類似。用戶也可使用英文名縮寫等……在規(guī)劃變量時最好的方式是將相同類型的變量連續(xù)規(guī)劃。再者就是最好是以十為單位進行區(qū)域段劃分這樣調(diào)用時比較清晰明了。例如:【VD100-VD120】:WD1-f……WD5-f(多余部分可留作備用,一般都會預留備用點,一備程序后期擴展使用)【VB130-VB139】:ZT1-b……ZT10-b
二、西門子PLC編程需注意的八個事項
西門子plc編程中應(yīng)該注意的問題:
1.中斷程序中可以調(diào)用子程序
累加器和邏輯堆棧式的存蓄器在中斷程序和被調(diào)用的子程序中都是共用的
2.中斷程序和主程序下數(shù)據(jù)是可以共享的
中斷程序雖說是可以共享的,但是我們要注意的是中斷事件中事情異步特性的因數(shù)影響,來解決共享數(shù)據(jù)的一致性問題,在中斷事件中主程序執(zhí)行的任何一個地方都是有可能出現(xiàn)的。
3.通信接口的中斷
PLC的串行通信口是可以有梯形圖或者語句表程序控制的。通信口的這種操作模式稱為自有端口的模式。在自由的情況下,就可以用程序定義波特率,每個字節(jié)的位數(shù)等等,在執(zhí)行主程序的過程中,申請中斷,才能定義自由端口模式,利用接收和發(fā)送中斷可以簡化程序?qū)νㄐ诺目刂啤?
4.I/O中斷
I/O中斷包括上升或下降沿中斷,告訴計數(shù)器中斷和脈沖串輸出中斷。S7-200CPU用輸入I0.0~I0.3的上升或下降產(chǎn)生了中斷,則發(fā)生的事件被輸入端子捕獲,這樣的上升沿或者下降可被用來指示當某個事件發(fā)生時必須引起注意的條件。
5.時基中斷
6.中斷的優(yōu)先級和排隊
7.中斷的限制
8.中斷程序編程步驟