摘要:本文重點討論MODBUS ASCII通信協議及通過VB如何實現與臺達觸摸屏的通信。對于Visual Basic6編程語言亦有簡要的介紹。
關鍵詞:Visual Basic    MODBUS ASCII   HMI
1 引言
    在自動化工程集成中">

      技術頻道

      VB與臺達觸摸屏通信的實現

      摘要:本文重點討論MODBUS ASCII通信協議及通過VB如何實現與臺達觸摸屏的通信。對于Visual Basic6編程語言亦有簡要的介紹。
      關鍵詞:Visual Basic MODBUS ASCII HMI
      1 引言
      在自動化工程集成中經常遇到VB與觸摸屏通信問題。對于不同的MODBUS通信協議觸摸屏產品,無論是通信協議和VB中的編程原理都是一樣的,所不同的僅是MODBUS在PLC和HMI中的地址映射不一樣。為了集中解決這個問題,本文以臺達觸摸屏通訊案例為背景,采用了一個比較簡單的實例描述如何建立雙方的通信,不涉及到更為復雜的VB與HMI的操作和編程技巧。
      2 串行通信基本概念
      2.1通信的種類
      通常通信的形式可以分為兩種,并行通信(Parallel Communication)和串行通信(Serial Communication)。所謂并行,既是一次傳輸量為8位;而串行一次只傳1位。這兩種不同的通信模式如圖1所示。


      2.2串行通信
      常用的串行通信也有兩種,分別位RS-232和RS-485。
      (1)RS-232通訊。RS-232的信號準位乃是參考地線而來的,如圖2所示,傳輸端參考接地端1來傳送數據;接收端則參考接地端2還原出傳送端的信號準備。


      由圖2可知,由于兩個接地端準位不一定一樣,而且很容易受到干擾,所以信號在RS-232線路傳輸時,很容易產生錯誤。
      (2)RS-485通訊。RS-485的信號傳輸方式如圖3所示。


      RS-485的信號將被傳送出去時會分成正負兩條線路,當到達接收端后,在將信號相減還原成原來的信號;如果將原始的信號表示成(DT),而被分成的信號分別標示成(D+)及(D-),則DT= (D+)-(D-)
      同樣地,接收端在接收到信號后,也依據上式還原成原來的樣子。如果線路受到干擾,兩條線路的信號分別為(D+)+Noise (D-)+Noise。接收端還原信號為
      (DT)= [(D+)+Noise]-[ (D-)+Noise]
      與先前結果一樣,所以RS-485可以有效的防止噪聲的干擾。
      3 Visual Basic控件
      VB是微軟的窗口軟件,提供了很多接口成員。對象、屬性、事件、方法就是四個重要的接口。
      3.1卷標控件
      此控件專用于顯示文字,數字用,顯示如圖4所示。


      3.2按鈕控件
      此控件使用率很高,提供一個供系統用戶操作用的按鈕,如圖5所示。


      3.3定時器控件
      此控件的最大作用在于固定的時間內會執行所設置的程序代碼一次,如圖6所示。VB還提供了大量的控件,在此不一一敘述。


      3.4MScomm控件
      要完成VB與PLC等串行設備的通信,MScomm控件是一個很好用的控件。所以在此有必要對MScomm控件做一個較為詳細的說明。MScomm非標準控件,要手動添加,步驟如下:選擇菜單的【工程】;選擇【部件】;在彈出的對話框中做如圖選擇,在部件選項卡就會出現MScomm控件,如圖7所示。MScomm控件基本屬性如圖8所示。


      4 MODBUS ASCII通訊協議(案例)
      Modbus總線通訊協議 分為ASCII和RTU兩種。ASCII采用的格式和校驗相對簡單,本文采用ASCII格式,并僅對使用的功能碼進行說明,更多的信息,請參看協議的詳細說明。
      4.1 通信格式

      STX
      起始字符 “:”(3AH)
      ADR 1
      通信地址(站號)采用2個字符
      ADR 0
      CMD 1
      功能碼。采用2個字符
      CMD 0
      DATA(0)
      數據項
      DATA(1)
      ……….
      DATA(n-1)
      LRC CHK 1
      LRC 校驗碼。采用2個字符
      LRC CHK 0
      END 1
      結束字符。采用2個字符。
      END 1 = CR(0DH),END 0 = LF(0AH)

      4.2LRC算法
      ADR H+CMD H+DATA H,然后取2的補碼
      4.3 功能碼
      05, 寫入線圈

      格式
      例子(十六進制)
      字頭
      3A
      站號
      01
      功能碼
      05
      地址
      05
      00
      寫入狀態
      FF
      00
      LRC 碼
      F6

      01, 讀線圈狀態

      格式
      例子 (十六進制)
      字頭
      3A
      站號
      01
      功能碼
      01
      起始地址
      06
      14
      讀取數目
      00
      25
      LRC 碼
      BF

      06, 寫入單個字寄存器

      格式
      例子(十六進制)
      字頭
      3A
      站號
      01
      功能碼
      06
      寄存器地址
      06
      00
      寫入的資料
      12
      34
      LRC 校驗碼
      AD

      5 VB與臺達HMI通信的實現(案例)
      5.1 控制要求
      (1)PC能控制HMI中某個位地址的啟動、停止。
      (2)在HMI上對某個內部寄存器進行數值修改操作,在PC上能同步顯示。
      5.2設計思路
      (1)PC控制的內部地址為$2000.0,查看映射表,知道為MODBUS地址為B00001。在PC上按功能碼05操作。
      (2)HMI上寫入的寄存器地址為$0,查看映射表,知道為MODBUS地址為W40001。在PC上按功能碼03操作。
      HMI內部地址與MODBUS地址映射表

      MODBUS ADDRESS
      HMI ADDRESS
      描述
      W40001~W41024
      $0~$1023
      內部寄存器
      W42001~W43024
      $M0~$M1023
      斷電保持內部寄存器
      W44001
      RCPNO
      配方編號寄存器
      W45001~……..
      RCP0~RCPn
      配方寄存器
      B00001~B01024
      $2000.0~$2063.15
      內部寄存器(bit)
      B01025~B02048
      $M200.0~$M263.15
      斷電保持內部寄存器(bit)

      5.3 VB接口的設計


      用按鈕控制$2000.0的啟動停止;
      用timer組件不停的讀取$0的顯示值(十六進制顯示,可以轉換為十進制);
      用MScomm控件實現PC與PLC的通信。
      5.4代碼構成
      (1)LRC算法校驗的實現:
      Public Function LRC(str As String) As String
      c = 0
      l = Len(str)
      For c = c + 1 To l
      c_data = Mid$(str, c, 2)
      d_lrc = d_lrc + Val("&H" + c_data)
      c = c + 1
      Next c
      If d_lrc > &HFF Then
      d_lrc = d_lrc Mod &H100
      End If
      h_lrc = Hex(&HFF - d_lrc + 1)
      If Len(h_lrc) > 2 Then
      h_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)
      End If
      LRC = h_lrc
      End Function
      (2)讀取$0,也就是W40001數值:
      Private Sub Timer1_Timer()
      MSComm1.Output = ":" + "010300000001" + LRC("010300000001") + Chr$(13) + Chr$(10)
      'MSComm1.Output = ":" + "00050500FF00" + LRC("00050500FF00") + Chr$(13) + Chr$(10)
      inputstring = MSComm1.Input
      Text1.Text = Mid(inputstring, 8, 4)
      End Sub
      (3)控制$2000.0 ON:
      Private Sub Command1_Click()
      MSComm1.Output = ":" + "00050000FF00" + LRC("00050000FF00") + Chr$(13) + Chr$(10)
      End Sub
      (4)控制$2000.0 OFF:
      Private Sub Command2_Click()
      MSComm1.Output = ":" + "000500000000" + LRC("000500000000") + Chr$(13) + Chr$(10)
      End Sub
      (5)HMI中的程序與設置如圖9所示(要注意【人機站號】與【控制器】的設置):

      6 結束語
      VB語言使用的簡易為眾多工程技術人員與串行設備的通信提供了很大的方便。
      臺達觸摸屏采用標準的MODBUS協議,這一協議目前廣為流行,為大家所熟知,也為大家最終實現通信提供了簡化的平臺。由于臺達所有的機電產品都支持MODBUS協議,所以,掌握了VB與觸摸屏通信過程,也就等于掌握了PC與臺達所有機電產品的通信。

      文章版權歸西部工控xbgk所有,未經許可不得轉載。

      主站蜘蛛池模板: 制服美女视频一区| 精品视频在线观看你懂的一区| 亚洲日韩AV一区二区三区中文| 亚洲一区无码中文字幕乱码| 久久精品黄AA片一区二区三区| 99在线精品一区二区三区| 无码日韩精品一区二区人妻| 国产福利一区二区三区视频在线| 国产精品亚洲一区二区三区久久 | 丝袜美腿高跟呻吟高潮一区| 国产福利一区二区在线视频| 中文字幕日韩丝袜一区| 亚洲中文字幕无码一区二区三区| 精品一区二区三区视频| 亚欧在线精品免费观看一区| 国产一区三区三区| 亚洲中文字幕无码一区| 一区二区三区中文| 一区二区三区免费视频观看| 亚洲一区欧洲一区| 亚洲综合色一区二区三区| 国产91精品一区二区麻豆网站 | 午夜一区二区免费视频| 亚洲乱码国产一区三区| 亚洲一区二区视频在线观看| 无码视频一区二区三区| 在线观看精品一区| 八戒久久精品一区二区三区| 国产在线观看一区二区三区四区| 亚洲熟妇AV一区二区三区浪潮| 精品日韩亚洲AV无码一区二区三区 | 国产精品亚洲一区二区三区 | 国产在线观看91精品一区| 国产一区二区三区播放心情潘金莲| 日本激情一区二区三区| 天堂Av无码Av一区二区三区| 日本精品一区二区三本中文| 国产精品一区二区无线| 精品人妻少妇一区二区| 久久久精品人妻一区二区三区四| 美女视频一区三区网站在线观看|