基于VB及台达触摸屏的监控系统在纺机中的应用
一、引言
该系统用于对各生产线的纺机进行实时监控和查询,并对各班次产量数据进行存储,用户可通过日期时间段、车号、班次等对产量进行综合查询,并进行统计,可在查询出满足条件的数据后,进行报表输出和打印。以下是对系统设计方面的一些讨论。
二、系统结构与功能
精梳机是近年来在纺织行业使用较为普遍的一种设备,其主要作用是排出梳棉生条中一定长度以下的短纤维,提高纤维整齐度,进一步清除纤维中残留的棉结、杂质,提高纤维光洁度。条并卷联合机是精梳工序的准备设备,通常情况下,一套精梳设备由一台条并卷联合机和五台精梳机组成。该产量监控查询系统应用于精梳设备的结构示意图如下所示:
该系统实现了以下功能:
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地址映射表
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算法函数:
PublicFunctionLRC(str)
c=0
l=Len(str)’求出str的长度赋值给l
Forc=c+1Tol
c_data=Mid$(str,c,2)’在str串中,从c的值开始取2个字符。
d_lrc=d_lrc+Val("&H"+c_data)
c=c+1
Nextc
Ifd_lrc>&HFFThen
d_lrc=d_lrcMod&H100
EndIf
h_lrc=Hex(&HFF-d_lrc+1)
IfLen(h_lrc)>2Then
h_lrc=Mid(h_lrc,Len(h_lrc)-1,2)
EndIf
LRC=h_lrc
EndFunction
下面对数据进行实时采集,数据采集程序界面如下图所示:
PrivateSubTimer1_Timer()
’连接数据库
DimCONNAsNewADODB.Connection
DimDBStrAsString
DimrsAsNewADODB.Recordset
DBStr="Provider=Microsoft.Jet.
OLEDB.4.0;DataSource="&App.Path&"\data.mdb;PersistSecurityInfo=False"
CONN.OpenDBStr
DimMac_Num’Mac_Num是车号
Mac_Num=Combo_MacNum.List(Combo_MacNum.ListIndex)
Debug.PrintMac_Num
sql="s elect*frommachinewhereMachine_Num=’"+Mac_Num+"’"’获取车号
rs.Opensql,CONN,1,3
Txt_type.Text=rs.Fields("machine_type").Value’获取车的类型(是精梳机还是条并联)
rs.Close
str_type=Mac_Num’
SetCONN=Nothing
DBStr=""
’发送数据(根据所选车号发送数据)
IfMSComm1.PortOpen=TrueAndstakeout_flagAndCombo_MacNum.
ListIndex>=0Then
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)’各班累计合计产量
IfTxt_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)’精梳机条速
EndIf
str_state=Mid(inputstring,120,4)’接收运行状态的返回值,并判断运行状态
Ifstr_state="0001"Then
Cmd_128.Caption="运行中"
EndIf
Ifstr_state="0000"Then
Cmd_128.Caption="停止"
EndIf
EndIf
EndSub
change(inputstr,start1AsInteger,start2AsInteger)用于转换采集到的数据,其功能是将采集到的产量数据转换为十进制。其代码如下:
PublicFunctionchange(inputstr,start1AsInteger,start2AsInteger)
str_low=Mid(inputstr,start1,4)’读寄存器中的数据赋给低字节
str_high=Mid(inputstr,start2,4)’读寄存器中的数据赋给高字节
str_hex=str_high+str_low’整合高低字节数据
str_input=Val("&H"+str_hex)’将十六进制数据转换成十进制
Ifstr_input>=-32768Andstr_input<=-1Then’
将转换成十进制处于-32768~32767的数据转换为相应的正数
str_input=str_input+65536
EndIf
change=str_input/1000’返回值取三位小数
EndFunction
3)信息查询
信息查询界面如下所示,可对已经保存的生产数据根据时间、班次、产量、车号进行综合查询。
该功能的程序方面比较简单,主要是对数据库的查询操作。以单独对班次查询为例,其代码如下:
’按班次查询子函数,用于判断其搜索关键字是否有效
PrivateSubChk_team_Click()
IfChk_team.Value=1Then
Combo_team.Enabled=True
Else
Combo_team.Enabled=False
EndIf
EndSub
’选择班次子函数,用于判断所选班次
PrivateSubCombo_team_Click()
Dimliner_str
S electCaseCombo_team.ListIndex
Case0
liner_str="甲班"
Case1
liner_str="乙班"
Case2
liner_str="丙班"
Case3
liner_str="丁班"
EndS elect
EndSub
’班次查询子函数,获取查询字符串
PublicFunctionsch_team()
Dimliner_str
Dimsch_str_team
S electCaseCombo_team.ListIndex
Case0
liner_str="甲班"
Case1
liner_str="乙班"
Case2
liner_str="丙班"
Case3
liner_str="丁班"
EndS elect
sch_str_team="info_liner=’"+liner_str+"’"
sch_team=sch_str_team
EndFunction
’产量查询函数,用于查询产量并对其进行显示
PrivateSubcmd_search_Click()
Dimsch_str
’按班次查询
IfChk_team.Value=1Then
sch_str="where"+sch_team()
EndIf
’查询结果显示
Dimresource_str
resource_str="s electinfo_idas编号,info_mactypeas
机器类型,info_lineras班次,"
resource_str=resource_str+"info_sumoutputas
当日产量,info_dayoutputas累计产量,"
resource_str=resource_str+"info_daytotalas
当日合计产量,info_totalas累计合计产量"
resource_str=resource_str+"from"+table_str+sch_str
Adodc1.RecordSource=resource_str
Debug.PrintAdodc1.RecordSource
Adodc1.Refresh
EndSub
可根据以上单独查询班次的例子对其进行扩展,增加根据时间,车号,产量范围等对产量进行查询的功能,这里就不一一叙述了。
四、结束语
触摸屏与上位机的结合,并通过VB6.0传送数据所构成的计算机监控系统,对于近距离传输数据的现场控制来说是一种性价比很高的解决方案。该系统充分的利用了触摸屏的通信功能和PC强大的图形显示、浮点运算等特点,以最大的限度合理的利用了资源,实现了对设备运行状态的监控。
文章版权归西部工控xbgk所有,未经许可不得转载。