摘 要: 目前紡織業(yè)生產中產品產量一般都還是依靠人工進行統(tǒng)計,在實際操作過程中,不僅麻煩而且容易出錯。因此,有必要采用產量監(jiān)控及查詢系統(tǒng)對產品產量進行統(tǒng)計。本文介紹了基于VB及臺達觸摸屏的產量監(jiān)控及查詢系統(tǒng),該系統(tǒng)不僅能應用于紡織機械,而且適用于其它設備。
關鍵詞: 臺達觸摸屏;VB;監(jiān)控;查詢;MODBUS;MSCOMM
一、引言
該系統(tǒng)用于對各生產線的紡機進行實時監(jiān)控和查詢,并對各班次產量數(shù)據(jù)進行存儲,用戶可通過日期時間段、車號、班次等對產量進行綜合查詢,并進行統(tǒng)計,可在查詢出滿足條件的數(shù)據(jù)后,進行報表輸出和打印。以下是對系統(tǒng)設計方面的一些討論。
二、系統(tǒng)結構與功能
精梳機是近年來在紡織行業(yè)使用較為普遍的一種設備,其主要作用是排出梳棉生條中一定長度以下的短纖維,提高纖維整齊度,進一步清除纖維中殘留的棉結、雜質,提高纖維光潔度。條并卷聯(lián)合機是精梳工序的準備設備,通常情況下,一套精梳設備由一臺條并卷聯(lián)合機和五臺精梳機組成。該產量監(jiān)控查詢系統(tǒng)應用于精梳設備的結構示意圖如下所示:
該系統(tǒng)實現(xiàn)了以下功能:
1)實時監(jiān)控所選機器各班次的當日產量和累計產量以及該機器的運行情況。
2)可定時保存各機器各班次的當日產量及累計產量,且有多種定時方式可選擇。
3)能分別根據(jù)時間,班次,產量,車號進行查詢操作,也可綜合考慮數(shù)據(jù)保存方式進行查詢,提高查詢準確率。
4)查詢結果可顯示為報表格式,并可將結果打印輸出,方便用戶使用。
5)具有系統(tǒng)維護功能,可方便用戶進行數(shù)據(jù)維護。
三、系統(tǒng)設計
1)硬件配置
2) 數(shù)據(jù)采集部分的設計
觸摸屏選用臺達系列AE10THTD型,由于其具有強大的通訊功能,靈活的系統(tǒng)構成,生動逼真且豐富的圖庫,簡單易用等特點,在紡織業(yè)中得到了廣泛的應用,因此通過觸摸屏來采集所需數(shù)據(jù)。所以要對紡機進行實時監(jiān)控,首先要解決觸摸屏與PC的通信問題。所用的臺達觸摸屏支持標準的MODBUS協(xié)議,通過串口與PC相連。
<1>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ù)
<2> HMI內部地址與MODBUS地址映射表

<3>mscomm控件
CommPort 設置并返回通訊端口號。
Settings 以字符串的形式設置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位。
PortOpen 設置并返回通訊端口的狀態(tài)。也可以打開和關閉端口。
Input 從接收緩沖區(qū)返回和刪除字符。
Output 向傳輸緩沖區(qū)寫一個字符串。
<4>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ù)采集程序界面如下圖所示:

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) ‘甲班當日產量
Txt_102.Text = change(inputstring, 16, 20) ‘甲班累計產量
Txt_104.Text = change(inputstring, 24, 28) ‘乙班當日產量
Txt_106.Text = change(inputstring, 32, 36) ‘乙班累計產量
Txt_108.Text = change(inputstring, 40, 44) ‘丙班當日產量
Txt_110.Text = change(inputstring, 48, 52) ‘丙班累計產量
Txt_112.Text = change(inputstring, 56, 60) ‘丁班當日產量
Txt_114.Text = change(inputstring, 64, 68) ‘丁班累計產量
Txt_116.Text = change(inputstring, 72, 76) ‘各班當日合計產量
Txt_118.Text = change(inputstring, 80, 84) ‘各班累計合計產量
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ù),其功能是將采集到的產量數(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)保存的生產數(shù)據(jù)根據(jù)時間、班次、產量、車號進行綜合查詢。

該功能的程序方面比較簡單,主要是對數(shù)據(jù)庫的查詢操作。以單獨對班次查詢?yōu)槔?,其代碼如下:
‘按班次查詢子函數(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
‘產量查詢函數(shù),用于查詢產量并對其進行顯示
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 當日產量, info_dayoutput as 累計產量,"
resource_str = resource_str + " info_daytotal as 當日合計產量,info_total as 累計合計產量 "
resource_str = resource_str + " from " + table_str + sch_str
Adodc1.RecordSource = resource_str
Debug.Print Adodc1.RecordSource
Adodc1.Refresh
End Sub
可根據(jù)以上單獨查詢班次的例子對其進行擴展,增加根據(jù)時間,車號,產量范圍等對產量進行查詢的功能,這里就不一一敘述了。
四、結束語
觸摸屏與上位機的結合,并通過VB6.0傳送數(shù)據(jù)所構成的計算機監(jiān)控系統(tǒng),對于近距離傳輸數(shù)據(jù)的現(xiàn)場控制來說是一種性價比很高的解決方案。該系統(tǒng)充分的利用了觸摸屏的通信功能和PC強大的圖形顯示、浮點運算等特點,以最大的限度合理的利用了資源,實現(xiàn)了對設備運行狀態(tài)的監(jiān)控。