<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PC機(jī)與變頻器的串行通信

          PC機(jī)與變頻器的串行通信

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

          本文引用地址:http://www.ex-cimer.com/article/201612/330996.htm

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

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

          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: PC機(jī)變頻器串行通

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();