1 引言
plc具有高可靠性和很強(qiáng)的抗干擾能力,因而在工業(yè)控制中得到了廣泛的使用。隨著工業(yè)的自動(dòng)化程度的提高,對(duì)plc的應(yīng)用提出了更高的要求:更快的處理速度,更高的可靠性,控制與管理功能一體化??刂婆c管理一體化也就是將計(jì)算機(jī)信息處理技術(shù),網(wǎng)絡(luò)通信技術(shù)應(yīng)用于plc,使plc用于下位分散控制,用計(jì)算機(jī)提供圖形顯示界面,同時(shí)對(duì)下位機(jī)進(jìn)行監(jiān)控。本文討論的是上位計(jì)算機(jī)與omron(歐姆龍)cpm2a型plc的通信與監(jiān)控設(shè)計(jì)。
2 cpm2a的上位通信協(xié)議
cpm2a的數(shù)據(jù)是以幀的格式發(fā)送的,當(dāng)通信命令小于一幀時(shí),發(fā)送格式如圖1所示。其中正文最多122個(gè)字符。當(dāng)命令塊內(nèi)容大于一幀時(shí),由起始幀、中間幀、及結(jié)果幀組成。起始幀最多131個(gè)字符,中間幀及結(jié)束幀最多128個(gè)字符。起始幀由設(shè)備號(hào)、命令碼、正文、 fcs、和分界符構(gòu)成。中間幀有正文、fcs、分界符組成。結(jié)束幀由正文fcs、結(jié)束符組成。上位機(jī)每發(fā)送完一幀,在收到plc發(fā)回的分界符后再發(fā)送下一幀。
圖1 cpm2a 通信時(shí)命令塊的格式
命令塊中的校驗(yàn)碼fcs是8位二進(jìn)制數(shù)轉(zhuǎn)換成的2位ascⅱ字符。這8位數(shù)據(jù)是將一幀數(shù)據(jù)中校驗(yàn)碼前的所有字符的ascⅱ碼位按連續(xù)異或的結(jié)果。轉(zhuǎn)換成字符時(shí),按照2位十六進(jìn)制數(shù)轉(zhuǎn)換成對(duì)應(yīng)的數(shù)字字符。
plc接收到上位機(jī)發(fā)送的命令幀后,自動(dòng)產(chǎn)生響應(yīng)塊,響應(yīng)塊的格式與圖1格式類似,只是在命令碼后面多了兩位的響應(yīng)碼,響應(yīng)碼表示了上位機(jī)命令的出錯(cuò)信息。響應(yīng)碼00表示plc正常完成上位機(jī)命令。
3 plc命令的編寫
在cpm2a的上位鏈接系統(tǒng)中,plc接收指令并被動(dòng)地給上位機(jī)返回響應(yīng)塊。所以作為下位機(jī)的plc不需要編寫通信程序。
上位機(jī)與plc的通信不能改變plc的輸入狀態(tài)。為了通過上位機(jī)改變plc的輸出,在編寫下位機(jī)的程序時(shí)就要利用plc的工作位,通過上位機(jī)改變工作位的狀態(tài)來改變plc的輸出,從而達(dá)到上位機(jī)對(duì)plc輸出的控制。
如圖2所示,在梯形圖中加入了工作位3.00,4.00。系統(tǒng)正常工作時(shí)3.00,4.00置off,當(dāng)需要實(shí)現(xiàn)上位機(jī)控制時(shí),把3.00置on,使plc的輸入端0.00失效,通過工作位4.00的通斷來控制系統(tǒng)的輸出。
圖2 實(shí)現(xiàn)上位機(jī)監(jiān)控的plc編程
4 編寫上位機(jī)通信程序
在上位鏈接系統(tǒng)中,通信一般都是由上位機(jī)發(fā)起的,按plc標(biāo)準(zhǔn)通信進(jìn)行連接。上位機(jī)給plc發(fā)送操作指令,plc按照指令執(zhí)行相應(yīng)的操作,同時(shí)給上位機(jī)返回?cái)?shù)據(jù)。串口通信流程如圖3所示。
圖3 通信流程圖
4.1 編寫上位通信程序
編寫通信程序可以采用高級(jí)語言或者匯編語言,下面給出的例子是用delphi編寫的上位機(jī)與cpm2a型plc通信程序.通信采用標(biāo)準(zhǔn)通信模式。通信界面如圖4。
圖4 通信界面
//程序初始化:
tbbbb1.init_plc(nport:integer);
begin
if mscomm.portopen then
mscomm.portopen:=false;
mscomm.commport:=nport;
//通信端口選擇
mscomm.settings:='9600,e,7,1';
//1位起始位,7位數(shù)據(jù)位,偶效驗(yàn),2位停止位,9600bps
mscomm.portopen:=true;//打開串口
end;
//fcs校驗(yàn)
function fcs(s:bbbbbb):variant;
var
i,len,tmpvar:integer;
datacheck:byte;
f1,f2:byte;
begin
f1:=0;
f2:=0;
datacheck:=0;
len:=length(s);
tmpvar:=0;
for i:=1 to len do
begin
datacheck:=ord(datacheck) xor ord(s[i]);
end;
f1:=datacheck and $0f;
f2:=datacheck and $f0;
f2:=f2 shr 4;
result:=inttostr(f2)+inttostr(f1);
end;
// 調(diào)用mscomm控件實(shí)現(xiàn)plc通信
procedure tbbbb1.handshake_plc;
var
tmpbyte1,tmpbyte2:char;
tmpvar:bbbbbb;
s:bbbbbb;
begin
init_plc(1);
s:=edit1.text;
tmpvar:=s+inttostr(fcs(s))+'*'+chr(13);
mscomm.rthreshold:=0;
mscomm.output:=tmpvar;
//向串口輸出數(shù)據(jù)
sleep(1000);// 延時(shí)
tmpvar:=mscomm.bbbbb;
//從串口讀取數(shù)據(jù)
tmpbyte1:=tmpvar[5];
tmpbyte2:=tmpvar[6];
if tmpbyte1=chr(48)& tmpbyte2:=chr(48);
//校驗(yàn)碼等于00,plc正常完成操作
then
begin
showmessage('發(fā)送的數(shù)據(jù)正確');
else
showmessage('發(fā)送的數(shù)據(jù)有問題');
//end;
end;
4.2 實(shí)現(xiàn)上位機(jī)對(duì)plc的監(jiān)控
編寫通信程序建立了上位機(jī)與plc的連接.在plc的任何工作方式下都可以通過“讀”指令讀取plc的狀態(tài).從而對(duì)plc進(jìn)行監(jiān)視.只有當(dāng)plc的工作方式為監(jiān)視的情況下才可以通過上位機(jī)對(duì)plc進(jìn)行控制.所以在需要上位機(jī)實(shí)施控制的系統(tǒng)里面plc都必須設(shè)置為監(jiān)視工作方式。上位機(jī)只需要設(shè)置plc的相應(yīng)工作位就可以實(shí)現(xiàn)對(duì)plc的控制。
5 結(jié)束語
本文論述了實(shí)現(xiàn)plc的上位鏈接系統(tǒng)通信的原理,以及要實(shí)現(xiàn)上位機(jī)對(duì)下plc控制的plc編程技術(shù)細(xì)節(jié)。通過上位機(jī)對(duì)plc的監(jiān)視與控制,可用方便的實(shí)現(xiàn)工廠生產(chǎn)過程的自動(dòng)化監(jiān)控。
楊 【求購(gòu)】 洗手池 2025-12-17
馮經(jīng)理 【求購(gòu)】 PTD電機(jī) 2025-12-17
倪先生 【求購(gòu)】 液壓馬達(dá) 2025-12-16
練子棟 【求購(gòu)】 金屬管件 2025-12-16
陳經(jīng)理 【求購(gòu)】 求購(gòu)螺母螺... 2025-12-16
Alyssa Yin(尹小姐) 【求購(gòu)】 SEEBA... 2025-12-15
曾經(jīng)理 【求購(gòu)】 定制酒店香... 2025-12-12










