技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基于VC++和MFC的上位機(jī)與PLC的通訊系統(tǒng)

基于VC++和MFC的上位機(jī)與PLC的通訊系統(tǒng)

時間:2008-08-25 10:05:00來源:ronggang

導(dǎo)語:?用VC++和MFC開發(fā)的上位機(jī)和PLC的通訊系統(tǒng),給出了系統(tǒng)的通訊原理和系統(tǒng)的軟件設(shè)計方法。實踐證明整個系統(tǒng)運(yùn)行穩(wěn)定,實用性和可擴(kuò)展性強(qiáng)

摘 要:本文介紹了用VC++和MFC開發(fā)的上位機(jī)和PLC的通訊系統(tǒng),給出了系統(tǒng)的通訊原理和系統(tǒng)的軟件設(shè)計方法。實踐證明整個系統(tǒng)運(yùn)行穩(wěn)定,實用性和可擴(kuò)展性強(qiáng)。

關(guān)鍵詞:PLC VC++ MFC 通訊模式

1 概述

PLC(Programmable Logic Controller)作為新一代工業(yè)控制器,以其高性能價格比在工業(yè)測控系統(tǒng)中獲得了廣泛應(yīng)用。隨著微電子及控制技術(shù)的不斷發(fā)展,PLC已逐漸成為一種智能型、綜合型控制器,由PLC構(gòu)成的集散控制是現(xiàn)代工業(yè)控制的一個重要組成部分。在眾多的小型集散控制系統(tǒng)中,若使用專業(yè)工控組態(tài)軟件,如INTOUCH、FIX等,制作上位機(jī)的監(jiān)控界面,而以專用的PLC通信接口模塊以及其廠家推薦的DDE Server作為聯(lián)系上位機(jī)和PLC的橋梁,則成本較高、投資較大。所以上位機(jī)直接與PLC的通訊是一種很好的技術(shù)方案。

在Windows環(huán)境下開發(fā)與工業(yè)PLC通訊,可以利用C并借助Windows SDK提供的應(yīng)用程序接口函數(shù)來完成軟件的設(shè)計,但這樣開發(fā)的程序很復(fù)雜;也可以利用Visual Basic提供的通訊控件來開發(fā)串行通訊程序,程序的編制十分簡單,但在現(xiàn)實中,許多大的應(yīng)用系統(tǒng)都是基于VC++平臺開發(fā)的,VC++是現(xiàn)今最復(fù)雜、但也是最強(qiáng)大的一種Windows應(yīng)用程序開發(fā)工程軟件。它在圖形處理和數(shù)據(jù)庫管理等方面具有較強(qiáng)的優(yōu)勢,并且用它來實現(xiàn)底層的通訊控制有著更快的效率,使用MFC設(shè)計的界面與Visual Basic設(shè)計的界面一樣簡練。因此我們利用VC++6.0提供的通訊控件MSComm,以MFC來設(shè)計界面編制程序,構(gòu)造與PLC的通訊系統(tǒng)。系統(tǒng)中的PLC為西門子公司的S7-200系列CPU226型。

2 系統(tǒng)的通訊原理

西門子S7-226型PLC是一種模塊化結(jié)構(gòu)的小型PLC,具有較高的性能價格比,它帶有兩個RS485通訊口,而上位機(jī)即工控機(jī)的串行口是RS232,所以采用西門子公司專用的PC/PPI編程電纜作為上下位機(jī)的連接電纜,它實現(xiàn)了RS232和RS485的轉(zhuǎn)換,并且具有隔離抗干擾功能。整個系統(tǒng)原理圖如圖1所示。

通訊系統(tǒng)原理

圖1 通訊系統(tǒng)原理

CPU226自帶的通訊口RS485采用半雙工通訊,只需用兩根數(shù)據(jù)線TXD和RXD來發(fā)送數(shù)據(jù)和接收數(shù)據(jù),所以通訊中沒有硬件握手信號,而只能采用軟件握手的通訊方式保持?jǐn)?shù)據(jù)傳輸?shù)耐?。為了保證通訊的安全性,必須對發(fā)送的數(shù)據(jù)幀中加入幀校驗碼(FCS),采取的方法是:把所發(fā)送的數(shù)據(jù)幀中的數(shù)據(jù)按照字節(jié)進(jìn)行異或運(yùn)算后得到的FCS連同數(shù)據(jù)一起發(fā)送。接收方收到后,進(jìn)行同樣的運(yùn)算,并把結(jié)果與FCS比較,如果兩者不相等,則認(rèn)為傳輸數(shù)據(jù)出錯。對于檢驗到出錯的數(shù)據(jù)采取放棄的措施,并立即發(fā)送反饋信號要求發(fā)送方重發(fā)數(shù)據(jù)。因此上位機(jī)和PLC發(fā)送數(shù)據(jù)的格式分別為表1和表2所示??刂泼钊缯埱?、應(yīng)答等信號另有則不必加上校驗碼。

表1上位機(jī)數(shù)據(jù)格式

表2 PLC數(shù)據(jù)格式

3 系統(tǒng)的軟件設(shè)計

3.1系統(tǒng)的控制流程

整個通訊由上位機(jī)觸發(fā)開始,首先由上位機(jī)發(fā)送握手信號,PLC接收到握手信號后,發(fā)送回握信號;上位機(jī)收到回握信號,則開始發(fā)送請求指令,PLC收到指令后發(fā)送數(shù)據(jù)給上位機(jī);上位機(jī)收到數(shù)據(jù)進(jìn)行校驗,出錯則要求PLC重發(fā),沒有錯誤則處理輸出顯示。下面圖2和圖3分別就是上位機(jī)和PLC的通訊程序流程圖。

上位機(jī)程序流程圖 圖3 PLC程序流程圖

圖2 上位機(jī)程序流程圖 圖3 PLC程序流程圖

3.2 PLC軟件設(shè)計

S7-200系列PLC有兩種通訊模式:一種是點對點(PPI)通訊模式,另一種是對用戶完全開放的自由口通訊模式(free port mode),PPI模式用于PLC間直接連接的通訊,可以組成網(wǎng)絡(luò),自由口模式應(yīng)用于PLC與計算機(jī)間以及PLC間無線通訊等方面。本通訊系統(tǒng)采用自由口通訊模式。在通訊之前通過改寫SMB30或SMB130來選擇通訊模式,設(shè)定波特率以及數(shù)據(jù)長度和校驗位。對于數(shù)據(jù)發(fā)送,采用專用發(fā)送指令XMT TABLE, PORT,其中TABLE為發(fā)送緩沖區(qū)的首地址,首地址中保存要發(fā)送的字節(jié)數(shù),即數(shù)據(jù)長度,最大為255,其后的地址中保存要發(fā)送的數(shù)據(jù),PORT指定用于發(fā)送的端口。對于數(shù)據(jù)接收,使用接收指令RCV TABLE, PORT,接收指令激活初始化或結(jié)束接收信息,通過指定端口(PORT)接收信息并存儲于數(shù)據(jù)緩沖區(qū)(TABLE),數(shù)據(jù)緩沖區(qū)的第一個數(shù)據(jù)指明了接收的字節(jié)數(shù)。在西門子PLC編程語言中,共有33個中斷事件,其中用于通訊口的中斷事件就有6個。在通訊過程中,我們利用中斷來實現(xiàn)發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的切換,當(dāng)數(shù)據(jù)發(fā)送完成,會產(chǎn)生發(fā)送字符中斷事件,在中斷程序中切換到接收狀態(tài);當(dāng)接收數(shù)據(jù)完成,會產(chǎn)生接收信息完成中斷事件,在中斷程序中切換到發(fā)送狀態(tài),由于收發(fā)切換有一定的間隔,所以必須延時一段時間再發(fā)送數(shù)據(jù),我們用定時中斷來產(chǎn)生延時。為了產(chǎn)生接收信息完成中斷事件,必須要對RCV指令設(shè)定結(jié)束信息作為判斷接收完成的條件,通過向SMB89或SMB189中裝入字符來設(shè)置,這個字符必須與上位機(jī)發(fā)送來的結(jié)束信息相吻合。

以下是PLC的部分程序:

MAIN(主程序)

NETWORK 1

LD SM0.1

MOVB 16#09, SMB30//初始化自由端口,選擇9600波特率,8位數(shù)據(jù),無校驗

MOVB 16#A0, SMB87//RCV允許,檢測信息結(jié)束字符

MOVB ‘@’, SMB89//設(shè)定信息結(jié)束字符為‘@’

MOVB 10, SMB94//設(shè)定最大字符數(shù)為10

MOVB 5, SMB34 //定時中斷0為5ms

ATCH 0,23//接收完成事件連接到中斷0

ENI//允許全局中斷

NETWORK 2

RCV VB300, 0//接收數(shù)據(jù)

NETWORK 3

LD SM0.0

MOVB 16,VB200//發(fā)送16個字符

MOVD 16#4521347E, VD201//以下是實驗數(shù)據(jù)

MOVW +9860, VW205

MOVD 16#12345678, VD207

MOVW +10562, VW211

MOVW +8568, VW213

MOVB 8, VB215

CALL SBR_0

INT_0(中斷0子程序)

NETWORK 1//如果接收到的字符為‘K‘,則繼續(xù)接收

LDB= VB302, ‘K‘

RCV VB300, 0

NETWORK 2//如果接收到的字符為‘A‘、‘C‘或者‘R‘,則發(fā)送數(shù)據(jù)

LDB= VB302, ‘A‘

OB= VB302, ‘R‘

OB= VB302, ‘C‘

ATCH INT_1, 10//啟動定時中斷

NETWORK 3 //如果接收到的字符為“Z”,則

停止延時發(fā)送

LDB= VB302, ‘Z‘

DTCH 10

INT_1(中斷1子程序)

LD SM0.0

XMT VB200, 0//發(fā)送數(shù)據(jù)

DTCH 10//關(guān)定時中斷

3.3 上位機(jī)軟件設(shè)計

系統(tǒng)中上位機(jī)的軟件部分利用VC++提供的通訊控件MSComm,以MFC為基礎(chǔ)編制通訊程序。MSComm通訊控件提供了使用RS232開發(fā)串行通訊軟件的細(xì)則,它使用事件驅(qū)動或查詢方式來解決開發(fā)通訊軟件中遇到的問題。事件驅(qū)動是一種功能強(qiáng)大的處理問題的方法,對事件發(fā)生的跟蹤和處理在通訊控件中是用OnComm來實現(xiàn)的,它包括檢測和處理通訊錯誤以及數(shù)據(jù)的處理顯示等。為了清楚了解現(xiàn)場的工作狀態(tài),可以在界面上實時顯示攝像機(jī)觀察到的內(nèi)容,為此,需要對圖像采集卡采集到的圖像進(jìn)行分析處理,這里就不再詳述。圖4為通訊界面。

程序設(shè)計方法如下:

(1)建立項目:啟動VC++6.0,利用MFC AppWizard(exe)應(yīng)用向?qū)Ы⒁粋€基于對話框的應(yīng)用程序ScommTest。

通訊界面

圖4 通訊界面

(2)在項目中插入MSComm控件:選擇Project菜單下Add To Project子菜單中的 Components and Controls…選項,在彈出的對話框中雙擊Registered ActiveX Controls項,選擇Microsoft Communications Control version 6.0,單擊Insert按鈕將它插入到Project中來,接受缺省的選項。

(3)在對話框中添加控件:向主對話框中添加通訊控件、按鈕、文本框、編輯框和組合框,其中部分屬性如表3所示。

表3控件屬性表

(4)初始化串口:在OnInitDialog()函數(shù)中添加初始化串口參數(shù)的代碼

// TODO: Add extra initialization here

if(m_ctrlComm.GetPortOpen())

m_ctrlComm.SetPortOpen(FALSE);

m_ctrlComm.SetCommPort(1); //選擇com1

if( !m_ctrlComm.GetPortOpen())

m_ctrlComm.SetPortOpen(TRUE);//打開串口

else

AfxMessageBox("cannot open serial port");

m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,無校驗,8個數(shù)據(jù)位,1個停止位

m_ctrlComm.SetInputMode(1); //1:表示以二進(jìn)制方式檢取數(shù)據(jù)

m_ctrlComm.SetRThreshold(16); //參數(shù)15表示每當(dāng)串口接收緩沖區(qū)中有多于或等于15個字符時將引發(fā)一個接收數(shù)據(jù)的OnComm事件

m_ctrlComm.SetInputLen(0); //設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度為0

m_ctrlComm.GetInput();//先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)

(5)編寫幀校驗函數(shù):首先在CSCommTestDlg類中加入公共成員函數(shù)說明

BYTE PLCData[30];//定義輸入數(shù)據(jù)存儲區(qū)

Void verfun(BYTE vdata[],int n);//定義校驗函數(shù)

然后寫幀校驗函數(shù):

void CSCommTestDlg::verfun(BYTE vdata[],int n)

int i;

BYTE sum=vdata[0];

for(i=1;i<=n-2;i++)

sum︿=vdata[i];//計算校驗碼

vdata[n]=sum;//保存幀校驗碼

(6)為通訊控件IDC_MSComm1添加OnComm消息處理函數(shù)OnComm()

void CSCommTestDlg::OnComm()

VARIANT variant_inp;

COleSafeArray safearray_inp;

LONG len,k;

BYTE rxdata[2048]; //設(shè)置BYTE數(shù)組(8位無符號整數(shù))

CString strtemp;

if(m_ctrlComm.GetCommEvent()==2) //事件值為2表示接收緩沖區(qū)內(nèi)有字符

variant_inp=m_ctrlComm.GetInput();//讀緩沖區(qū)

safearray_inp=variant_inp; //VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量

len=safearray_inp.GetOneDimSize(); //得到有效數(shù)據(jù)長度

for(k=0;k

safearray_inp.GetElement(&k,rxdata+k);//轉(zhuǎn)換為BYTE型數(shù)組

for(k=0;k

PLCData[k]=rxdata[k];

verfun(PLCData,16);//計算校驗碼

if(PLCData[15]==PLCData[16])

{ //接收數(shù)據(jù)正確發(fā)送確認(rèn)信號

m_ctrlComm.SetOutput(COleVariant(“K@”));   //可以在下面自行加上對數(shù)據(jù)的處理

if(!m_quit)//如果沒有結(jié)束信號則續(xù)傳數(shù)據(jù)

m_ctrlComm.SetOutput(COleVariant(“C@”));

else

m_ctrlComm.SetOutput(COleVariant(“Z@”));

else //接收數(shù)據(jù)出錯要求重發(fā)數(shù)據(jù)

m_ctrlComm.SetOutput(COleVariant(“R@”));

(7)為按鈕IDC_BUTTON_START和IDC_BUTTON_QUIT添加消息處理函數(shù)OnButtonStart()和OnButtonQuit()

void CSCommTestDlg::OnButtonQuit()

m_quit=TRUE;

void CSCommTestDlg::OnButtonStart()

m_quit=FALSE;

m_ctrlComm.SetOutput(COleVariant("A@"));   //發(fā)送請求信號

4 結(jié)束語

本文運(yùn)用VC++和MFC開發(fā)了計算機(jī)與PLC的通訊系統(tǒng),充分利用計算機(jī)和PLC本身的資源實現(xiàn)了上位機(jī)對PLC的實時監(jiān)控,可以有效地對作業(yè)工具進(jìn)行監(jiān)控和管理。本文介紹的通訊系統(tǒng)用于超高壓帶電作業(yè)機(jī)器人的控制系統(tǒng),實踐表明,系統(tǒng)簡練、穩(wěn)定,取得了令人滿意的效果。

參考文獻(xiàn)

[1] 李志虎等.基于Visual C++的上位機(jī)和PLC的通信實現(xiàn).計算機(jī)工程,2000(8)

[2] 朱正禮等.基于VC++的PLC與上位機(jī)的通訊.電氣傳動,2002(2)

[3] 西門子有限公司.西門子S7-200可編程序控制器系統(tǒng)手冊,1999

標(biāo)簽:

點贊

分享到:

上一篇:LonWorks控制器芯片的設(shè)計擴(kuò)...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡介|會員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號