• 
    <ul id="auswy"><sup id="auswy"></sup></ul>
  • <ul id="auswy"></ul>
    ABB
    關(guān)注中國自動(dòng)化產(chǎn)業(yè)發(fā)展的先行者!
    CAIAC 2025
    2025工業(yè)安全大會(huì)
    OICT公益講堂
    當(dāng)前位置:首頁 >> 案例 >> 案例首頁

    案例頻道

    基于Visual C++6.0的PLC與計(jì)算機(jī)之間通信的設(shè)計(jì)
    • 企業(yè):控制網(wǎng)     領(lǐng)域:PLC /PAC/PCC/RTU    
    • 點(diǎn)擊數(shù):3789     發(fā)布時(shí)間:2008-03-03 23:12:15
    • 分享到:



        王  蕓(1982-)
    女,湖北人 ,助教,碩士研究生,(安徽師范大學(xué)物電學(xué)院,安徽  蕪湖  241000),研究方向?yàn)橛?jì)算機(jī)應(yīng)用。

    基金項(xiàng)目:安徽省教育廳2006年自然科學(xué)基金(NO.2006kj077B)

    摘要:研究了在Visual C++6.0環(huán)境下利用MSComm控件實(shí)現(xiàn)系列PLC與上位計(jì)算機(jī)通信的問題,并給出了基于Visual C++6.0的通信程序設(shè)計(jì)方法。該通信程序能讀寫PLC內(nèi)部各種軟設(shè)備。實(shí)踐證明,在Visual C++6.0下實(shí)現(xiàn)系列PLC與計(jì)算機(jī)通信簡單使用,具有很強(qiáng)的推廣應(yīng)用價(jià)值。

    關(guān)鍵詞:PLC;Visual C++6.0;MSComm控件;通信

    Abstract: In this paper, the issue of implementing communication between  PLC and computer is studied base on Visual C++6.0 developing environment. A method for designing communication program by Visual C++6.0 is given. The communication program can read or write various kinds of soft devices inside  PLC. The practice proved that the communication between  PLC and computer under Visual C++6.0 is simple and applicable. It is worth to be promoted.

    Key words: PLC;Visual C++6.0;MSComm control box;Communication

    1 引言

        可編程控制器PLC(Programmable Logic Controller),由于其安全可靠、功能齊全、應(yīng)用靈活、操作維修容易和穩(wěn)定可靠等特點(diǎn)而得到廣泛應(yīng)用。但它也存在一些缺點(diǎn),如不能給用戶提供良好的人機(jī)控制和管理界面。隨著工廠自動(dòng)化程序要求的不斷提高,生產(chǎn)過程中,要監(jiān)視、控制PLC內(nèi)部的數(shù)據(jù)與運(yùn)行狀況。對(duì)于中小型控制系統(tǒng),如采用廠家提供的通信模塊則成本高、投資較大、靈活性差。因此用戶自己開發(fā)計(jì)算機(jī)與PLC的通信模塊程序不僅可以滿足不同情況下數(shù)據(jù)傳輸速率與穩(wěn)定性的要求而且對(duì)節(jié)約外資、靈活應(yīng)用具有重要意義。本文以三菱PLC為例,介紹一種通過Visual C++編程實(shí)現(xiàn)計(jì)算機(jī)作為上位機(jī)與PLC的通信,該通信程序能讀寫PLC內(nèi)部各種軟設(shè)備。

    2 通信原理

        系統(tǒng)采用RS-232C總線實(shí)現(xiàn),直接與計(jì)算機(jī)的Host-Link單元構(gòu)成1:1點(diǎn)對(duì)點(diǎn)通信系統(tǒng)。設(shè)定計(jì)算機(jī)即上位機(jī)具有高的優(yōu)先級(jí),通信以“幀”為單位進(jìn)行,計(jì)算機(jī)首先向PLC發(fā)出命令幀,發(fā)送查詢數(shù)據(jù)的指令,目的是查詢PLC中端子的狀態(tài)和DM區(qū)的值等。PLC接收了指令后,進(jìn)行校驗(yàn),檢查數(shù)據(jù)是否正確,如果正確,則向上位機(jī)發(fā)送響應(yīng)幀,傳送數(shù)據(jù)(包含首尾校驗(yàn)字節(jié))。否則,PLC拒絕向上位機(jī)傳送數(shù)據(jù)。上位機(jī)接收到PLC傳送的數(shù)據(jù),也要判斷正確與否,如果正確,則接收;否則,拒絕接收。

        要使計(jì)算機(jī)與PLC聯(lián)接單元之間正確交換數(shù)據(jù),必須確保以下條件成立:(1)上下位機(jī)之間波特率以及數(shù)據(jù)格式一致;(2)在通信程序中,只使用協(xié)議規(guī)定的命令級(jí)中的命令;(3)當(dāng)上位機(jī)向PLC發(fā)送數(shù)據(jù)或讀取數(shù)據(jù)均由上位機(jī)主動(dòng)以命令幀形式發(fā)出;(4)對(duì)上位機(jī)發(fā)來的命令幀,PLC用響應(yīng)幀應(yīng)答,若命令較長時(shí),可分為若干幀發(fā)送。只要能順利實(shí)現(xiàn)命令幀和響應(yīng)幀的應(yīng)答,就能使要交換的數(shù)據(jù)順利達(dá)到對(duì)方。對(duì)于PLC發(fā)回的響應(yīng)幀用戶必須按其格式進(jìn)行拆裝識(shí)別,才能正確分離出交換數(shù)據(jù)及有用狀態(tài)信息。

    3 MSComm控件特點(diǎn)

        利用VC的MSComm控件,實(shí)際上是一些Windows API函數(shù)的有機(jī)集成,它以屬性和事件的形式提供了對(duì)Windows通訊驅(qū)動(dòng)程序API函數(shù)接口,為應(yīng)用程序提供了通過串行接口收發(fā)數(shù)據(jù)的簡便方法。因此,程序員只需在程序中設(shè)置和監(jiān)視MSComm控件的屬性和事件即可完成對(duì)串口的編程。

        MSComm控件提供了一種有效的處理串口交互作用的方法:事件驅(qū)動(dòng)法,該方法利用OnComm事件捕獲并處理通信及其錯(cuò)誤,當(dāng)CommEvent屬性發(fā)生變化時(shí),就產(chǎn)生事件并等待相應(yīng)處理。每個(gè)MSComm控件都有一個(gè)串口相對(duì)應(yīng)。

        MSComm控件基本屬性如下:

        CommPort:設(shè)置并返回通信端口號(hào)。Windows系統(tǒng)將會(huì)利用該端口與外界通信。

        Setings:設(shè)置并返回初始化參數(shù)。其組成格式為“BBBB.P.D.S”。BBBB為數(shù)據(jù)速率,P為奇偶校驗(yàn),D為數(shù)據(jù)位數(shù),S為停止位數(shù)。

        PortOpen:設(shè)置并返回通信端口的狀態(tài)。也可以打開和關(guān)閉端口。

        OutPut:向傳輸緩沖區(qū)寫IB的數(shù)據(jù)。

        InPut:將傳送到輸入緩沖區(qū)的字符讀到程序里。

        RThreshold:設(shè)置在產(chǎn)生OnComm之前要接受的字符數(shù)。

        InputLen:設(shè)置并返回Input屬性從接收緩沖區(qū)讀取的字符數(shù)。

        InBuffersize:設(shè)置或返回輸入緩沖區(qū)的大小。

        InBufferCount:返回輸入緩沖區(qū)內(nèi)等待讀取的字節(jié)個(gè)數(shù);可通過設(shè)置該屬性值為0來清除接收緩沖區(qū)。

        InputMode:設(shè)置或返回傳輸數(shù)據(jù)的類型。

        CommEvent:傳回OnComm事件發(fā)生時(shí)的數(shù)值碼。

    4 通信程序設(shè)計(jì)

        在應(yīng)用程序中,主要采用MSComm控件與PLC進(jìn)行通信,加載窗體時(shí)初始化通信參數(shù),讀數(shù)據(jù)時(shí)由上位機(jī)通過串行口向PLC發(fā)出讀數(shù)據(jù)命令幀,PLC發(fā)出響應(yīng)幀并將數(shù)據(jù)準(zhǔn)備好,這時(shí)上位機(jī)讀串行口就可讀取需要的數(shù)據(jù);寫數(shù)據(jù)時(shí)上位機(jī)通過串行口向PLC發(fā)出寫數(shù)據(jù)命令幀,PLC接受命令,并發(fā)送響應(yīng)幀。

        (1)在進(jìn)行通信之前首先要對(duì)PLC端進(jìn)行編程初始化,初始化程序如下:

    LD M8002
    MOV K0  D8121
    MOV H4881  D8120

        M8002為特殊功能寄存器,只在PLC轉(zhuǎn)為運(yùn)行時(shí)接通一次。D8121設(shè)定PLC站號(hào)寄存器,在這里設(shè)定PLC的站號(hào)為0號(hào)。通信控制寄存器D8120中移入16進(jìn)制數(shù)4881,對(duì)照參數(shù)表,PLC端的設(shè)定為通信速率9600b/s,無校驗(yàn),8位數(shù)據(jù)位,1位停止位。采用RS232接口,數(shù)據(jù)幀中不添加校驗(yàn)位。上位機(jī)端要與之相匹配。

        (2)裝載窗體時(shí)初始化并打開串口

    m_Com.SetCommPort(1);   //選擇COM1
    m_Com.SetInBufferSize(1024);  //設(shè)置輸入緩沖區(qū)大小
    m_Com.SetOutBufferSize(512);  //設(shè)置輸出緩沖區(qū)大小
    if(!m_Com.GetPortOpen())        //打開串口
    m_Com.SetPortOpen(TRUE);    //打開通信端口,準(zhǔn)備通信
     m_Com.Settings(9600,n,8,1);    //通信速率9600b/s,無校驗(yàn),8位數(shù)據(jù)位,1位停止位
    m_Com.SetRThreashold();
    m_Com.SetInputLen(1);
    m_Com.SetInputMode(0);
    (3)發(fā)送主程序(串口讀寫)
    由GetInput()和SetOutput()函數(shù)完成串口讀寫。相應(yīng)的部分程序?yàn)椋?BR>Void CMainFramme::OnCommSend()
    {
     //準(zhǔn)備要發(fā)送的數(shù)據(jù)存放在數(shù)組SXData[]中
             CByteArray Send;
             Send.RemoveAll();
             Send.SetSize(m);
             For(i=0;i<m;i++)
             Array.SetAt(i;SxData[i]);
             m_Com.SetOutput(ColeVariant(Send));
    }
    Void CMainFramme::OnCommMscomm()
    {
             VARIANT vResponse;
             int  k;
             k=m_Com.GetInBuffetCount();  //接收到的字符數(shù)目
             if(k>0)
             {vResponse=m_Com.GetInput();    //read
             }

        在實(shí)際應(yīng)用中,從站被動(dòng)的接收上位機(jī)發(fā)出的指令后做出的響應(yīng),然后將信息傳回上位機(jī),由于上位機(jī)在整個(gè)通信的過程中不能被中斷,因此上位機(jī)在接收與發(fā)送數(shù)據(jù)過程中采用了不可中斷的方法。

    5 結(jié)束語

        本系統(tǒng)根據(jù)計(jì)算機(jī)和PLC的特點(diǎn),通過利用PLC的自由口通信協(xié)議,利用VC++6.0開發(fā)工具,開發(fā)出PC與PLC通信的應(yīng)用軟件,實(shí)踐證明這種方法結(jié)構(gòu)簡單,開發(fā)周期短,節(jié)約投資,對(duì)小規(guī)模的控制系統(tǒng)有極大的現(xiàn)實(shí)意義。

    作者信息:

        王  蕓,高菲菲  (安徽師范大學(xué)物電學(xué)院,安徽  蕪湖  241000)

    參考文獻(xiàn)

        [1] 徐世許.可編程序控制器原理·應(yīng)用·網(wǎng)絡(luò)[M].合肥:中國科學(xué)技術(shù)大學(xué)出版社,2005:244-247.

        [2] MITSUBISHI公司. MITSUBISHI FX-232AW接口單元通信手冊(cè)[M].上海:三菱公司,2000:25-33.

        [3] 陳興,張禮全,史旺旺.用VC++實(shí)現(xiàn)PC與多PLC之間串行通信的方法[J].微計(jì)算機(jī)信息,2004(20):6-7.

    熱點(diǎn)新聞

    推薦產(chǎn)品

    x
    • 在線反饋
    1.我有以下需求:



    2.詳細(xì)的需求:
    姓名:
    單位:
    電話:
    郵件: