PLC模擬量輸入、輸出模塊低成本擴(kuò)展的一種方法
1 引言
可編程控制器(以下簡(jiǎn)稱PLC)由于其高可靠性、編程簡(jiǎn)單、通用性強(qiáng)、體積小、結(jié)構(gòu)緊湊、安裝維護(hù)方便等特點(diǎn),而在工業(yè)控制中得到了廣泛應(yīng)用。PLC的模塊一般分為以下幾大類:開(kāi)關(guān)量輸入模塊、開(kāi)關(guān)量輸出模塊、模擬量輸入模塊、模擬量輸出模塊。在工業(yè)控制中特別是過(guò)程控制領(lǐng)域中需要采集和控制的模擬量比較多,因而對(duì)PLC的模擬量輸入、輸出模塊需要的較多,而模擬量輸入、輸出模塊比較貴,增加模擬量輸入、輸出模塊就增加了成本,降低了整個(gè)系統(tǒng)的性價(jià)比,限制了PLC的應(yīng)用。本文提出了一種基于通訊的模擬量輸入、輸出模塊的擴(kuò)展方法力圖解決這一問(wèn)題。
2 基于通訊的模擬量輸入、輸出模塊的擴(kuò)展方法
(1) 模擬量輸入模塊擴(kuò)展
這里以一路12位模擬量輸入為例,模擬信號(hào)以0~5V標(biāo)準(zhǔn)電壓的形式送入信號(hào)輸入端,應(yīng)用12位A/D轉(zhuǎn)換芯片MAX187實(shí)現(xiàn)模數(shù)轉(zhuǎn)換。MAX187是12位串行A/D,具有較高的轉(zhuǎn)換速度,采樣頻率是75kHz,適用于較高精度的過(guò)程控制??紤]到實(shí)際工業(yè)現(xiàn)場(chǎng)中的高頻干擾,在采樣信號(hào)送MAX187之前還使用了低通濾波器濾波,如圖1所示。
圖1 低通濾波、放大器及A/D轉(zhuǎn)換
MAX187具有內(nèi)部參考電壓,既4#管腳(REF)為 4.096V,因此,A/D轉(zhuǎn)換的全量程為4.096V。而輸入信號(hào)是0~5V,因此,要加一級(jí)運(yùn)放把0~5V轉(zhuǎn)換成0~4.096V后送入MAX187。AT89C52的P1.3和MAX187的片選端(CS)相連、AT89C52的P1.4和MAX187的串行時(shí)鐘信號(hào)端(SCLK)相連、AT89C52的P1.5和MAX187的串行數(shù)據(jù)輸出端(DOUT)相連。模擬量采樣的值存入單片機(jī)的內(nèi)存中,再由單片機(jī)的串行口傳送給PLC。A/D轉(zhuǎn)換的C51程序如下:
#include
#include
sbit IC4_S = P1^4; /* AD輸入端口設(shè)置*/
sbit IC4_D = P1^5;
sbit IC4_C = P1^3;
void input(void )
{ unsigned char idata i;
unsigned int idata result=0x0000;
IC4_C = 0; /* CS端為低電平*/
for(i=0;i<12;i++)
{ result = result << 1;
IC4_S = 0; /*時(shí)鐘端產(chǎn)生時(shí)鐘脈沖*/
IC4_S = 1;
if( IC4_D ) result++; /*從串行數(shù)據(jù)輸出端讀入A/D轉(zhuǎn)換數(shù)據(jù)*/
}
IC4_C = 1; /* CS端為高電平*/
pdat[1] = result;
}
MAX187的工作時(shí)序圖見(jiàn)圖2。
圖2 MAX187的工作時(shí)序圖
(2) 模擬量輸出模塊擴(kuò)展
這里以一路12位模擬量輸出為例,設(shè)計(jì)中將采用12位D/A轉(zhuǎn)換芯片MAX531來(lái)實(shí)現(xiàn)數(shù)摸轉(zhuǎn)換。我們?cè)贛AX531的輸出端接運(yùn)算放大器,將模擬輸出調(diào)節(jié)至0~5V,輸出部分的硬件電路如圖3所示。這里,MAX531是12位串行D/A,具有較高的轉(zhuǎn)換速度, MAX531具有內(nèi)部參考電壓,既10#管腳(REFOUT)為2.048V,因此, D/A轉(zhuǎn)換的全量程為2.048V。而輸出信號(hào)一般要求是標(biāo)準(zhǔn)的0~5V,因此,要加一級(jí)運(yùn)放把MAX531輸出的0~2.048V信號(hào)轉(zhuǎn)換成 0~5V信號(hào)。AT89C52的P1.0和MAX531的串行時(shí)鐘信號(hào)端(SCLK)相連、AT89C52的P1.1和MAX531的串行數(shù)據(jù)輸入端(DIN)相連、AT89C52的P1.2和MAX531的片選端(CS)相連。PLC把要輸出的模擬量通過(guò)串行口傳送給單片機(jī),存入的內(nèi)存中,再由單片機(jī)完成D/A轉(zhuǎn)換進(jìn)行輸出。A/D轉(zhuǎn)換的C51程序如下:
圖3 D/A轉(zhuǎn)換及放大器原理圖
#include
#include
sbit IC2_S = P1^0; /*DA輸出端口設(shè)置*/
sbit IC2_D = P1^1;
sbit IC2_C = P1^2;
void output(unsigned int dat)
{ unsigned char idata i = 12;
IC2_C = 0; /* CS端為低電平*/
while( i-- )
{ IC2_S = 0; /*時(shí)鐘端產(chǎn)生時(shí)鐘脈沖*/
if ( dat &0x0800 ) IC2_D =1; /*從串行數(shù)據(jù)輸入端讀入DA轉(zhuǎn)換數(shù)據(jù)*/
else IC2_D =0;
IC2_S = 1;
dat = dat << 1;
}
IC2_C=1; /* CS端為高電平*/
}
MAX531的工作時(shí)序圖見(jiàn)圖4。
圖4 MAX531的工作時(shí)序圖
3 PLC與擴(kuò)展模塊之間的通信接口及通信協(xié)議
(1) 通信接口
以松下FP1系列PLC為例來(lái)闡述PLC與擴(kuò)展模塊之間的通信,F(xiàn)P1系列PLC的通信接口采用標(biāo)準(zhǔn)9芯RS232接口,它與擴(kuò)展模塊之間的接線如圖5所示。
圖5 擴(kuò)展模塊與PLC的通訊連接
· 擴(kuò)展模塊的RXD端與PLC的TXD端聯(lián)接,使擴(kuò)展模塊接收到PLC發(fā)出的數(shù)據(jù);
·擴(kuò)展模塊的TXD端與PLC的RXD端聯(lián)接,使擴(kuò)展模塊發(fā)出的數(shù)據(jù)被PLC接收到;
· 擴(kuò)展模塊的地與PLC的SG端互聯(lián),使兩者的工作基準(zhǔn)地電平相同。
上面采用的是RS232接口,PLC一次只能擴(kuò)展一個(gè)模塊。如果要擴(kuò)展多個(gè)模塊,可以采用RS485接口,現(xiàn)代的PLC一般都帶有RS485接口。
(2) 通信協(xié)議
松下FP1系列PLC與擴(kuò)展模塊之間的通信協(xié)議為松下公司專用的MEWTOCOL-COM協(xié)議,該協(xié)議采用異步通信方式,其波特率有1200、2400、4800、9600、19200、38400、57600、115200bps等多種可選,且報(bào)文長(zhǎng)度可變可固定。該協(xié)議格式分為命令消息(Command Message),正常響應(yīng)消息(Response Message-normal),出錯(cuò)響應(yīng)消息(Response Message-error)三種。
其中:%為起始符,標(biāo)記每一幀報(bào)文的開(kāi)始;CR為結(jié)束符,標(biāo)記每一幀報(bào)文的結(jié)束;
AD為PLC的站地址,為兩位16進(jìn)制數(shù),如00則表示第一臺(tái)PLC;
#、$、!標(biāo)注該幀報(bào)文為何種類型。
Command code為命令代碼,如例1中的“RD”,表示讀數(shù)據(jù)區(qū)。Response code為響應(yīng)代碼一般返回接收到的命令消息中的命令代碼。Error(H)和Error(L)為出錯(cuò)代碼,是兩位16進(jìn)制數(shù), 可根據(jù)其值在協(xié)議中查出錯(cuò)誤的描述。
Text code為命令參數(shù),如例1命令消息中“D 01105 01107”,“D”表示數(shù)據(jù)寄存器,“01105 01107”表示第1105號(hào)至1107號(hào),而在例1響應(yīng)消息中,“6300 4433 0A00”則表示DT1105至DT1107中數(shù)據(jù)分別為6300、4433、0A00。
BCC(H)和BCC(L)為前面字符串的BCC校驗(yàn)碼的高、低位,為兩位16進(jìn)制數(shù)。其初值為0,然后從起始符開(kāi)始與該幀報(bào)文中每一字節(jié)按位進(jìn)行異或運(yùn)算得到。
l 例1:讀取DT1105至DT1107中的數(shù)據(jù)的命令消息如下:
若DT1105至DT1107中數(shù)據(jù)分別為6300、4433和0A00,PLC返回的響應(yīng)消息如下:
那么, 模擬量輸入擴(kuò)展模塊與PLC通訊的報(bào)文可如下:
表示1號(hào)模擬量輸入擴(kuò)展模塊把模擬量采樣值0FFF存入PLC的第1105個(gè)數(shù)據(jù)寄存器
模擬量輸出擴(kuò)展模塊與PLC通訊的報(bào)文可如下:
表示1號(hào)模擬量輸出擴(kuò)展模塊請(qǐng)求把PLC中第1106個(gè)數(shù)據(jù)寄存器保存的模擬量輸出值讀入。
若DT1106中數(shù)據(jù)為0fff,PLC返回的響應(yīng)消息如下:
1號(hào)模擬量輸出擴(kuò)展模塊就把接收到的數(shù)字量0fff轉(zhuǎn)換成模擬量輸出。
4 結(jié)束語(yǔ)
本文提出的方法已在實(shí)驗(yàn)室中調(diào)試通過(guò),并多次長(zhǎng)時(shí)間運(yùn)行測(cè)試,以驗(yàn)證其準(zhǔn)確性與穩(wěn)定性,收到了令人滿意的效果,通信十分穩(wěn)定可靠。各位讀者可在本文的基礎(chǔ)上,開(kāi)發(fā)出8路、16路8位、10位、12位等模擬量輸入、輸出擴(kuò)展模塊;本文使用的是松下公司已有的MEWTOCOL-COM協(xié)議,讀者也可以自己編制通訊協(xié)議。本文意在提出一種低成本的PLC模擬量輸入、輸出模塊擴(kuò)展方法,如果要把它變成產(chǎn)品還有很長(zhǎng)的路要走,例如,如何讓用戶使用得更方便,可靠性更高等等。這些都是需要進(jìn)一步完善的。
文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。