{心中有空間,夢想就有可能}
{西門子與客戶攜手,讓關(guān)鍵所在,逐一實現(xiàn)}
聯(lián) 系 人: 黃勇《黃工》 24小時聯(lián)系手機(jī): 13701633515
直線銷售 電 話: 021-31660605 在 線 商 務(wù) QQ: 77956468
單位:臺 產(chǎn)品單價:電議
供貨數(shù)量:不限 最小定量:1
包裝說明:齊全 產(chǎn)品規(guī)格:全新原裝
1.程序家族有哪些成員?
PLC的控制程序一般由主程序、子程序和中斷程序組成。西門子的S7-300/400將子程序分為功能(Function,或稱為函數(shù))和功能塊(Function Block)。
在每一個掃描循環(huán)周期,CPU都要調(diào)用一次主程序,用戶程序必須有一個并且只能有一個主程序。小型控制系統(tǒng)可以只有主程序。
中斷程序用于快速響應(yīng)中斷事件。在中斷事件發(fā)生時,CPU將停止執(zhí)行當(dāng)時正在處理的程序或任務(wù),去執(zhí)行用戶編寫的中斷程序。執(zhí)行完中斷程序后,繼續(xù)執(zhí)行被暫停執(zhí)行的程序或任務(wù)。
2.哪些情況需要使用子程序?
當(dāng)系統(tǒng)規(guī)模很大、控制要求復(fù)雜時,如果將全部控制任務(wù)放在主程序中,主程序?qū)浅?fù)雜,既難以調(diào)試,也難以閱讀。使用子程序可以將程序分成容易管理的小塊,使程序結(jié)構(gòu)簡單清晰,易于調(diào)試、查錯和維護(hù)。
子程序也可以用于需要多次反復(fù)執(zhí)行相同任務(wù)的地方,只需要編寫一次子程序,別的程序在需要的時候多次調(diào)用它,而無需重寫該程序。
3.怎樣調(diào)用子程序?
主程序可以調(diào)用子程序,子程序也可以嵌套調(diào)用別的子程序。嵌套調(diào)用的層數(shù)是有限制的,例如S7-200的最大嵌套深度為8級。
執(zhí)行完子程序后,返回調(diào)用它的程序中的調(diào)用指令的下一條指令。
4.每個掃描周期都會執(zhí)行子程序嗎?
子程序的調(diào)用可以是有條件的,在被調(diào)用期間,每個掃描周期都要執(zhí)行一次被調(diào)用的子程序。調(diào)用條件不滿足時不會執(zhí)行子程序中的指令,因此使用子程序可以減少掃描循環(huán)時間。
5.停止調(diào)用子程序后,子程序中的線圈處于什么狀態(tài)?
停止調(diào)用子程序后,不再執(zhí)行子程序中的指令。子程序中線圈對應(yīng)的編程元件如果沒有受到別的程序的控制,將保持子程序最后一次執(zhí)行后的狀態(tài)不變。即使控制這些線圈的觸點的狀態(tài)變化,該線圈對應(yīng)的元件的狀態(tài)也不會變化,因為這時根本就沒有執(zhí)行子程序中的指令。
6.怎樣實現(xiàn)子程序的無條件調(diào)用?
有的PLC的子程序調(diào)用指令不能直接接到左側(cè)的垂直“電源”線上,需要通過觸點電路來控制是否調(diào)用子程序,即子程序的調(diào)用是有條件的。可以用一直為ON的特殊位元件(例如S7-200的SM0.0或FX系列的M8000)的常開觸點來實現(xiàn)子程序的無條件調(diào)用。
不同品牌的PLC的子程序大致可以分為兩種,一種子程序沒有輸入、輸出參數(shù)和局部變量,另一種則有。
1.什么是全局變量和局部變量?
以西門子的S7-200為例,輸入I、輸出Q、變量存儲器V、內(nèi)部存儲器位M、定時器T、計數(shù)器C等屬于全局變量,可以在符號表中為全局變量定義符號名。
程序組織單元(Program Organizational Unit)簡稱為POU,包括主程序、子程序和中斷程序。每個POU均有自己的64字節(jié)局部變量,局部變量用L(Local)來表示,局部變量只能在它所在的POU中使用。與此相反,全局變量可以在各POU中使用。
2.局部變量有哪些類型?
子程序可以使用下列局部變量:
1) TEMP (臨時變量)是暫時保存在局部數(shù)據(jù)區(qū)中的變量。只有在執(zhí)行該POU時,定義的臨時變量才被使用,POU執(zhí)行完后,不再保存臨時變量的數(shù)值。主程序和中斷程序的局部變量表中只有TEMP變量。
2) IN(輸入?yún)?shù))由調(diào)用它的POU提供的傳入子程序的輸入?yún)?shù)。
3) OUT(輸出參數(shù))是子程序的執(zhí)行結(jié)果,它被返回給調(diào)用它的POU。
4) IN_OUT(輸入_輸出參數(shù))的初始值由調(diào)用它的POU傳送給子程序,并用同一變量將子程序的執(zhí)行結(jié)果返回給調(diào)用它的POU。
主程序和中斷程序的局部變量表中只有臨時變量TEMP。
3.子程序的輸入、輸出參數(shù)有什么作用?
具有輸入、輸出參數(shù)和局部變量的子程序易于實現(xiàn)結(jié)構(gòu)化編程,對于長期生產(chǎn)同類設(shè)備或生產(chǎn)線的廠家尤為有用。編程人員為設(shè)備的各部件或工藝功能編寫了大量的通用的子程序。即使不知道子程序的內(nèi)部代碼,只要知道子程序的功能和輸入、輸出參數(shù)的意義,就可以用它們快速“組裝”出滿足不同的用戶要求的控制程序。就好像可以用數(shù)字集成電路芯片組成復(fù)雜的數(shù)字電路一樣。
如果子程序沒有輸入、輸出參數(shù),這種子程序沒有明確的軟件接口,使用起來很不方便。
4.局部變量有什么優(yōu)點?
1) 子程序如果沒有局部變量,它和調(diào)用它的程序之間只能通過全局變量來交換數(shù)據(jù),子程序內(nèi)部也只能使用全局變量。將它移植到別的項目時,需要對各POU使用的全局變量作統(tǒng)一安排,以保證不會出現(xiàn)地址沖突。當(dāng)程序很復(fù)雜,子程序很多時,這種地址分配是很花時間的。
如果子程序有局部變量,并且在子程序中只使用局部變量,不使用全局變量,因為與其他POU沒有地址沖突,不作任何改動,就可以將子程序移植到別的項目中去。
為了減少移植子程序的工作量,在子程序中應(yīng)盡量避免使用全局變量和全局符號。
2) 如果使用局部變量表中的臨時變量(TEMP),同一片物理存儲器可以在不同的程序中重復(fù)使用。
下面以S7-200為例,介紹子程序的編程和調(diào)用的過程。
1.創(chuàng)建子程序
生成項目時,自動生成一個子程序。打開程序編輯器,執(zhí)行“編輯”菜單中的命令“插入”→“子程序”,將自動生成和打開新的子程序。
2.生成局部變量
名為“模擬量計算”的子程序如下圖所示,在該子程序的局部變量表中,定義了3個輸入(IN)參數(shù),一個輸出(OUT)參數(shù),和名為“暫存1”的臨時(TEMP)變量。局部變量表最左邊的一列是自動分配的每個變量在局部存儲器(L)中的地址。
3.編寫子程序的梯形圖
局部變量表的下面是程序區(qū)(見上圖),輸入?yún)?shù)“轉(zhuǎn)換值”是來自模擬量輸入模塊的與模擬量成正比的轉(zhuǎn)換值,輸出參數(shù)“模擬值”是計算出的對應(yīng)的模擬量(例如壓力、溫度等)的工程值。子程序中變量名稱前的“#”表示該變量是局部變量,它是編程軟件自動添加的,輸入局部變量時不用輸入“#”號。特殊存儲器位SM0.0的常開觸點總是閉合。
4.子程序的調(diào)用
可以在主程序、其他子程序或中斷程序中調(diào)用子程序,調(diào)用子程序時將執(zhí)行子程序中的指令,直至子程序結(jié)束,然后返回調(diào)用它的程序中該子程序調(diào)用指令的下一條指令之處。
創(chuàng)建子程序后,在上圖左邊指令樹最下面的“調(diào)用子程序”文件夾中自動生成剛創(chuàng)建的子程序“模擬量計算”對應(yīng)的圖標(biāo)。
在梯形圖程序中插入子程序調(diào)用指令時,首先打開主程序,顯示出需要調(diào)用子程序的網(wǎng)絡(luò)。打開指令樹最下面的“調(diào)用子程序”文件夾,用鼠標(biāo)左鍵按住需要調(diào)用的子程序圖標(biāo),將它“拖”到程序編輯器中需要的位置。放開左鍵,子程序塊便被放置在該位置。
子程序方框中左邊的“轉(zhuǎn)換值”等是在子程序“模擬量計算”的變量聲明表中定義的輸入?yún)?shù),右邊的“模擬值”是輸出參數(shù)。它們被稱為子程序的形式參數(shù),簡稱為形參,形參在子程序內(nèi)部的程序中使用。調(diào)用子程序時,需要為每個形參指定實際的參數(shù)(簡稱為實參),例如為形參“轉(zhuǎn)換值”指定的實參為模擬量輸入字AIW2(見上圖)。
子程序調(diào)用指令中的實參的有效操作數(shù)為存儲器地址、常量、全局符號和調(diào)用指令所在的POU中的局部變量,不能指定被調(diào)用子程序中的局部變量。
CPU調(diào)用子程序時,輸入?yún)?shù)被復(fù)制到子程序的局部存儲器,子程序執(zhí)行完后,從局部存儲器復(fù)制輸出參數(shù)到指定的輸出參數(shù)地址。
一、 S7-200PLC內(nèi)部RS485接口電路圖:電路圖見附件
圖中R1、R2是阻值為10歐的普通電阻,其作用是防止RS485信號D+和D-短路時產(chǎn)生過電流燒壞芯片,Z1、Z2是鉗制電壓為6V,最大電流為10A的齊納二極管,24V電源和5V電源共地未經(jīng)隔離,當(dāng)D+或D-線上有共模干擾電壓灌入時,由橋式整流電路和Z1、Z2可將共模電壓鉗制在±6.7V,從而保護(hù)RS485芯片SN75176(RS485芯片的允許共模輸入電壓范圍為:-7V~+12V)。該保護(hù)電路能承受共模干擾電壓功率為60W,保護(hù)電路和芯片內(nèi)部沒有防靜電措施。
二、常發(fā)生的故障現(xiàn)象分析:
當(dāng)PLC的RS485口經(jīng)非隔離的PC/PPI電纜與電腦連接、PLC與PLC之間連接或PLC與變頻器、觸摸屏等通信時時有通信口損壞現(xiàn)象發(fā)生,較常見的損壞情況如下:
●R1或R2被燒斷,Z1、Z1和SN75176完好。這是由于有較大的瞬態(tài)干擾電流經(jīng)R1或R2、橋式整流、Z1或Z1到地,Z1、Z2能承受最大10A電流的沖擊,而該電流在R1或R2上產(chǎn)生的瞬態(tài)功率為:102×10=1000W,當(dāng)然會將其燒斷。
●SN75176損壞,R1、R2和Z1、Z2完好。這主要可能是受到靜電沖擊或瞬態(tài)過電壓速度快于Z1、Z2的動作速度造成的,靜電無處不在,僅人體模式也會產(chǎn)生±15kV的靜電。
●Z1或Z2、SN75176損壞,R1和R2完好。這可能是受到高電壓低電流的瞬態(tài)干擾電壓將Z1或Z2和SN75176擊穿,由于電流較小和發(fā)生時間較短因而R1、R2不至于發(fā)熱燒斷。
由以上分析得知PLC接口損壞的主要原因是由于瞬態(tài)過電壓和靜電造成,產(chǎn)生瞬態(tài)過電壓和靜電的原因很多也較復(fù)雜,如由于PLC內(nèi)部24V電源和5V電源共地,24V電源的輸出端子L+、M為其它設(shè)備混合供電可能導(dǎo)致地電位變化,從而造成共模電壓超出允許范圍。所以EIA-485標(biāo)準(zhǔn)要求將各個RS485接口的信號地用一條低阻值導(dǎo)線連接在一起以保證各節(jié)點的地電位相等,消除地線環(huán)流!
當(dāng)帶電插拔未隔離的連接電纜時,由于兩端電位不相等電路中又存在諸多電感、電容之類的器件,插拔瞬間必然產(chǎn)生瞬態(tài)過電壓或過電流。
連接在RS485總線上的其它設(shè)備產(chǎn)生的瞬態(tài)過電壓或過電流同樣會流入到PLC,總線上連接的設(shè)備站點數(shù)越多,產(chǎn)生瞬態(tài)過電壓的因素也越多。
當(dāng)通信線路較長或有室外架空線時,雷電必然會在線路上造成過電壓,其能量往往是巨大的,常有用戶沮喪地說:“聯(lián)網(wǎng)的幾十臺PLC全部遭打壞了!”。
三、 解決辦法:
1、從PLC內(nèi)部考慮:
●采用隔離的DC/DC將24V電源和5V電源隔離,分析了三菱、歐姆龍、施耐德PLC以及西門子的PROFIBUS接口均是如此。
●選用帶靜電保護(hù)、過熱保護(hù)、輸入失效保護(hù)等保護(hù)措施完善的高擋次RS485芯片,如:SN65HVD1176D、MAX3468ESA等,這些芯片價格一般在十幾元至幾十元,而SN75176的價格僅為1.5元。
●采用響應(yīng)速度更快、承受瞬態(tài)功率更大的新型保護(hù)器件TVS或BL浪涌吸收器,如P6KE6.8CA的鉗制電壓為6.8V,承受瞬態(tài)功率為500W,BL器件則可抗擊4000A以上大電流沖擊。
●R1和R2采用正溫度系數(shù)的自恢復(fù)保險PTC,如JK60-010,正常情況下的電阻值為5歐,并不影響正常通信,當(dāng)受到浪涌沖擊時,大電流流過PTC和保護(hù)器件TVS(或BL),PTC的電阻值將驟然增大,使浪涌電流迅速減小。
2、從PLC外部考慮:
● 使用隔離的PC/PPI電纜,盡量不用廉價的非隔離電纜(特別是在工業(yè)現(xiàn)場)。西門子公司早期出產(chǎn)的PC/PPI電纜(6ES7 901-3BF00-0XA0)是不隔離的,現(xiàn)在也改成隔離的電纜了!
● PLC的RS485口聯(lián)網(wǎng)時采用隔離的總線連接器.
● 與PLC聯(lián)網(wǎng)的第三方設(shè)備,如變頻器、觸摸屏等的RS485口均使用RS485隔離器BH-485G進(jìn)行隔離,這樣各RS485節(jié)點之間就無“電”的聯(lián)系,也無地線環(huán)流產(chǎn)生,即使某個節(jié)點損壞也不會連帶其它節(jié)點損壞。
● RS485通信線采用PROFIBUS總線專用屏蔽電纜,保證屏蔽層接到每臺設(shè)備的外殼并最后接大地。
● 對于有架空線的系統(tǒng),總線上最好設(shè)置專門的防雷擊設(shè)施。
找到了解決S7-200通訊口損壞的辦法了
在我們單位眾多的S7-200PLC中,不時有通訊口損壞,致使不能連接PC或不能進(jìn)行通訊,在對PLC解體時發(fā)現(xiàn),在PLC通訊口出有一芯片--75176,這就是通訊接口芯片,在芯片周圍有5個FB,標(biāo)識FB1~FB5,這其實就是5個保險,在通訊連不上時,一般就是這5個保險中的某個燒毀了,可用同等型號的保險代替,也可用導(dǎo)線直接短路。一般就能解決問題。不過更換時要注意,由于元件時貼片的,十分小,空間也小,所以焊接時注意不要短路。
對于工控新人來說,使用STEP7編程時,首先需了解OB/FC/FB/DB等塊的功能和作用,待掌握這些塊后再進(jìn)行編程就“輕而易舉”了。
在熱線上經(jīng)常遇到用戶咨詢FB的接口變量類型IN_OUT、STAT、TEMP在使用上有何區(qū)別,以下通過一個簡單的例子進(jìn)行說明。運用FB塊編程計算公式:(A+B) * C = D,在程序中需要通過一個中間變量(例如其變量名定義為“TEMP_value”)傳遞“A”和“B”相加的結(jié)果,然后再乘以“C”得到最終結(jié)果“D”;將中間變量“TEMP_value”分別定義為IN_OUT、STAT或TEMP類型后做如下測試。
首先創(chuàng)建FB1,在IN接口類型中新建A、B、C 三個變量,數(shù)據(jù)類型INT;在OUT接口類型中新建D 變量,數(shù)據(jù)類型INT;在OB1中調(diào)用FB1,并生成對應(yīng)的背景DB塊DB1。
情形一,將中間變量“TEMP_value”定義為IN_OUT類型時,接口定義及程序如圖1:
圖1 中間變量“TEMP_value”定義為IN_OUT類型
下載到CPU中執(zhí)行程序監(jiān)控,在調(diào)用FB1的接口參數(shù)處和背景DB塊中都可以監(jiān)控到變量“A”和“B”相加的中間結(jié)果“TEMP_value”,如圖2所示。
圖2 中間變量“TEMP_value”定義為IN_OUT時的在線數(shù)據(jù)
情形二,將中間變量“TEMP_value”定義為STAT類型時,接口定義及程序如圖3:
圖3 中間變量“TEMP_value”定義為STAT類型
下載到CPU中執(zhí)行程序監(jiān)控,僅能在其背景DB塊中監(jiān)控到變量“A”和“B”相加的中間結(jié)果“TEMP_value”的值,而在調(diào)用FB1的接口參數(shù)處無該中間變量,如圖4所示。
圖4 中間變量“TEMP_value”定義為STAT時的在線數(shù)據(jù)
情形三,將中間變量“TEMP_value”定義為TEMP類型時,接口定義及程序如圖5:
圖5 中間變量“TEMP_value”定義為TEMP類型
下載到CPU中執(zhí)行程序監(jiān)控,既不能在其背景DB塊中監(jiān)控到變量“A”和“B”相加的中間結(jié)果“TEMP_value”的值,也不能在調(diào)用FB1的接口參數(shù)處看到該中間變量,如圖6所示。
圖6 中間變量“TEMP_value”定義為TEMP時的在線數(shù)據(jù)
對于同一個中間變量,在FB中定義為不同的參數(shù)類型時,其接口參數(shù)和對應(yīng)的背景數(shù)據(jù)塊的顯示都不盡相同。所以在不同的需求下可自行定義中間變量的類型,以滿足不同的需求。西門子創(chuàng)新工業(yè)之道是“知其道,用其妙”,編程也不例外,知“FB接口類型”之道,用其妙。