郎亮波
(浙江海牛環境科技股份有限公司,浙江杭州,311121)
公司設備目前使用的都是三菱的PLC,其中不乏一些上世紀的產品。在修改其控制程序中就碰到過一些問題,其中最普遍的情況是保持型寄存器不夠用,而非保存型的寄存器資源十分寬裕。隨著工藝的改進,此情況有越來越嚴重的趨勢。現有這樣的設備多于40臺,如果每臺都換新的PLC成本會增加很多,況且整個工藝改進涉及到地方很少,花大成本只是為了這小小的改進,顯然很不劃算。本文介紹的方法就是在此背景下提出,其最直接目的是解決老PLC數據寄存器資源缺乏的問題,滿足功能的前提下為企業節約成本,而且修改工藝周期較其他方法快、成功率較高。通過此方法舉一反三可以延伸到其他類似情況,既擴大解決問題的思路,又對PLC數據結構以及指令有更深認識。
目前在使用的數據存儲器有不少只是存儲小于255的數值,三菱PLC一個數據寄存器有16位BIT,小于255的數只是占有了一個數據寄存器的低8位空間,而高8位空間卻白白地浪費掉。如果將一個數據寄存器調整為兩個來使用,將高低8位存儲空間獨立為兩個數據寄存器,保存型寄存器數量就能增加一倍。此方法需要兩個非保存型寄存器配合使用,在生產中直接調用的是這兩個非保存型寄存器,保存型寄存器的高低8位與這兩個寄存器也需要同步刷新,這樣關機時保持型寄存器存儲的就是最新的值。開機時對這3個寄存器的處理剛好與上述過程相反。上述方法不需要增加額外的成本,只要按上面的思路增加一段程序。
實現這個目標需要在程序中需要增加兩個過程。
(1)開機時將保存型寄存器分離并將各自的值保存到非保存型寄存器中,此程序只開機時操作一次。(2)同步刷新保存型數據寄存器,也就是將非保存型寄存器兩個新值合并到保存型數據寄存器中,開機時的分離的數值是上次保存的值,這個值雖然保存在一個寄存器中,本身是沒有意義的。
以下是仿真分離寄存器得到的結果,設D250當前值為15400,高低8位的二進制化為十進制分別為60和40,D20=40(低8位),D30=60(高8位),這與仿真得到的結果是一致的(見圖1)。

圖1 仿真結果1(分離值)
以下是仿真合并寄存器得到的結果,D20、D30預設值分別為20、30,合并到D250等于7700(見圖2)。
將保存型寄存器分離及合并所涉及的命令少而簡單,其關鍵命令是字與和字或。字與邏輯運算:1∧1=1;1∧0=0;0∧1=0;0∧0=0。十六進制FF轉化為二進制為1111111,FF00轉化為二進制為1111111100000000,將D250十進制值15400轉化為二進制為11110000101000。經過字與運算后D250低8位數存放在D20中,而高8位存放在D30中。

圖2 仿真結果2(合并值)

圖3 字與運算過程
字或邏輯運算:1∨1=1;1∨0=1;0∨1=1;0∨0=0。D20十進制值20轉化為二進制10100。D30十進制值30轉化為二進制11110,經過高低8位交換后為1111000000000。字或運算得到的結果為1111000010100,轉化為十進制為7700。而十進制值7700按上述字與運算,然后將D30高低8位交換,又能還原成D20=20、D30=30的結果,這與仿真得到的結果是一致的。

圖4 字或運算過程
解決這個問題運用了字與和字或運算,其實還可以利用移位的方法得到,不過那樣涉及的命令比較多,程序相對比較復雜。字與和字或運算雖然是一種簡單命令,平時很少用到,但它與其他命令結合一起使用,可以十分巧妙地處理數據,本例就是其中之一。
參考文獻
[1]宋伯生.PLC 編程理論·算法及技巧[M].北京:機械工業出版社.2005.2.
[2]史國生.電氣控制與可編程控制器技術[M].北京:化學工業出版社.2003.12.