六月婷婷综合-日韩理论在线-69久久久久-欧色图-蜜桃成人在线视频-色先锋在线-亚洲va中文字幕-香蕉影院在线-av一区免费-强开小嫩苞一区二区三区网站-国产视频九色蝌蚪

寧波市鄞州首南恒宇激光雕刻廠

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所示。

圖1 兩種不同的通信模式
2.2 串行通信

常用的串行通信也有兩種,分別位RS-232和RS-485。

(1)RS-232通訊。RS-232的信號準位乃是參考地線而來的,如圖2所示,傳輸端參考接地端1來傳送數據;接收端則參考接地端2還原出傳送端的信號準備。

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

(2)RS-485通訊。RS-485的信號傳輸方式如圖3所示。

圖3 RS-485通訊
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所示。

圖4 卷標控件
3.2按鈕控件

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

圖5 按鈕控件
3.3定時器控件

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

圖6 定時器控件
3.4 MScomm控件

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

圖7 MScomm控件

圖8 MScomm控件基本屬性
4 MODBUS ASCII通訊協議(案例)

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

4.1 通信格式

4.2 LRC算法

ADR H+CMD H+DATA H,然后取2的補碼

4.3 功能碼
05, 寫入線圈

01, 讀線圈狀態

06, 寫入單個字寄存器

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地址映射表

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:

聯系我們

地址: 浙江省.寧波市鄞州區寧姜公路(九曲小區二期旁)

郵編: 315040

聯系人: 盛立峰

電話: 0574-87139378

傳真: 0574-87139378

手機: 13867861670

郵箱: 85400329@qq.com

聯系我們
主站蜘蛛池模板: 慈溪市| 夏津县| 洛浦县| 洛南县| 长子县| 大连市| 丹江口市| 孝昌县| 靖宇县| 宣化县| 裕民县| 德化县| 安溪县| 荣成市| 武夷山市| 白河县| 陇西县| 华亭县| 澎湖县| 嵊泗县| 睢宁县| 略阳县| 景洪市| 大方县| 龙川县| 明星| 浦城县| 治县。| 泰和县| 新干县| 抚松县| 育儿| 丰原市| 黄浦区| 冀州市| 宜章县| 湘西| 耿马| 章丘市| 深州市| 正安县|