新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PC機與變頻器的串行通信

        PC機與變頻器的串行通信

        作者: 時間:2016-12-16 來源:網絡 收藏
        引言
          計算機串行通信是計算機與控制設備(如變頻器)進行數據傳送的一種通信方式,也是實現工業自動控制經常用到的通信模式。每一種通信方式都嚴格約定了與其對應的通信協議。要確保計算機與變頻器之間能正常通信,就必須遵照變頻器通信協議編寫通信程序。本文就帶有rs-485通信接口的日普變頻器作為研究對象,設計了變頻器網絡監控的方案,實現了對變頻器各項參數的在線監視和控制。以下就圍繞如何在c++builder編程環境下,利用api函數編寫計算機與日普變頻器(rp3200)之間的串行通信程序進行闡述。
        串行通信
          串行通信在工業系統控制的范疇中一直占據著極其重要的地位,串行端口(rs-232)是計算機上的標準配置,常用于連接調制解調器來傳輸數據,在計算機的硬件設備管理器中可以看到,定義為com1、com2等。常用的串行通信方式有兩種,分別是rs-232和rs-485,本文以rs-485方式為例進行介紹。
        使用c++builder api函數編寫通信程序
          c++builder本身不提供單獨的串行通信組件,這不是說它不能使用這項功能,而是必須使用一些windowsapi函數來達到這個目的。windowsapi是由操作系統提供的函數,這些函數可以為程序設計人員提供相當多的執行功能,就連操作系統本身也是由這些api函數所組成,由于已經將win32api均聲明進去了,因此在中使用api時只要直接使用即可。使用時必須以api函數的定義使用,才可以得到正確的結果,尤其參數的定義更是重要,使用時必須注意和定義相符,否則執行結果將會出錯,以下就先說明這些必備的函數。
        c++builder中與串行通信相關的api函數
          c++builder本身并不提供單獨的串行通信組件,而是使用一些windowsapi的函數來達到此目的。這些函數是由操作系統所提供,可以為程序設計人員提供相當多的執行功能。api中與串行通信相關的函數約有20個,以下對經常使用的函數作以討論。
          打開串行端口
          hcomm=createfile(comno,generic_read|generic_write,
          0,null,open_existing,1,0)
          函數參數定義如下:
          hcomm:createfile()函數的返回值,程序使用此返回值進行相關的串行端口操作。
          comno:定義串行端口號,為com1、com2等。
          generic_read|generic_write:對串行端口的讀/寫操作。
          0:是否共享串行端口,通常不會將串行端口與其它程序共享,因此設為0,否則為1。
          null:函數的返回值hcomm是否可被子程序繼承,此處設為不可繼承。
          open_existing:打開端口的方式,串行端口是一種設備,必須指定為open_existing方式。
          1:使用同步或異步方式傳輸數據,變頻器為異步方式,因此設為1。
          0:由于使用串行端口編程,設為0。
          得到串行端口狀態
          getcommstate(hcomm,&dcb)
          函數參數定義如下:
          hcomm:createfile()函數的返回值。
          dcb:串行端口控制塊地址,負責對串行端口參數進行設置,具體參數如下:
          dcb.baudrate:設置串行端口的波特率,有19200kb/s、9600kb/s、4800kb/s幾種,一般為:9600kb/s。
          dcb.bytesize:設置串行端口的數據位數,有5、6、7、8幾種,變頻器數據位數為8。
          dcb.parity:設置串行端口的校驗位檢查,有none、even、odd幾種,設為none。
          dcb.stopbits:設置串行端口的停止位數,有1、1.5、2幾種,變頻器的停止位數為1。
          設置串行端口狀態
          setcommstate (hcomm,&dcb)
          函數參數定義與getcommstate()函數相同。
          向串行端口寫數據
          writefile(hcomm,senddata,bs,&lrc,null)
          函數參數定義如下:
          hcomm:createfile()函數的返回值。
          senddata:寫數據的地址。
          bs:寫入數據的字節數。
          lrc:被寫入的數據地址。
          null:寫入數據的同步檢查,串行端口采用同步通信時可以設為null。
          清除串行端口的錯誤或將串行端口當前的數據狀態送至輸入緩沖區
          clearcommerror(hcomm,&dwerror,&cs)
          函數參數定義如下:
          hcomm:createfile()函數的返回值。
          dwerror:返回錯誤信息代碼。
          cs:指向串行端口狀態的結構變量。
          從串行端口的輸入緩沖區讀出數據
          readfile(hcomm,inbuff,cs.cbinque,&nbytesread,null);函數參數定義如下:
          hcomm:createfile()函數的返回值。
          inbuff:指向用來存儲數據的地址。
          cs.cbinque:讀取數據的字節數。
          nbytesread:總的讀取字節數。
          null:如果不進行后臺工作,串行端口設為null。
          關閉串行端口
          closehandle(hcomm)
          函數參數定義如下:
          hcomm:createfile()函數的返回值。
        變頻器的監控系統設計
          硬件連接框圖
          本文設計的監控系統采用平衡發送和差分接收方式實現通信。由于傳輸線通常使用雙絞線,又是差分傳輸,所以有極強的抗共模干擾的能力。rs-485最大的通信距離可達1219m,rs-485最大傳輸速率為10mb/s。rs-485采用半雙工工作方式,支持多點數據通信。總線網絡拓撲一般采用終端匹配的總線型結構。
          rs-485總線一般最大支持32個節點。
          本設計采用帶有rs-485接口的日普變頻器(rp3200)控制電機運轉,上位計算機和變頻器進行通訊,計算機通過讀寫變頻器的參數來監控變頻器的運行狀態。上位機為主控計算機,下位機為被控變頻器(最多為31個)。主控和被控之間的串行控制信號始終是主控啟動傳送,被控對此作出響應。某一個時刻,主控和一個被控進行信號傳送,所以要預先給每個被控分配地址號,并由主控指定地址執行發送。被控接收到主控來的信號后執行其功能,并返回應答給主控。由于計算機本身支持rs-232串行通信方式,所以需要用rs-232與rs-485轉換器將計算機與變頻器連接起來。上位機與變頻器控制組網結構如圖1所示。

        本文引用地址:http://www.104case.com/article/201612/330996.htm

          變頻器通信功能設置
          此變頻器控制命令和方式有三種:數字面板控制、端子控制和rs-485通訊控制,變頻器的默認出廠設置為變頻器控制面板控制,這不符合我們與pc
          機通訊的要求,為了能使變頻器與 pc機之間通訊,我們對變頻器作如下設置:
          操作方式選擇
          在數字面板中選擇參數設定,將運行方式按表1設置為rs-485運行方式。

          通信參數設定
          通信地址設定:定義設備地址 1 – 31,在線不允許兩個設備占用一個地址
          傳送中斷檢測時間:設定 范圍為:0-60sec
          通信規格設定:
          接口:rs-485 同步方式:異步
          傳輸參數:
          波特率:可從 1200,2400,4800,9600,19200 等中選擇
          停止位:固定為 1位
          變頻器通信命令介紹
          通信數字元格式
          數字元格式如圖2所示。

        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 隆安县| 义乌市| 昌图县| 潜江市| 上杭县| 太谷县| 沅江市| 芜湖市| 剑阁县| 时尚| 奉化市| 上蔡县| 独山县| 古浪县| 金平| 泰兴市| 长海县| 大丰市| 宁城县| 香河县| 新昌县| 原平市| 嘉黎县| 项城市| 无锡市| 车险| 师宗县| 三门县| 贵德县| 通许县| 广河县| 罗山县| 黄山市| 乌兰县| 定襄县| 张家港市| 襄樊市| 蓬溪县| 古浪县| 西乡县| 阿拉善左旗|