1 引言
可編程控制器(PLC)作為繼電控制盤的替代物,以極高的可靠性和應用方便等特點,成為當今用途最為廣泛的工業控制器。現在它的應用已突破了當初邏輯控制的場合,深入到過程控制、位置控制、網絡通訊等工程領域。本文根據某工程的實際需要,以三菱PLC為模擬目標,提出了一種以單片機構建PLC系統的思想

2 系">

      技術頻道

      基于單片機的PLC系統的實現

      1 引言
      可編程控制器(PLC)作為繼電控制盤的替代物,以極高的可靠性和應用方便等特點,成為當今用途最為廣泛的工業控制器。現在它的應用已突破了當初邏輯控制的場合,深入到過程控制、位置控制、網絡通訊等工程領域。本文根據某工程的實際需要,以三菱PLC為模擬目標,提出了一種以單片機構建PLC系統的思想

      2 系統構成
      系統框圖見圖1。


      該系統CPU芯片使用了一種新型的51系列單片機即Cygnal公司的 C8051F040。其指令集與MSC_51指令集完全兼容,使用方便,且采用流水線結構,其周期由標準的12個系統時鐘周期降為1個系統時鐘周期,處理能力大大提高,峰值性能可達25MIPS。內部集成了64K Flash ROM、4352字RAM、64位數據I/O口以及幾乎所有的模擬與數字外設如:ADC、DAC、SMBus、UART、CAN、SPI、PCA、電壓比較器、溫度傳感器、可編程增益放大器等。開發工具采用標準的JTAG接口,以邊界掃描方式對CPU進行非入侵式全速的在系統調試。其性能較之傳統51單片機有了很大的提高。
      CPU和外部I/O接口之間采用光電耦合器件,實行強電和弱電隔離,切斷現場干擾。計算機通過RS232串口與PLC系統通信,將PLC程序指令傳送到PLC。PLC將接收到的指令保存到非易失性RAM中。這樣做即可以長期保存PLC程序,又可以方便地隨時修改程序。

      3 PLC程序的執行過程
      常見PLC以掃描方式工作。每次掃描的工作過程分為三步。
      (1) 輸入處理 程序執行前,PLC將全部輸入點的狀態讀到輸入鏡像寄存器。在程序執行過程中,PLC不再讀取這些輸入點的狀態,直到下一個掃描周期的輸入處理。
      (2) 程序處理 PLC根據讀入的外部輸入狀態和其它元件的狀態執行用戶程序。這時的輸出指令只寫到輸出鏡像寄存器,輸出點的狀態并沒有發生變化。
      (3) 輸出處理 全部指令執行完畢,將輸出寄存器的內容全部刷新到外部輸出點。程序回到第一步工作過程。
      本PLC系統的工作過程與此相同。輸入處理和輸出處理用單片機實現起來比較容易,無需贅述。系統的關鍵是用戶程序的處理。下面以三菱FX系列PLC一個簡單的例子來說明本PLC系統對用戶程序的處理方法。梯形圖和相應的指令表見圖2。


      0:LD X000 9: LD X010
      1:AND X001 10:LD X011
      2:AND X002 11:AND X012
      3:LD X003 12:LD X013
      4:OR X004 13:AND X014
      5:ANB 14:ORB
      6:OUT Y000 15:OR X015
      7:OR X006 16:ANB
      8:LD X010 17:OUT Y001
      首先分析指令 AND X001,指令執行前有狀態B,執行該指令時,將當前狀態B 和X001的狀態進行與運算,形成狀態C,這是指令AND X002執行前狀態。C是B的刷新值,它們實際上是一個變量。這個變量反映程序執行時當前的狀態值。當遇到輸出指令OUT Y000時,就把當前狀態值傳送給輸出寄存器。把AND X001作為一單元塊,可認為這個單元塊有單輸入單輸出的結構。輸入狀態和單元塊內元件的狀態運算后得到輸出狀態。
      再分析指令LD X003、OR X004,如果將這兩條指令組合后看作上述單輸入單輸出結構的單元塊,執行前的狀態為D,把X003、X004元件并聯后的狀態作為單元塊內元件的狀態,和D與運算后得到狀態G.。但細化一步執行LD X003這個子單元塊時,當前狀態D需保存,取X003的狀態作為當前狀態值E,和X004或運算后得到F。執行ANB時,把先保存的狀態值D和狀態值F與運算后得到新的當前狀態值G。
      這里執行LD與AND產生區別是在于:AND指令沒有分支,而LD指令產生分支,程序執行前的狀態值需要保存。同樣,在遇到分支合并時,需要使用到先前保存的狀態值 。根據梯形圖的編寫規則,狀態值的保存和使用是一種先進后出的結構,所以可以使用進棧和出棧的方法來實現。指令的具體實現過程歸納如下:凡是遇到產生分支的指令,例如LD指令,需將當前狀態值進棧保存,取當前操作元件的狀態作為當前狀態值;凡是遇到分支合并的指令,例如ORB、ANB指令,需將棧頂值出棧與當前狀態值運算成為新的當前狀態值。
      在具體實現時,采用了另一種形式的棧。由于三菱FX系列PLC的LD連續使用不能超過八次,因此采用一個可以位尋址的片內RAM字節作為棧空間來存放當前狀態值。如果使用棧空間的最高位作為當前狀態值,每次壓棧就把該字節進行不帶進位的循環右移,出棧時反之。在LD X000指令執行后,進棧狀態A沒有出棧,LD X010指令又進棧保存當前狀態值,以前的壓棧值A廢之不用,即每條與母線相連的LD指令產生壓棧值都不出棧。這樣避免了因使用PUSH POP指令用一個字節的空間來保存一位的當前狀態值造成的RAM利用效率低的問題。
      LD X010后的指令執行過程如下:LD X010 把當前狀態值H壓棧,取X010的狀態作為當前狀態值I;LD X011把當前狀態值I壓棧,取X011的狀態作為當前狀態值J;AND X012 把當前狀態值J和X012的狀態與運算后得到當前狀態值K;LD X013把當前狀態值K壓棧,取X013的狀態作為當前狀態值L;AND X014把當前狀態值L和X014的狀態與運算后得到當前狀態值M;ORB 彈出壓棧值K和當前狀態值M或運算后得到新的當前狀態值M;OR X015把當前狀態值M和X015的狀態或運算后得到當前狀態值N;ANB彈出壓棧值I和當前狀態值N與運算后得到新的當前狀態值O;OUT Y002 把當前狀態值寫到Y002的輸出鏡像寄存器。
      4 檢查程序
      接收到程序后,在程序執行之前,還需對程序的語法正確性進行檢查。這里只介紹與程序狀態值棧相關指令的語法檢查。
      首先]需要設置一個位標志EN_BUS和一計數器LD_N。ENBUS表示下一指令能夠與PLC梯形圖中的母線相連。計數器LD_N表示自與母線相連的指令之后由于LD指令引起的堆棧次數。檢查程序之前,初始化如下:
      EN _BUS=1
      LD_N=1
      檢查程序時,如果遇到LD指令,程序流程如圖3(a);如果為ORB或ANB指令,則LD_N=LD _N-1;如果為OUT等與零母線相連的輸出指令,程序流程如圖3(b)。
      這些基本操作執行后,如果檢測到LD _N大于8,說明連續LD指令太多,程序狀態值棧空間溢出;如果LD _N等于0,說明ANB或ORB指令數多于與LD指令,數量不匹配。還有些指令例如程序標號P、循環范圍終止符NEXT等必須與母線相連。如果這些指令出現在EN _BUS=0的情況下,說明該程序有錯。
      5 結束語
      這種以單片機構建的PLC系統成本低,系統可擴展性好,可以方便得加上A/D、D/A等功能,應用領域廣泛。

      文章版權歸西部工控xbgk所有,未經許可不得轉載。

      主站蜘蛛池模板: 国产成人精品无码一区二区| 久久国产免费一区| 久久久老熟女一区二区三区| 无码人妻精品一区二区三区9厂 | 亚洲爽爽一区二区三区| 人妻激情偷乱视频一区二区三区 | 青娱乐国产官网极品一区| 无码av免费一区二区三区| 日韩动漫av在线播放一区| 加勒比无码一区二区三区| 久久伊人精品一区二区三区 | 国产精品无码一区二区三区在| 蜜桃视频一区二区三区在线观看| 一区视频在线播放| 在线精品日韩一区二区三区| 亚洲国产一区国产亚洲| 国产精品成人国产乱一区| 一区二区三区免费精品视频| 国内精品一区二区三区最新| 亚洲av无一区二区三区| 无码播放一区二区三区| 午夜福利一区二区三区高清视频 | 日本无码一区二区三区白峰美| 亚洲综合无码一区二区| 亚洲综合一区二区| 91一区二区三区四区五区| 亚洲av无码一区二区三区天堂古代| 国产精品视频一区二区噜噜| 亚洲av无码一区二区三区网站| 日韩精品一区二区三区四区| 亚洲国产一区二区三区青草影视 | 人妻无码一区二区三区| 日亚毛片免费乱码不卡一区| 亚洲国产成人久久综合一区77| 精品人妻少妇一区二区三区| 亚洲午夜福利AV一区二区无码| 激情一区二区三区| 国产91精品一区二区麻豆网站| 天堂va在线高清一区 | 任你躁国语自产一区在| 国产精品视频分类一区|