上位機(jī)與PLC的通信與監(jiān)控設(shè)計
//程序初始化:
procedure TForm1.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:string):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 TForm1.HandShake_PLC;
var
tmpByte1,tmpByte2:char;
tmpVar:string;
s:string;
begin
Init_PLC(1);
nbs
p; s:=Edit1.text;
tmpVar:=s+inttostr(FCS(s))+'*'+chr(13);
MSComm.RThreshold:=0;
MSComm.Output:=tmpVar;
//向串口輸出數(shù)據(jù)
sleep(1000);// 延時
tmpVar:=MSComm.Input;
//從串口讀取數(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ī)對PLC的監(jiān)控
編寫通信程序建立了上位機(jī)與PLC的連接.在PLC的任何工作方式下都可以通過”讀”指令讀取PLC的狀態(tài).從而對PLC進(jìn)行監(jiān)視.只有當(dāng)PLC的工作方式為監(jiān)視的情況下才可以通過上位機(jī)對PLC進(jìn)行控制.所以在需要上位機(jī)實(shí)施控制的系統(tǒng)里面PLC都必須設(shè)置為監(jiān)視工作方式.
上位機(jī)只需要設(shè)置PLC的相應(yīng)工作位就可以實(shí)現(xiàn)對PLC的控制.下圖為PLC上位機(jī)控制過程。圖a表示PLC 正常工作時輸出由輸入0.00控制,當(dāng)需要把PLC的控制轉(zhuǎn)由上位機(jī)控制時,只需要通過向PLC輸入@00RR00030001,置3.00為ON,切斷0.00的通路,這樣輸出10.00就轉(zhuǎn)由4.00控制,當(dāng)輸入@00WR00040001時,4.00為ON,輸出位10.00產(chǎn)生輸出。
(a) PLC正常工作
(b)上位機(jī)控制
圖6 PLC的上位機(jī)控制
5結(jié)束語
本文探討了實(shí)現(xiàn)PLC的上位鏈接系統(tǒng)通信的方法,以及要實(shí)現(xiàn)上位機(jī)對下PLC控制的PLC編程。通過上位機(jī)對PLC的監(jiān)視與控制,可用方便的實(shí)現(xiàn)工廠生產(chǎn)過程的自動化監(jiān)控。
參考文獻(xiàn)
[1] 弭洪濤,畢國忠等.PLC應(yīng)用技術(shù).北京:中國電力出版社2004
[2] 宋伯生.PLC編程理論 算法及技巧. 北京:機(jī)械工業(yè)出版社2006
評論