• <ul id="ikuqo"></ul>
    <tfoot id="ikuqo"></tfoot>
    <tfoot id="ikuqo"></tfoot>
  • <ul id="ikuqo"><sup id="ikuqo"></sup></ul>
  • 閱讀 | 訂閱
    閱讀 | 訂閱
    數控機床

    基于MoBus協議的變頻器VC++控制系統

    星之球激光 來源:中國自動化網2012-01-11 我要評論(0 )   

    1、 前言 在工業控制領域中,經常要用變頻器去控制交流電機的轉速、轉向等,盡管變頻器自身帶有控制面,具有簡單、有效的特點,但由于現場操作不夠方便,直觀性差以及僅...

    1、 前言

    在工業控制領域中,經常要用變頻器去控制交流電機的轉速、轉向等,盡管變頻器自身帶有控制面,具有簡單、有效的特點,但由于現場操作不夠方便,直觀性差以及僅能實現單機控制等缺點,針對這些缺點,現在的變頻器都帶有rs485通信接口,使用戶能方便靈活地選擇變頻器的強大功能,在windows下開發工控軟件,可利用windows的豐富資源,方便地生成各種采單及美觀大方的圖形界面。

    mobus協議是應用于電子控制器上的一種通用語言,通過此協議控制器之間可以相互通信,而visual c++ 6.0的activex控件————mscomm通信控制能夠滿足windows環境下開發微機的低層資源。本文介紹的方案使用mobus協議的ascⅱ傳輸模式,通過visual c++ 6.0編程實現windows環境下,臺達vfd-s變頻器的計算機控制系統

    2、 系統硬件設計

    現在一般的pc機都有rs232串口,但少有rs485口,而實現與變頻器進行長距離且抗噪音干擾的通信,一般多采用一塊rs232/485轉換器,總體的系統方框圖如圖1

    目前,rs232/485轉換器有無源和有源兩種,如果通信距離較近,采用無源轉換即可。可以購買也可以自己設計。

    3、mobus協議下ascⅱ模式的通信過程及臺達vfd-s型變頻器的通信要求

    3.1mobus協議規定的通信過程

    mobus協議是一種可靠而有效的工業控制系統通信協議,得到了眾多硬件廠商的支持,并廣泛應用。mobus協議的數據通訊通過主機與從機之間查詢/回應的方式實現,查詢消息中的功能代碼告知從設備要執行何種功能,數據段包含了從設備要執行的功能的附加消息。從設備產生回應消息,回應消息中的功能代碼是查詢消息中功能代碼的回應,查詢消息、回應消息中都有用于判斷傳輸是否正確的錯誤檢測域。

    3.2 ascⅱ模式的通信數據格式

    mobus協議系統中有兩種有效的傳輸模式:ascⅱ(美國標準信息交換碼)模式和rtu(遠程終端裝置)模式,ascⅱ模式通信時,在消息中的每個8-bit數據由兩個ascⅱ字元所組成。例如,一個1-byte資料64h(十六進制表示法),以ascⅱ“64”表示,包含了‘6’(36h)及‘4’(34h)。

    ascⅱ模式:

    ascⅱ模式采用lrc(longitudinal redundancy check)偵誤值。lrc偵誤值是將adr1至最后一個資料內容加總,得到之結果以256為單位,超出部分去除(例如得到結果為1f2h時則只取f2h),然后計算二次反補后得到的結果即為lrc偵誤值。

    3.3臺達vfd-s型變頻器的通信要求

    vfd-s系列交流馬達驅動器是內建rs485串聯通訊介面,通訊埠(rj-11)位于控制回路端子,端子定義如下:

    2:gnd 3:sg- 4:sg+ 5:+5v

    2、5pin為參數設定器操作盤之電源,做rs485通信時,請勿使用!

    使用rs485串聯通訊介面時,每臺vfd-s型必須預先在(9-00)指定通訊地址,電腦便根據其個別地址實施控制。

    4、mscomm控件介紹

    mscomm控件是微軟公司開發的專門用于串行通信的控件,它是高級語言編寫的串行通信程序和pc串口之間的橋梁,vc++ 6.0中提供了mscomm控件,用戶可以在自己的應用程序嵌入mscomm控件,利用它可以方便的進行計算機串口的通信管理。

    使用mscomm控件時,其中一個難點是對輸入緩沖區或輸出緩沖區的數據進行處理,因為向輸出緩沖區寫入的數據及從輸入緩沖區讀出的數據都是variant類型的數據,而程序中常用的通信數據既可能是文本型的字符串,又可能是二進制的數值,因此必須處理好字符串與variant類型數據間的轉換及二進制數據與variant類型數據的轉換。

    以下代碼簡單介紹如何完成使用mscomm控件時如何接收和發送字符串或二進制數值:

    ⅰ、收字符串

    variant input1; //定義一個variant結構的變量
    char *str;
    int counts;
    counts=mycomm.getinbuffercount(); //獲取接收緩沖區中的字符數
    if(counts>0)
    { input1=myco
    mm.getinput(); //將接收緩沖區內容讀至input1中
    str=(char*)(unsigned char*)input1.parray->pvdata;//將input1變量的數據指針賦值給字符指針

    ……
    ⅱ、發送字符串
    cstring senddata1;
    senddata1=”atz”;
    mycomm.setoutput(colevariant (senddata1));
    ⅲ、接收二進制數據
    variant input1; //定義variant類型變量
    byte rxdata[2048],aa1; //定義存放二進制數據的數組
    long len1,k;
    colesafearray safearray1; //定義colesafearray類的實例
    input1=mycomm.getinput();
    safearray1=input1; //將variant變量賦值colesafearray類的實例
    len1=safearray1.getonedimsize(); //使用colesafearray類的成員函數獲取數據長度
    for(k=0;k safearray1.getelement(&k,rxdata+k); //使用colesafearray類的成員函數將數據寫入數組
    ⅳ、發送二進制數據
    cbytearray array1;
    array1.removeall();
    array1.setsize(3);
    array1.setat(0,12);array1.setat(1,79);array1.setat(2,0xe2);
    mycomm.setoutput(colevariant(array1));

    5、通信程序編寫

    下面給出了利用pc機對vfd-s型臺達變頻器的串行通信控制程序:

    ⑴端口設置界面(如圖3)

    通過設置端口參數使控制程序跟變頻器的(9-00 9-01 9-04)參數設定一致,從而能夠保證正常通信,同時設置變頻器的(2-00 2-01)參數,使得變頻器的控制由rs485通訊界面輸出。

    ⑵主界面(如圖4)

    主界面用來發送控制信息給變頻器來控制電機的起止、反轉、寸動和頻率等。

    ⑶運行控制編程

    發送控制信號: 主要代碼(以正轉運行為例)

    if(nid==idc_radio1)
    { str0=":010620000012" ;
    b="0x01"+0x06+0x20+0x00+0x00+0x12;
    if(b>0xff)
    b="b"&0x0ff;
    b="b"︿c; //求校驗
    b="b"+1;
    str1.format("%02x",b);

    str3=str0+str1+"\r\n";
    mycomm.setoutput(colevariant(str3));

    接收返回信息: 通過接收返回信息來監測變頻器的狀態,包括輸出頻率、輸出電流、運轉命令、變頻器狀態以及異常代碼等。

    為提高程序效率,通常接收數據的操作都在oncomm事件中進行的,主要代碼:
    …………
    variant input1; //定義variant類型變量
    char
    rxdata[2048]; //定義存放二進制數據的數組
    long len1,k;
    colesafearray safearray1; //定義colesafearray類的實例
    cstring strdis;
    switch(mycomm.getcommevent())
    { case 2:
    input1=mycomm.getinput(); //收到 rthreshold 個字符
    safearray1=input1; //將varaiant變量賦值給colesafearray類的實例
    len1=safearray1.getonedimsize(); //使用colesafearray類的成員函數獲取數據長度
    for(k=0;k safearray1.getelement(&k,rxdata+k);#p#分頁標題#e#
    for(k=0;k { strdis+=rxdata[k]; }
    ………… //處理接收的信息

    6、小結

    本文介紹了通過vc++ 6.0的mscomm控件,遵照mobus協議中的ascⅱ模式實現了在windows環境下的計算機對變頻器的參數傳遞,運行及頻率控制以及實時監控。本人通過對整個控制系統的軟硬件設計,實現了變頻器的計算機控制,經試驗表明系統的頻率控制比使用外部avi輸入更加精確,并且該系統具有簡單、可靠、實用的優點。

     

    轉載請注明出處。

    暫無關鍵詞
    免責聲明

    ① 凡本網未注明其他出處的作品,版權均屬于激光制造網,未經本網授權不得轉載、摘編或利用其它方式使用。獲本網授權使用作品的,應在授權范圍內使 用,并注明"來源:激光制造網”。違反上述聲明者,本網將追究其相關責任。
    ② 凡本網注明其他來源的作品及圖片,均轉載自其它媒體,轉載目的在于傳遞更多信息,并不代表本媒贊同其觀點和對其真實性負責,版權歸原作者所有,如有侵權請聯系我們刪除。
    ③ 任何單位或個人認為本網內容可能涉嫌侵犯其合法權益,請及時向本網提出書面權利通知,并提供身份證明、權屬證明、具體鏈接(URL)及詳細侵權情況證明。本網在收到上述法律文件后,將會依法盡快移除相關涉嫌侵權的內容。

    網友點評
    0相關評論
    精彩導讀