
女,畢業(yè)于陜西科技大學電子信息專業(yè),本科,現(xiàn)就職于烽火通信集團恒鑫紡機公司,從事新型紡織機械的研發(fā)工作。
摘要: 目前紡織業(yè)生產(chǎn)中產(chǎn)品產(chǎn)量一般都還是依靠人工進行統(tǒng)計,在實際操作過程中,不僅麻煩而且容易出錯。因此,有必要采用產(chǎn)量監(jiān)控及查詢系統(tǒng)對產(chǎn)品產(chǎn)量進行統(tǒng)計。本文介紹了基于VB及臺達觸摸屏的產(chǎn)量監(jiān)控及查詢系統(tǒng),該系統(tǒng)不僅能應用于紡織機械,而且適用于其它設備。
關鍵詞: 臺達觸摸屏;VB;監(jiān)控;查詢;MODBUS;MSCOMM
Abstract: At the present time, the output of the textile industry is accounted by the worker usually. It is bother and easy to make mistakes. So it is necessary to have a system to monitor the output of the product. A monitor and enquiry system about the output of the product is introduced in this article, it's based on VB and Touch Screen. This system is not only used in the textile machine, but also used in the other area.
Key words: Delta HMI; VB; Monitor;Enquiry; MODBUS ; MSCOMM
一、引言
該系統(tǒng)用于對各生產(chǎn)線的紡機進行實時監(jiān)控和查詢,并對各班次產(chǎn)量數(shù)據(jù)進行存儲,用戶可通過日期時間段、車號、班次等對產(chǎn)量進行綜合查詢,并進行統(tǒng)計,可在查詢出滿足條件的數(shù)據(jù)后,進行報表輸出和打印。以下是對系統(tǒng)設計方面的一些討論。
二、系統(tǒng)結構與功能
精梳機是近年來在紡織行業(yè)使用較為普遍的一種設備,其主要作用是排出梳棉生條中一定長度以下的短纖維,提高纖維整齊度,進一步清除纖維中殘留的棉結、雜質,提高纖維光潔度。條并卷聯(lián)合機是精梳工序的準備設備,通常情況下,一套精梳設備由一臺條并卷聯(lián)合機和五臺精梳機組成。該產(chǎn)量監(jiān)控查詢系統(tǒng)應用于精梳設備的結構示意圖如下所示:
圖1 結構示意圖
該系統(tǒng)實現(xiàn)了以下功能:
(1)實時監(jiān)控所選機器各班次的當日產(chǎn)量和累計產(chǎn)量以及該機器的運行情況。
(2)可定時保存各機器各班次的當日產(chǎn)量及累計產(chǎn)量,且有多種定時方式可選擇。
(3)能分別根據(jù)時間,班次,產(chǎn)量,車號進行查詢操作,也可綜合考慮數(shù)據(jù)保存方式進行查詢,提高查詢準確率。
(4)查詢結果可顯示為報表格式,并可將結果打印輸出,方便用戶使用。
(5)具有系統(tǒng)維護功能,可方便用戶進行數(shù)據(jù)維護。
三、系統(tǒng)設計
1)硬件配置
名稱 |
數(shù)量 |
觸摸屏 |
7 |
普通PC機 |
1 |
轉換模塊RS232—RS485 |
1 |
2) 數(shù)據(jù)采集部分的設計
觸摸屏選用臺達系列AE10THTD型,由于其具有強大的通訊功能,靈活的系統(tǒng)構成,生動逼真且豐富的圖庫,簡單易用等特點,在紡織業(yè)中得到了廣泛的應用,因此通過觸摸屏來采集所需數(shù)據(jù)。所以要對紡機進行實時監(jiān)控,首先要解決觸摸屏與PC的通信問題。所用的臺達觸摸屏支持標準的MODBUS協(xié)議,通過串口與PC相連。
● MODBUS通信協(xié)議
modbus功能碼
01:讀取線圈狀態(tài) 取得一組邏輯線圈的當前狀態(tài)(ON/OFF)
02:讀取輸入狀態(tài) 取得一組開關輸入的當前狀態(tài)(ON/OFF)
03:讀取保持寄存器 在一個或多個保持寄存器中取得當前的二進制值
04:讀取輸入寄存器 在一個或多個輸入寄存器中取得當前的二進制值
05:強置單線圈 強置一個邏輯線圈的通斷狀態(tài)
06:預置單線圈 把具體二進制值裝入一個保持寄存器
根據(jù)modbus協(xié)議,通信中mscomm1.output中包含的字符串應包括以下幾部分:
起始位 站號 功能碼 數(shù)據(jù)位 校驗位 停止位
在此通信中,站號表示人機站號 數(shù)據(jù)位包括寄存器地址和數(shù)據(jù)
● HMI內(nèi)部地址與MODBUS地址映射表
MODBUS_ADDRESS |
HMI_ADDRESS |
PC_ADDRESS |
描述 |
W40001-W41024 |
$0-$1023 |
0000-03FF |
內(nèi)部寄存器 |
W42001-W43024 |
$M0-$M1023 |
07D0-0BCF |
斷電保持內(nèi)部寄存器 |
W44001 |
RCPN0 |
0FA0 |
配方編號寄存器 |
W45001-...... |
RCP0-RCPn |
1388-...... |
配方寄存器 |
B00001-B01024 |
$2000.0-$2063.15 |
0000-03FF |
內(nèi)部寄存器(bit) |
B01025-B02048 |
$M200.0-$M263.15 |
0400-07FB |
斷電內(nèi)部保持寄存器(bit) |
● mscomm控件
CommPort 設置并返回通訊端口號。
Settings 以字符串的形式設置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位。
PortOpen 設置并返回通訊端口的狀態(tài)。也可以打開和關閉端口。
Input 從接收緩沖區(qū)返回和刪除字符。
Output 向傳輸緩沖區(qū)寫一個字符串。
● HMI與PC的通信及數(shù)據(jù)采集的設計
LRC算法函數(shù):
Public Function LRC(str)
c = 0
l = Len(str) '求出str的長度賦值給l
For c = c + 1 To l
c_data = Mid$(str, c, 2) '在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
下面對數(shù)據(jù)進行實時采集,數(shù)據(jù)采集程序界面如下圖所示:

圖2 數(shù)據(jù)采集程序界面
Private Sub Timer1_Timer()
'連接數(shù)據(jù)庫
Dim CONN As New ADODB.Connection
Dim DBStr As String
Dim rs As New ADODB.Recordset
DBStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\data.mdb;Persist Security Info=False"
CONN.Open DBStr
Dim Mac_Num ' Mac_Num是車號
Mac_Num = Combo_MacNum.List(Combo_MacNum.ListIndex)
Debug.Print Mac_Num
sql = "select * from machine where Machine_Num = '" + Mac_Num + "'" '獲取車號
rs.Open sql, CONN, 1, 3
Txt_type.Text = rs.Fields("machine_type").Value '獲取車的類型(是精梳機還是條并聯(lián))
rs.Close
str_type = Mac_Num '
Set CONN = Nothing
DBStr = ""
'發(fā)送數(shù)據(jù)(根據(jù)所選車號發(fā)送數(shù)據(jù))
If MSComm1.PortOpen = True And stakeout_flag And Combo_MacNum.ListIndex >= 0 Then
str_output = str_type + "030064001D"
MSComm1.Output = ":" + str_output + LRC(str_output) + Chr$(13) + Chr$(10)
'接收數(shù)據(jù)
inputstring = MSComm1.Input
'將接收到的數(shù)據(jù)分別賦值并顯示
Txt_100.Text = change(inputstring, 8, 12) '甲班當日產(chǎn)量
Txt_102.Text = change(inputstring, 16, 20) '甲班累計產(chǎn)量
Txt_104.Text = change(inputstring, 24, 28) '乙班當日產(chǎn)量
Txt_106.Text = change(inputstring, 32, 36) '乙班累計產(chǎn)量
Txt_108.Text = change(inputstring, 40, 44) '丙班當日產(chǎn)量
Txt_110.Text = change(inputstring, 48, 52) '丙班累計產(chǎn)量
Txt_112.Text = change(inputstring, 56, 60) '丁班當日產(chǎn)量
Txt_114.Text = change(inputstring, 64, 68) '丁班累計產(chǎn)量
Txt_116.Text = change(inputstring, 72, 76) '各班當日合計產(chǎn)量
Txt_118.Text = change(inputstring, 80, 84) '各班累計合計產(chǎn)量
If Txt_type.Text = "條并聯(lián)" Then
Txt_view1.Text = change(inputstring, 104, 108) '條并聯(lián)繞卷速度
Txt_view2.Text = change(inputstring, 112, 116) '條并聯(lián)當前長度
Else
Txt_view1.Text = change(inputstring, 88, 92) '精梳機鉗次
Txt_view2.Text = change(inputstring, 96, 100) '精梳機條速
End If
str_state = Mid(inputstring, 120, 4) '接收運行狀態(tài)的返回值,并判斷運行狀態(tài)
If str_state = "0001" Then
Cmd_128.Caption = "運行中"
End If
If str_state = "0000" Then
Cmd_128.Caption = "停止"
End If
End If
End Sub
change(inputstr, start1 As Integer, start2 As Integer)用于轉換采集到的數(shù)據(jù),其功能是將采集到的產(chǎn)量數(shù)據(jù)轉換為十進制。其代碼如下:
Public Function change(inputstr, start1 As Integer, start2 As Integer)
str_low = Mid(inputstr, start1, 4) '讀寄存器中的數(shù)據(jù)賦給低字節(jié)
str_high = Mid(inputstr, start2, 4) '讀寄存器中的數(shù)據(jù)賦給高字節(jié)
str_hex = str_high + str_low '整合高低字節(jié)數(shù)據(jù)
str_input = Val("&H" + str_hex) '將十六進制數(shù)據(jù)轉換成十進制
If str_input >= -32768 And str_input <= -1 Then '將轉換成十進制處于-32768~32767的數(shù)據(jù)轉換為相應的正數(shù)
str_input = str_input + 65536
End If
change = str_input / 1000 '返回值 取三位小數(shù)
End Function
3)信息查詢
信息查詢界面如下所示,可對已經(jīng)保存的生產(chǎn)數(shù)據(jù)根據(jù)時間、班次、產(chǎn)量、車號進行綜合查詢。

圖3 信息查詢界面
該功能的程序方面比較簡單,主要是對數(shù)據(jù)庫的查詢操作。以單獨對班次查詢?yōu)槔浯a如下:
'按班次查詢子函數(shù),用于判斷其搜索關鍵字是否有效
Private Sub Chk_team_Click()
If Chk_team.Value = 1 Then
Combo_team.Enabled = True
Else
Combo_team.Enabled = False
End If
End Sub
'選擇班次子函數(shù),用于判斷所選班次
Private Sub Combo_team_Click()
Dim liner_str
Select Case Combo_team.ListIndex
Case 0
liner_str = "甲班"
Case 1
liner_str = "乙班"
Case 2
liner_str = "丙班"
Case 3
liner_str = "丁班"
End Select
End Sub
'班次查詢子函數(shù),獲取查詢字符串
Public Function sch_team()
Dim liner_str
Dim sch_str_team
Select Case Combo_team.ListIndex
Case 0
liner_str = "甲班"
Case 1
liner_str = "乙班"
Case 2
liner_str = "丙班"
Case 3
liner_str = "丁班"
End Select
sch_str_team = "info_liner = '" + liner_str + "'"
sch_team = sch_str_team
End Function
'產(chǎn)量查詢函數(shù),用于查詢產(chǎn)量并對其進行顯示
Private Sub cmd_search_Click()
Dim sch_str
'按班次查詢
If Chk_team.Value = 1 Then
sch_str = " where " + sch_team()
End If
'查詢結果顯示
Dim resource_str
resource_str = " select info_id as 編號,info_mactype as 機器類型 ,info_liner as 班次, "
resource_str = resource_str + " info_sumoutput as 當日產(chǎn)量, info_dayoutput as 累計產(chǎn)量,"
resource_str = resource_str + " info_daytotal as 當日合計產(chǎn)量,info_total as 累計合計產(chǎn)量 "
resource_str = resource_str + " from " + table_str + sch_str
Adodc1.RecordSource = resource_str
Debug.Print Adodc1.RecordSource
Adodc1.Refresh
End Sub
可根據(jù)以上單獨查詢班次的例子對其進行擴展,增加根據(jù)時間,車號,產(chǎn)量范圍等對產(chǎn)量進行查詢的功能,這里就不一一敘述了。
四、結束語
觸摸屏與上位機的結合,并通過VB6.0傳送數(shù)據(jù)所構成的計算機監(jiān)控系統(tǒng),對于近距離傳輸數(shù)據(jù)的現(xiàn)場控制來說是一種性價比很高的解決方案。該系統(tǒng)充分的利用了觸摸屏的通信功能和PC強大的圖形顯示、浮點運算等特點,以最大的限度合理的利用了資源,實現(xiàn)了對設備運行狀態(tài)的監(jiān)控。
其它作者:
馬巖(1980-),男,畢業(yè)于西安工程大學機械電子工程專業(yè),本科,現(xiàn)就職于陜西烽火通信集團恒鑫紡機公司,從事新型紡織機械的研發(fā)工作。