• <blockquote id="fficu"><optgroup id="fficu"></optgroup></blockquote>

    <table id="fficu"></table>

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

      案例頻道

      用歐姆龍PLC與上位機通信實(shí)現振動(dòng)磨的變頻控制
        摘要:本文給出了用VC++6.0實(shí)現OMRON可編程控制器與上位機之間的通信程序設計方法,并提供了利用RS232串行通訊端口實(shí)現計算機與可編程控制器通訊的方法。此方案成功應用在振動(dòng)磨的變頻控制中。

        關(guān)鍵詞:上位機;PLC;串口通信;VC++6.0;振動(dòng)磨

        1.引 言

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

        2.通訊軟件的設計

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



        2.1 上位機與PLC的通訊協(xié)議

          HOST Link系統使用HOST Link 通信協(xié)議進(jìn)行通信,上位機具有傳送優(yōu)先權,總是首先發(fā)出命令并啟動(dòng)通信,HOST Link 通信單元收到命令交由PLC執行,然后將執行結果返回上位機,兩者以幀為單位輪流交換數據。

        2.2 上位機的PLC鏈接通訊

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

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

        2.2.1上位機→PLC 的命令格式

          其中:

          (1)@為起始標志符;

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

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

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

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

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

          例如,@00WD00060500表示寫(xiě)一個(gè)數500到節點(diǎn)為0的PLC的DM0006中。

        2.2.2 PLC→上位機的響應格式




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

        3.用VC++6.0編寫(xiě)串行通信程序


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

        1.打開(kāi)串口設置串口參數

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

          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);//打開(kāi)串口

          else

          AfxMessageBox("cannot open serial port");

          m_ctrlComm.SetSettings("9600,E,7,2"); //波特率9600,偶校驗,7個(gè)數據位,2個(gè)停止位
      m_ctrlComm.SetInputModel(1); //1:表示以二進(jìn)制方式檢取數據m_ctrlComm.SetRThreshold(1);

          //參數1表示每當串口接收緩沖區中有多于或等于1個(gè)字符時(shí)將引發(fā)一個(gè)接收數據的OnComm事件

          m_ctrlComm.SetInputLen(0); //設置當前接收區數據長(cháng)度為0

          m_ctrlComm.GetInput();//先預讀緩沖區以清除殘留數據

        2.發(fā)送數據

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

          UpdateData(TRUE); //讀取編輯框內容

          SendData(m_strTXData1,6);

          // m_strTXData1表示發(fā)送速度命令的具體數值,6表示寫(xiě)數據的地址DM0006

          Sleep(100);

          SendData(m_strTXData2,12); //m_strTXData1表示發(fā)送時(shí)間命令的具體數值,12表示寫(xiě)數據的地址DM00123.發(fā)送命令

          按照命令格式,本課題主要發(fā)送兩個(gè)WD命令:

          (1)數據采用十進(jìn)制發(fā)送,向DM0006中寫(xiě)入速度指令;

          (2)數據采用十進(jìn)制發(fā)送,向DM0012中寫(xiě)入時(shí)間指令。部分程序如下:

          Void CSCommTestDlg::SendData(int m_TobeSend,intm_address)

          { CByteArray Array;

          unsigned char auchMsg[45]={0}

          auchMsg[0]=64; // 起始標志符

          auchMsg[1]=0x0; //節點(diǎn)號

          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;Count<17;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;

        四.結束語(yǔ)

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

        參考文獻

        [1]OMRON公司.CP1H操作手冊.2005

        [2]萬(wàn)曼影.視窗環(huán)境下歐姆龍PLC的實(shí)時(shí)通信.微處理機.2004(6)

        [3]何華東,趙喜榮.PLC與上位計算機的串行通信程序設計.機電工程.2002(6)

        [4]OMRON公司.CPM編程手冊.2003基金項目:國家自然科學(xué)基金資助項目(編號:50575147)

        作者簡(jiǎn)介:蘇丹(1982-),女,在讀碩士;

        王樹(shù)林(1951—),男,教授,博士生導師。

      熱點(diǎn)新聞

      推薦產(chǎn)品

      x
      • 在線(xiàn)反饋
      1.我有以下需求:



      2.詳細的需求:
      姓名:
      單位:
      電話(huà):
      郵件:
      欧美精品欧美人与动人物牲交_日韩乱码人妻无码中文_国产私拍大尺度在线视频_亚洲男人综合久久综合天

    2. <blockquote id="fficu"><optgroup id="fficu"></optgroup></blockquote>

      <table id="fficu"></table>

      <sup id="fficu"></sup>
      <output id="fficu"></output>