新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于RS-485變頻器與PC機串行通信的實現

        基于RS-485變頻器與PC機串行通信的實現

        作者: 時間:2016-12-12 來源:網絡 收藏
        1引言

          目前,在我國現場控制總線中,RS-485使用最為普遍。RS-485總線的共模輸出電壓在-7V至+12V之間,具有抑制共模干擾的能力,數據傳輸速率最大為10Mbit/s,當波特率為1200bps時最大的傳輸距離理論上可達15千米。RS-485網絡所具有的設備簡單、容易實現、傳輸距離遠、維護方便等優點而被許多變頻器廠家所采用。文章分析了工業環境中串行通信選擇RS-485的原因,論述了基于RS-485三墾變頻器與PC機串行通信的硬件特性,通信協議及軟件實現,實驗表明該通信軟件穩定可靠,能直觀的觀看變頻器的實際運行狀態,并能比較方便的進行多組參數的設定和改寫。通過此軟件,極大的方便了工程師和客戶對變頻器的操控和掌握。

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

        2RS-232與RS-485的比較

          常用的串行通信有兩種,一種為RS-232串行通信,一種為RS-485串行通信。由于串行通信使用方式簡便易用,工業控制領域大多都使用串行通信作為其數據交換的手段。但是工業設備的使用環境經常比較惡劣,可能會存在噪聲或者電源諧波的干擾,RS-232在如此環境下抗干擾的能力遠不及RS-485,除此之外,RS-232只能是一對一控制,而RS-485則可以實現一對多控制;RS-232一般是9針公頭,而RS-485則是兩根線就可以控制。因此工業環境下的串行通信大多都采取RS-485串行通信方式。

        3三墾變頻器與PC的串行通信

          3.1軟硬件環境

          硬件配置:PC(配備標準RS-232)一臺、RS-232/RS-485轉換卡一個、ISI通信卡一塊、Inverter三臺(三墾變頻器ES-0.4KW、SPF-11KW、IPF-90KW)。

          軟件包括:WindowsXP操作系統、MicrosoftVisualBasic6.0中文版、三墾變頻器通信協議指導手冊等。

          3.2通信協議

          三墾各個系列變頻器所提供的通信協議格式如下:

          1、指令格式:指令格式如圖1所示,各字段含義如表1。

          2、指令的詳細解釋

          圖1顯示了指令的格式,共25條指令,由操作碼(OP)決定,分別由A-Q及R、S、x、y、z、a、b、c組成。以指令C和N說明指令的詳細構成,如表2。

          表1指令各字段含義

          3、變頻器所進行的通信錯誤處理

          變頻器如果從上位機接收到的指令中檢查出錯誤,將進行以下處理:

          ①在奇偶錯誤、校驗和錯誤或指令代碼未定義時:

          回傳的錯誤指令為指令代碼“?”。同時,DT項回傳一個字節的通信錯誤代碼。

          ②在DT項的數據過長或不足,不能解釋數據內容時:

          如果接收指令的各個指令所定義的數據過長或不足、或者接收指令無法解釋時,其錯誤處理同①。

          ③超時處理:

          接收開始代碼后,如果不能在150ms以內接收全部指令將進行超時處理,強制完成接收狀態。這時變頻器將返回通信錯誤代碼“d”。

          ④通信錯誤代碼分別為:“p”代表奇偶錯誤;“s”代表檢驗和錯誤;“u”代表未定義操作代碼;“d”代表數據過長、數據不足或者數據無法解釋。

          ⑤其它錯誤

          有關接收計算機指令的錯誤,在上述情況以外,將進行超時處理,對計算機而言為“無應答”。

          4、變頻器和計算機的指令發送接收方法

          串行通信的基本程序是一臺計算機將指令發送給一臺變頻器,之后變頻器回傳應答給計算機。所以,變頻器在接收到了計算機發送出的指令后必須回傳應答。如果計算機在沒有得到應答時,仍連續發送多條指令則無法確保正常的工作。

          由于變頻器異常或者通信線路異常,計算機可能無法接收到變頻器的應答。為了避免由于等待變頻器的應答而造成的通信程序鎖定,計算機將按照所設定的2秒或更長以上的時間來執行接收超時處理。

          表2指令詳細內容舉例

          3.3串行通信的程序實現

          由于篇幅所限,這里僅介紹通信部分的實現代碼,主要包括:通信端口的定義,通信速率的設定,通信發送、通信接受、通信錯誤處理以及退出等。

          主要代碼如下:

          …

          MSComm1.CommPort=1‘選擇1號通信端口

          MSComm1.Settings="4800,o,8,1"‘設定為4800bps,奇數、數據8位、停止1位

          MSComm1.RThreshold=1‘CommmEvert發生當接收到一個字符時

          MSComm1.InputLen=0‘輸入緩沖數據清零?

          MSComm1.PortOpen=True‘通信端口打開?

          Timer1.Interval=1000‘接收超時時間(ms)1秒

          Tx=“*01C”?‘設定向變頻器傳送的數據

          TxLen=Len(Tx)‘得到傳送數據長度(校驗和與停止位除外)

          Sum=0

          Fori=1ToTxLen

          Sum=Sum+Asc(Mid(Tx,i,1))

          Nexti

          Sum=((0-Sum)And127)Or64

          Tx=Tx+Chr(Sum)+vbCrLf‘在傳送代碼上添加校驗和與停止位(CR+LF)

          Timer1.Enabled=True‘啟動接收超時檢出計數器

          MSComm1.Output=Tx‘向變頻器傳送數據

          EndSub

          PrivateSubMSComm1_OnComm()‘[通過Comm事件接收數據]

          DimRxAsString,RxLenAsInteger,SumAsInteger

          DimMsgAsString

          IfMSComm1.CommEvent<>comEvReceiveThenExitSub‘確認接收的數據是Comm事件

          Do

          Rx=Rx+MSComm1.Input‘接收變頻器的數據

          DoEvents

          LoopUntilRight(Rx,2)=(Chr(13)&Chr(10))‘找到停止位

          Timer1.Enabled=False‘取消超時定時器

          RxLen=Len(Rx)-2‘接收數據字長(停止位除外)

          Sum=0‘接收到的校驗和的計算

          Fori=1ToRxLen-1

          Sum=Sum+Asc(Mid(Rx,i,1))

          Nexti

          Sum=((0-Sum)And127)Or64

          IfMid(Rx,RxLen,1)=Chr(Sum)Then‘校驗和的檢查

          Msg=Left(Rx,RxLen)‘接收數據(包括校驗和,不包括停止位)

          Else

          Msg=“CheckSumNG”?‘校驗和錯誤顯示

          EndIf

          MsgBox“ReceivedData=”&Msg‘顯示接收數據

          MSComm1.PortOpen=False‘[關閉通信端口]

          EndSub

          ‘在變頻器的輸出頻率為20Hz時,運行該程序,在信息框中將顯示“*01C02000@”

        4結論

          文章首先對RS-232與RS-485進行了比較,然后介紹了基于RS-485三墾變頻器與上位機串行通信的實現,實驗表明:利用VB編制的人機界面操作簡便,取得了良好的實用效果。利用RS-485協議進行串行通信,可以保證快速、穩定遠距離地傳輸數據。在目前以及以后的工業控制和其他方面必將得到越來越多的應用。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 泌阳县| 绥德县| 汤阴县| 石狮市| 绥中县| 保靖县| 西吉县| 颍上县| 嵩明县| 崇信县| 交城县| 徐州市| 浮梁县| 广昌县| 禹州市| 清丰县| 定远县| 喀喇沁旗| 萝北县| 巴里| 潞西市| 广东省| 象山县| 同德县| 那坡县| 苏尼特左旗| 枣庄市| 紫云| 河池市| 军事| 萍乡市| 兴义市| 临漳县| 资溪县| 巫溪县| 红河县| 河曲县| 定兴县| 盐城市| 长乐市| 梧州市|