關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 用歐姆龍PLC與上位機通信實現振動磨的變頻控制

        用歐姆龍PLC與上位機通信實現振動磨的變頻控制

        作者: 時間:2011-01-27 來源:網絡 收藏

        1.引 言

        當今,在自動化的工業生產中,變頻控制往往與計算機遠程控制相聯系在一起,從而實現電機的遠程變頻控制。可編程序控制器系統不僅可作為單一的機電控制設備,而且作為通用的自動控制設備,也被大量地用于過程工業的自動控制。歐姆龍最新推出的可編程控制器SYSMAC CP1H,具有“高度擴張性”的端子臺型一體化[1]。與以往產品CPM2A 40 點輸入輸出型為相同尺寸,但處理速度可達到約10倍的性能。本課題通過控制機(即為)設定比例運行參數,然后控制機通過D/A轉換模件發出控制變頻調速器的指令,使變頻調速器帶動電機按輸入的速度和時間運轉。基于OMRON 的鏈接通信(有通信協議),我們采用功能強大的Visual C++6.0語言來實現這種小型集散控制系統的上、下位機的通信和友好的監控界面,實現了間的通信。

        2.通訊軟件的設計

        在本項目中,選用計算機, 下位機選用日本Omron公司的CP1H系列XA40DR-A可編程序控制器。在計算機外設中,RS-232串口因為其組成方式簡單,編程控制方便而成為應用最為廣泛的I/O通道之一。32 位下程序通常采用兩種方法實現:一是利用ActiveX控件; 二是使用API通信函數。使用ActiveX控件, 程序實現非常簡單, 結構清晰,缺點是欠靈活; 使用API通信函數的優缺點則基本上相反[2]。的MSComm是Microsoft 公司提供的簡化Windows 下串行通信編程的ActiveX控件,它為應用程序提供了通過串行接口收發數據的簡便方法,筆者采用了這種方法。其端口接線見附圖。

        2.1 與PLC的通訊協議

        HOST Link系統使用HOST Link 通信協議進行通信,上位機具有傳送優先權,總是首先發出命令并啟動通信,HOST Link 通信單元收到命令交由PLC執行,然后將執行結果返回上位機,兩者以幀為單位輪流交換數據。

        2.2 上位機的PLC鏈接通訊

        通信時一組傳送的數據稱為塊,它是命令或響應的單位,從上位機發送到HOSTLink 單元的數據稱為命令塊,相應的,從HOSTLink單元發送到上位機的數據稱為響應塊。多點通信時,單幀發送的最大數據塊為131 個字符,因此當一個數據塊含有132 個或更多字符時,要分成兩幀或多幀進行發送。多幀發送時中間幀的格式為:正文、FCS、分界符。起始幀、中間幀的長度為131 ,結束幀的長度最多為131 個字符。

        Omron系列的PLC 通過RS232 口與主機通信有兩種方式,第一種是由上位機向PLC 發送初始命令,第二種是由PLC 向上位機發送初始命令[3]。在監測系統中一般采用第一種方式。有關通信協議如下所述:

        2.2.1上位機→PLC 的命令格式

        其中:

        (1)@為起始標志符;

        (2)N2 、N1 為PLC 節點標志碼,由兩位十進制數表示,它們用來指定與上位機通信的PLC。而PLC 自己的通信節點碼可由它的DM6648 和DM6653 來設置;

        (3)CMD2 、CMD1 為兩字節命令碼;

        (4)MT 為命令內容,用來設置具體的命令參數;

        (5)V2、V1 為兩字節的幀校驗碼,它是從開始符“@”到MT碼結束的所有字符的ASCII 碼按位異或的結果; 幀校驗和是一個轉換成2 個ASCII 字符的8 位數據。它把幀中每一個字符順序地進行異或操作而得到的結果,即把幀的第一個字符到正文結束的所有字符轉換成二進制形式的ASCII 碼后,逐個異或而得到的[4]。當發送命令時,將其加在命令格式中,作為幀的一部分發送到接收端。當接收數據時,按上述步驟重新計算FCS ,當計算結果與數據塊中所帶的FCS 相同時,說明傳輸無誤,否則,說明接收到的數據不正確。

        (6)“*”和“CR”兩字符表示命令結束。

        例如,@00WD00060500表示寫一個數500到節點為0的PLC的DM0006中。

        2.2.2 PLC→上位機的響應格式

        其中S2 、S1 為命令結束狀態碼,如00 表示正常結束,01 表示RUN 模態下PLC 無法完成上位機命令,其余符號代碼意義同上。實現上位機與HOST Link 通信單元的通信只需編寫上位機程序,因為HOST Link 通信單元自身帶有通信程序,上位機下發命令,地址相符的PLC 自動上傳響應幀,所以這一部分程序不需要客戶編寫,但是,編寫上位機的通信程序時,通信參數的設置必須保證與PLC 的通信參數一致性。

        3.用編寫串行通信程序

        首先建立一個基于對話框的MFC應用程序SCommTest,支持ActiveX控件,電話形狀的控件是在系統中注冊過的MicrosoftCommunications Control, version 6.0,接受缺省的選項。

        1.打開串口設置串口參數

        在主對話框CSCommTestDlg::OnInitDialog()中打開串口,加入如下代碼:

        if(m_ctrlComm.GetPortOpen())
        m_ctrlComm.SetPortOpen(FALSE);
        m_ctrlComm.SetCommPort(1); //選擇com1
        i f ( ! m _ c t r l C o m m . G e t P o r t O p e n ( ) ) m _ c t r l C o m m .
        SetPortOpen(TRUE);//打開串口
        else
        AfxMessageBox("cannot open serial port");
        m_ctrlComm.SetSettings("9600,E,7,2"); //波特率9600,偶校驗,7個數據位,2個停止位m_ctrlComm.SetInputModel(1); //1:表示以二進制方式檢取數據m_ctrlComm.SetRThreshold(1);
        //參數1表示每當串口接收緩沖區中有多于或等于1個字符時將引發一個接收數據的OnComm事件
        m_ctrlComm.SetInputLen(0); //設置當前接收區數據長度為0
        m_ctrlComm.GetInput();//先預讀緩沖區以清除殘留數據

        2.發送數據

        為發送按鈕添加一個單擊消息BN_CLICKED處理函數,選擇IDC_BUTTON_MANUALSEND,添加OnButtonManualsend()函數,并在函數中添加如下代碼:

        UpdateData(TRUE); //讀取編輯框內容
        SendData(m_strTXData1,6);
        // m_strTXData1表示發送速度命令的具體數值,6表示寫數據的地址DM0006
        Sleep(100);
        SendData(m_strTXData2,12); //m_strTXData1表示發送時間命令的具體數值,12表示寫數據的地址DM0012

        3.發送命令

        按照命令格式,本課題主要發送兩個WD命令:

        (1)數據采用十進制發送,向DM0006中寫入速度指令;

        (2)數據采用十進制發送,向DM0012中寫入時間指令。部分程序如下:

        Void CSCommTestDlg::SendData(int m_TobeSend,intm_address)
        { CByteArray Array;
        unsigned char auchMsg[45]={0}
        auchMsg[0]=64; // 起始標志符
        auchMsg[1]=0x0; //節點號
        auchMsg[2]=0x0; auchMsg[3]=‘W‘; //命令符
        auchMsg[4]=‘D‘;
        auchMsg[5]=m_address/1000;
        auchMsg[6]=(m_address%1000)/100;
        auchMsg[7]=(m_address%100)/10;
        auchMsg[8]=m_address%10;
        auchMsg[9]=m_TobeSend/1000;
        auchMsg[10]=(m_TobeSend%1000)/10;
        auchMsg[11]=(m_TobeSend%100)/10;
        auchMsg[12]=m_TobeSend%10;
        LRC(auchMsg,13);
        //auchMsg[13] ,auchMsg[14] ,保存FCS值
        auchMsg[15]=‘*‘; //命令結束符
        auchMsg[16]=13;
        Array.RemoveAll();
        for (Count=0;Count17;Count++)
        Array.Add(auchMsg[Count]);
        m _ c t r l C o m m . S e t O u t p u t ( C O l e Va r i a n t ( A r r a y ) ) ;

        4.計算校驗碼函數

        unsigned char uchLRC = 0 ; 初始值設定
        while (usDataLen——)
        {uchLRC ︿= *auchMsg++; }
        unsigned char high=0xF0;
        //high為校驗碼的高位
        unsigned char low=0x0F;
        //low為校驗碼的低位
        high=uchLRC;
        low=uchLRC;
        high>>=4;右移四位
        if(high=9)
        high=high+48;
        else
        high=high+55;
        if(low=9)
        low=low+48;
        else
        low=low+55;
        *auchMsg++=high;
        *auchMsg++=low;

        四.結束語

        此程序在中運行通過,并成功應用于的控制中。該系統采用OMRON XA40DR-A PLC與上位機連接組成控制系統,上位機通過串行口向PLC發出寫命令及數據,PLC接受數據后,通過D/A轉換模塊,將模擬量發給變頻器,從而實現了振動速度和時間的控制。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 乐陵市| 石阡县| 泗洪县| 色达县| 大港区| 潢川县| 涞源县| 威海市| 波密县| 娄烦县| 阿鲁科尔沁旗| 大姚县| 榆社县| 德兴市| 通城县| 大新县| 墨脱县| 阳山县| 恩平市| 诸城市| 修水县| 闽侯县| 读书| 岗巴县| 荣成市| 朔州市| 蒙自县| 霞浦县| 庆安县| 合水县| 东辽县| 河北区| 井冈山市| 威宁| 临泉县| 蓬莱市| 衡南县| 钦州市| 象州县| 措美县| 油尖旺区|