|
喻 慧 ,馬 岩 (陝西恒鑫精密紡織機械有限公司)
摘要: 目前紡織業生產中產品產量一般都還是依靠人工進行統計,在實際操作過程中,不僅麻煩而且容易出錯。因此,有必要采用產量監控及查詢係統對產品產量進行統計。本文介紹了基於VB及台達觸摸屏的產量監控及查詢係統,該係統不僅能應用於紡織機械,而且適用於其它設備。
關鍵詞: 台達觸摸屏;VB;監控;查詢;MODBUS;MSCOMM
一、引言
該係統用於對各生產線的紡機進行實時監控和查詢,並對各班次產量數據進行存儲,用戶可通過日期時間段、車號、班次等對產量進行綜合查詢,並進行統計,可在查詢出滿足條件的數據後,進行報表輸出和打印。以下是對係統設計方麵的一些討論。
二、係統結構與功能
精(jing)梳(shu)機(ji)是(shi)近(jin)年(nian)來(lai)在(zai)紡(fang)織(zhi)行(xing)業(ye)使(shi)用(yong)較(jiao)為(wei)普(pu)遍(bian)的(de)一(yi)種(zhong)設(she)備(bei),其(qi)主(zhu)要(yao)作(zuo)用(yong)是(shi)排(pai)出(chu)梳(shu)棉(mian)生(sheng)條(tiao)中(zhong)一(yi)定(ding)長(chang)度(du)以(yi)下(xia)的(de)短(duan)纖(xian)維(wei),提(ti)高(gao)纖(xian)維(wei)整(zheng)齊(qi)度(du),進(jin)一(yi)步(bu)清(qing)除(chu)纖(xian)維(wei)中(zhong)殘(can)留(liu)的(de)棉(mian)結(jie)、雜za質zhi,提ti高gao纖xian維wei光guang潔jie度du。條tiao並bing卷juan聯lian合he機ji是shi精jing梳shu工gong序xu的de準zhun備bei設she備bei,通tong常chang情qing況kuang下xia,一yi套tao精jing梳shu設she備bei由you一yi台tai條tiao並bing卷juan聯lian合he機ji和he五wu台tai精jing梳shu機ji組zu成cheng。該gai產chan量liang監jian控kong查zha詢xun係xi統tong應ying用yong於yu精jing梳shu設she備bei的de結jie構gou示shi意yi圖tu如ru下xia所suo示shi:

該係統實現了以下功能:
1)實時監控所選機器各班次的當日產量和累計產量以及該機器的運行情況。
2)可定時保存各機器各班次的當日產量及累計產量,且有多種定時方式可選擇。
3)能分別根據時間,班次,產量,車號進行查詢操作,也可綜合考慮數據保存方式進行查詢,提高查詢準確率。
4)查詢結果可顯示為報表格式,並可將結果打印輸出,方便用戶使用。
5)具有係統維護功能,可方便用戶進行數據維護。
三、係統設計
1)硬件配置
|
名稱 |
數量 |
|
觸摸屏 |
7 |
|
普通PC機 |
1 |
|
轉換模塊RS232―RS485 |
1 |
2) 數據采集部分的設計
觸摸屏選用台達係列AE10THTD型(xing),由(you)於(yu)其(qi)具(ju)有(you)強(qiang)大(da)的(de)通(tong)訊(xun)功(gong)能(neng),靈(ling)活(huo)的(de)係(xi)統(tong)構(gou)成(cheng),生(sheng)動(dong)逼(bi)真(zhen)且(qie)豐(feng)富(fu)的(de)圖(tu)庫(ku),簡(jian)單(dan)易(yi)用(yong)等(deng)特(te)點(dian),在(zai)紡(fang)織(zhi)業(ye)中(zhong)得(de)到(dao)了(le)廣(guang)泛(fan)的(de)應(ying)用(yong),因(yin)此(ci)通(tong)過(guo)觸(chu)摸(mo)屏(ping)來(lai)采(cai)集(ji)所(suo)需(xu)數(shu)據(ju)。所(suo)以(yi)要(yao)對(dui)紡(fang)機(ji)進(jin)行(xing)實(shi)時(shi)監(jian)控(kong),首(shou)先(xian)要(yao)解(jie)決(jue)觸(chu)摸(mo)屏(ping)與(yu)PC的通信問題。所用的台達觸摸屏支持標準的MODBUS協議,通過串口與PC相連。
<1>MODBUS通信協議
modbus功能碼
01:讀取線圈狀態 取得一組邏輯線圈的當前狀態(ON/OFF)
02:讀取輸入狀態 取得一組開關輸入的當前狀態(ON/OFF)
03:讀取保持寄存器 在一個或多個保持寄存器中取得當前的二進製值
04:讀取輸入寄存器 在一個或多個輸入寄存器中取得當前的二進製值
05:強置單線圈 強置一個邏輯線圈的通斷狀態
06:預置單線圈 把具體二進製值裝入一個保持寄存器
根據modbus協議,通信中mscomm1.output中包含的字符串應包括以下幾部分:
起始位 站號 功能碼 數據位 校驗位 停止位
在此通信中,站號表示人機站號 數據位包括寄存器地址和數據
<2> HMI內部地址與MODBUS地址映射表
|
MODBUS_ADDRESS |
HMI_ADDRESS |
PC_ADDRESS |
描述 |
|
W40001-W41024 |
$0-$1023 |
0000-03FF |
內部寄存器 |
|
W42001-W43024 |
$M0-$M1023 |
07D0-0BCF |
斷電保持內部寄存器 |
|
W44001 |
RCPN0 |
0FA0 |
配方編號寄存器 |
|
W45001-...... |
RCP0-RCPn |
1388-...... |
配方寄存器 |
|
B00001-B01024 |
$2000.0-$2063.15 |
0000-03FF |
內部寄存器(bit) |
|
B01025-B02048 |
$M200.0-$M263.15 |
0400-07FB |
斷電內部保持寄存器(bit) |
<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) ’條並聯當前長度
Else
Txt_view1.Text = change(inputstring, 88, 92) ’精梳機鉗次
Txt_view2.Text = change(inputstring, 96, 100) ’精梳機條速
End If
str_state = Mid(inputstring, 120, 4) ’接收運行狀態的返回值,並判斷運行狀態
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)用於轉換采集到的數據,其功能是將采集到的產量數據轉換為十進製。其代碼如下:
Public Function change(inputstr, start1 As Integer, start2 As Integer)
str_low = Mid(inputstr, start1, 4) ’讀寄存器中的數據賦給低字節
str_high = Mid(inputstr, start2, 4) ’讀寄存器中的數據賦給高字節
str_hex = str_high + str_low ’整合高低字節數據
str_input = Val("&H" + str_hex) ’將十六進製數據轉換成十進製
If str_input >= -32768 And str_input <= -1 Then ’將轉換成十進製處於-32768~32767的數據轉換為相應的正數
str_input = str_input + 65536
End If
change = str_input / 1000 ’返回值 取三位小數
End Function
3)信息查詢
信息查詢界麵如下所示,可對已經保存的生產數據根據時間、班次、產量、車號進行綜合查詢。

該功能的程序方麵比較簡單,主要是對數據庫的查詢操作。以單獨對班次查詢為例,其代碼如下:
’按班次查詢子函數,用於判斷其搜索關鍵字是否有效
Private Sub Chk_team_Click()
If Chk_team.Value = 1 Then
Combo_team.Enabled = True
Else
Combo_team.Enabled = False
End If
End Sub
’選擇班次子函數,用於判斷所選班次
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
|