郎亮波
(浙江海牛環(huán)境科技股份有限公司,浙江杭州,311121)
公司設(shè)備目前使用的都是三菱的PLC,其中不乏一些上世紀(jì)的產(chǎn)品。在修改其控制程序中就碰到過一些問題,其中最普遍的情況是保持型寄存器不夠用,而非保存型的寄存器資源十分寬裕。隨著工藝的改進,此情況有越來越嚴(yán)重的趨勢?,F(xiàn)有這樣的設(shè)備多于40臺,如果每臺都換新的PLC成本會增加很多,況且整個工藝改進涉及到地方很少,花大成本只是為了這小小的改進,顯然很不劃算。本文介紹的方法就是在此背景下提出,其最直接目的是解決老PLC數(shù)據(jù)寄存器資源缺乏的問題,滿足功能的前提下為企業(yè)節(jié)約成本,而且修改工藝周期較其他方法快、成功率較高。通過此方法舉一反三可以延伸到其他類似情況,既擴大解決問題的思路,又對PLC數(shù)據(jù)結(jié)構(gòu)以及指令有更深認(rèn)識。
目前在使用的數(shù)據(jù)存儲器有不少只是存儲小于255的數(shù)值,三菱PLC一個數(shù)據(jù)寄存器有16位BIT,小于255的數(shù)只是占有了一個數(shù)據(jù)寄存器的低8位空間,而高8位空間卻白白地浪費掉。如果將一個數(shù)據(jù)寄存器調(diào)整為兩個來使用,將高低8位存儲空間獨立為兩個數(shù)據(jù)寄存器,保存型寄存器數(shù)量就能增加一倍。此方法需要兩個非保存型寄存器配合使用,在生產(chǎn)中直接調(diào)用的是這兩個非保存型寄存器,保存型寄存器的高低8位與這兩個寄存器也需要同步刷新,這樣關(guān)機時保持型寄存器存儲的就是最新的值。開機時對這3個寄存器的處理剛好與上述過程相反。上述方法不需要增加額外的成本,只要按上面的思路增加一段程序。
實現(xiàn)這個目標(biāo)需要在程序中需要增加兩個過程。
(1)開機時將保存型寄存器分離并將各自的值保存到非保存型寄存器中,此程序只開機時操作一次。(2)同步刷新保存型數(shù)據(jù)寄存器,也就是將非保存型寄存器兩個新值合并到保存型數(shù)據(jù)寄存器中,開機時的分離的數(shù)值是上次保存的值,這個值雖然保存在一個寄存器中,本身是沒有意義的。
以下是仿真分離寄存器得到的結(jié)果,設(shè)D250當(dāng)前值為15400,高低8位的二進制化為十進制分別為60和40,D20=40(低8位),D30=60(高8位),這與仿真得到的結(jié)果是一致的(見圖1)。
圖1 仿真結(jié)果1(分離值)
以下是仿真合并寄存器得到的結(jié)果,D20、D30預(yù)設(shè)值分別為20、30,合并到D250等于7700(見圖2)。
將保存型寄存器分離及合并所涉及的命令少而簡單,其關(guān)鍵命令是字與和字或。字與邏輯運算:1∧1=1;1∧0=0;0∧1=0;0∧0=0。十六進制FF轉(zhuǎn)化為二進制為1111111,F(xiàn)F00轉(zhuǎn)化為二進制為1111111100000000,將D250十進制值15400轉(zhuǎn)化為二進制為11110000101000。經(jīng)過字與運算后D250低8位數(shù)存放在D20中,而高8位存放在D30中。
圖2 仿真結(jié)果2(合并值)
圖3 字與運算過程
字或邏輯運算:1∨1=1;1∨0=1;0∨1=1;0∨0=0。D20十進制值20轉(zhuǎn)化為二進制10100。D30十進制值30轉(zhuǎn)化為二進制11110,經(jīng)過高低8位交換后為1111000000000。字或運算得到的結(jié)果為1111000010100,轉(zhuǎn)化為十進制為7700。而十進制值7700按上述字與運算,然后將D30高低8位交換,又能還原成D20=20、D30=30的結(jié)果,這與仿真得到的結(jié)果是一致的。
圖4 字或運算過程
解決這個問題運用了字與和字或運算,其實還可以利用移位的方法得到,不過那樣涉及的命令比較多,程序相對比較復(fù)雜。字與和字或運算雖然是一種簡單命令,平時很少用到,但它與其他命令結(jié)合一起使用,可以十分巧妙地處理數(shù)據(jù),本例就是其中之一。
參考文獻(xiàn)
[1]宋伯生.PLC 編程理論·算法及技巧[M].北京:機械工業(yè)出版社.2005.2.
[2]史國生.電氣控制與可編程控制器技術(shù)[M].北京:化學(xué)工業(yè)出版社.2003.12.