摘要: 目前紡織業生產中產品產量一般都還是依靠人工進行統計,在實際操作過程中,不僅麻煩而且容易出錯。因此,有必要采用產量監控及查詢系統對產品產量進行統計。本文介紹了基于VB及臺達觸摸屏的產量監控及查詢系統,該系統不僅能應用于紡織機械,而且適用于其它設備。
關鍵詞: 臺達觸摸屏;VB;監控;查詢;MODBUS;MSCOMM
一、引言
該系統用于對各生產線的紡機進行實時監控和查詢,并對各班次產量數據進行存儲,用戶可通過日期時間段、車號、班次等對產量進行綜合查詢,并進行統計,可在查詢出滿足條件的數據后,進行報表輸出和打印。以下是對系統設計方面的一些討論。
二、系統結構與功能
精梳機是近年來在紡織行業使用較為普遍的一種設備,其主要作用是排出梳棉生條中一定長度以下的短纖維,提高纖維整齊度,進一步清除纖維中殘留的棉結、雜質,提高纖維光潔度。條并卷聯合機是精梳工序的準備設備,通常情況下,一套精梳設備由一臺條并卷聯合機和五臺精梳機組成。該產量監控查詢系統應用于精梳設備的結構示意圖如下所示:

該系統實現了以下功能:
1)實時監控所選機器各班次的當日產量和累計產量以及該機器的運行情況。
2)可定時保存各機器各班次的當日產量及累計產量,且有多種定時方式可選擇。
3)能分別根據時間,班次,產量,車號進行查詢操作,也可綜合考慮數據保存方式進行查詢,提高查詢準確率。
4)查詢結果可顯示為報表格式,并可將結果打印輸出,方便用戶使用。
5)具有系統維護功能,可方便用戶進行數據維護。
三、系統設計
1)硬件配置
名稱 數量
觸摸屏 7
普通PC機 1
轉換模塊RS232—RS485 1
2) 數據采集部分的設計
觸摸屏選用臺達系列AE10THTD型,由于其具有強大的通訊功能,靈活的系統構成,生動逼真且豐富的圖庫,簡單易用等特點,在紡織業中得到了廣泛的應用,因此通過觸摸屏來采集所需數據。所以要對紡機進行實時監控,首先要解決觸摸屏與PC的通信問題。所用的臺達觸摸屏支持標準的MODBUS協議,通過串口與PC相連。
(1) MODBUS通信協議
modbus功能碼
01:讀取線圈狀態 取得一組邏輯線圈的當前狀態(ON/OFF)
02:讀取輸入狀態 取得一組開關輸入的當前狀態(ON/OFF)
03:讀取保持寄存器 在一個或多個保持寄存器中取得當前的二進制值
04:讀取輸入寄存器 在一個或多個輸入寄存器中取得當前的二進制值
05:強置單線圈 強置一個邏輯線圈的通斷狀態
06:預置單線圈 把具體二進制值裝入一個保持寄存器
根據modbus協議,通信中mscomm1.output中包含的字符串應包括以下幾部分:
起始位 站號 功能碼 數據位 校驗位 停止位
在此通信中,站號表示人機站號 數據位包括寄存器地址和數據
(2) HMI內部地址與MODBUS地址映射表

(3) mscomm控件
CommPort 設置并返回通訊端口號。
Settings 以字符串的形式設置并返回波特率、奇偶校驗、數據位、停止位。
PortOpen 設置并返回通訊端口的狀態。也可以打開和關閉端口。
Input 從接收緩沖區返回和刪除字符。
Output 向傳輸緩沖區寫一個字符串。
(4) HMI與PC的通信及數據采集的設計
LRC算法函數:
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
下面對數據進行實時采集,數據采集程序界面如下圖所示:

Private Sub Timer1_Timer()
'連接數據庫
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 '獲取車的類型(是精梳機還是條并聯)
rs.Close
str_type = Mac_Num '
Set CONN = Nothing
DBStr = ""
'發送數據(根據所選車號發送數據)
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)
'接收數據
inputstring = MSComm1.Input
'將接收到的數據分別賦值并顯示
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 = "條并聯" Then
Txt_view1.Text = change(inputstring, 104, 108) '條并聯繞卷速度
Txt_view2.Text = change(inputstring, 112, 116) '條并聯當前長度