研华工业级嵌入式控制平台(UNO)在钢厂的应用
黄雪锋
研华中国公司
摘要: 本文介绍了采用研华公司工业级的嵌入式计算平台,采用微软最新编程工具VB.NET ,采用UDP的网络编程方法和 ADO.NET 的数据编程方法,实现了一个高稳定性的工业级的智能查询终端系统.此系统不仅可以用于钢厂中,在很多其他的工业现场中都很有应用价值.
关键词: UNO, 嵌入式技术, VB.NET , SQLServer , UDP SERVER
随着钢铁厂生产和管理自动化水平的不断提高,目前大部分钢厂都实现了整个钢厂各个生产环节的信息的统一监控和管理 。但是目前大部分钢铁厂都是采用传统的PC计算机或工控机作为钢厂的信息采集和查询终端,传统的计算机由于体积庞大,抗干扰性能和稳定性不高,而钢厂中的生产和现场环境都比较恶劣,如高温,金属粉尘严重,电磁干扰很大等。PC机在现场使用经常出现死机现象,随着自动化系统要求的提高,原来的方式已经无法满足钢厂生产现代化的要求。
1.1 嵌入式技术在自动化中得到了广泛的应用
近年来,嵌入式技术得到了广泛的应用,在自动化领域也一样,嵌入式产品以它独有的实时性、稳定性在工业领域得到了客户的认可。
嵌入式系统主要由嵌入式处理器、相关支撑硬件和嵌入式软件系统组成,它是集软硬件于一体的可独立工作的“器件”。嵌入式硬件包括处理器,显示卡,存储介质、通讯设备、IC卡或信用卡读取设备等。嵌入式软件包括与硬件相关的底层软件、操作系统、图形界面、通讯协议、数据库系统、标准化浏览器和应用软件等。便利灵活、性价比高、嵌入式强;软件不可修改性、系统所需配置要求较低、系统专业性和实时性较强!
河南舞阳钢铁厂作为国内最大的特种钢的生产厂家,首先采用了工也控制领域的领导厂商——研华公司的UNO2000 产品来实现一个高性能的稳定的嵌入式信息查询终端。
UNO-2000 是开放的、嵌入式计算平台,不仅继承了传统PC开放、灵活的特点,而且使用嵌入式技术增强其可靠性。UNO-2000 作为无风扇、无硬盘的操作平台,使用了嵌入式操作系统(Microsoft WinCE & Linux)。克服了传统工控机死机的三大“癌症”:CPU风扇机械不稳定特点,磁介质存储的抗震性不高,交流电源的发热量高的特点。真正实现了工业现场的“ 3C ”(现场控制,现场计算,现场通讯)的要求。
UNO-2000 是紧凑式计算平台。非常容易嵌入有限空间的装置或设备,UNO-2000 尺寸为“188 x 106 x 35 ” (mm),工业PC 的尺寸为“482 x 177 x 452 ” (mm)。
UNO-2000 是高度集成综合、通过良好测试、稳定可靠的操作平台。而工业PC需要用户针对应用系统集成CPU底板、CPU卡、CPU、内存、通讯卡以及I/O卡等。UNO2000系列产品本身就为用户集成了非常丰富的通信口和I/O口,例如UNO2050这款产品就有两个以太网通信口,2个USB口,4个串行通信口,8个DI/O,一个计数器通道。有的UNO产品甚至还具有PC-104口和PCMIA口。真正实现了一个开放式的嵌入式计算平台。
在舞钢中,UNO主要作为一个现场的信息采集和查询终端来使用,其应用的架构图如下:
MODBUS/TCP |
RS-485 |
DI/O 操作面版 |
钢厂LAN |
SQL SERVER 数据服务器 |
#2 |
VB.NET 编程 |
FPM |
#1 |
1.2 研华UNO2050 在钢厂自动化系统中要实现的主要功能和即使特点
UNO2050要实现的主要自动化功能如下:
1、 通过以太网口,采用MODBUS/TCP的通信协议,与研华公司的基于以太网的数据采集模块通信,实现对钢厂中的泵站的各种过程数据的采集和处理。
2、 通过串口,与钢厂现场的PLC连接,实现对钢厂各个生产过程的监控(炼钢,轧钢等)
3、 把采集过来的现场数据通过钢厂中的以太网送到钢厂中的SQL SERVER 数据库中去,进行集中存储管理。
4、 UNO2050本机根据当地的查询权限,不仅可以把本地采集的数据进行本地显示监控,还可以查询SQL SERVER数据库,监控远端的生产现场。
5、 需要在UNO上做一个简易的键盘,提供给钢厂中的工人操作,以代替普通的键盘。因为普通键盘按键太多,太复杂,加上也不利于现场安装。加上键盘功能比较复杂,工人计算机知识有限,容易造成误操作。所以现场非常需要提供一个坚毅的工业化键盘,只需要几个简单的查询按扭就可以完成查询功能。
针对钢厂的实际功能需求,选用研华公司UNO-2050产品来实现这个智能的工业化的信息交互查询终端系统。UNO-2050 的主要技术特点如下:
1、 目前UNO-2050具有两个以太网通信口,可以分别来满足采集现场MODBUS//TCP数据模块和通过钢厂中的骨干网把信息递交给数据服务器的功能。两个以太网口可以处于不同的网段,可以实现一个智能的隔离通信网关的功能。
2、 UNO2050内建的嵌入式操作系统为WINCE.NET, 可以支持VISUAL.NET的编程,也就是客和可以使用目前微软最新的变成工具VB.NET和C#来编程,实现自己的功能.
3、 UNO2050内建的嵌入式操作系统WINCE.NET里面构建了SQL组件, 用户可以采用SQLCLIENT的方法,进行嵌入式数据库查询方法,来与远端的数据库进行查询.
4、 UNO-2050 内置了4个串行通信口,可以很方便的实现与现场的数据采集设备连接,实现数据的采集和控制.
5、 UNO-2050 本身自带了4DI和4DO , 可以为本身的系统上的饿报警信号以及快速的输入输出要求提供了直接的接口.
1.3 此项目实施的主要技术关键点
这个项目在工程的实际实施过程中,主要有以下技术难点:
1、客户需要采用VB.NET 编程工具来编程,在编程过程中,需要实现一个UDP SERVER 功能,这个功能与一般的SOCK组件编程不同,它需要实现有远端的多个数据提供方根据接收方的IP地址和绑定通道,同时发送给接收方.而接收放需要能同时接收和处理这些数据.这时就需要SOCK组建采用UDP的协议,而且要处于一直的监测接收状态.从技术上讲,这里做接收多个站的数据处理方面,应该使用多线程的技术来处理.但是考虑到UNO上的资源以及要实现功能比较多的实际情况,还是采用了轮询监控的方法,由于UDP协议的”无连接” 特点,基本上可以实现接收和处理多个站的数据通信的要求。实现此功能的源代码如下:
Imports System.Net
Imports System.Net.Sockets ' 引用SOCK组建
Imports System.Text
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim l_poit As IPEndPoint
Dim ip As IPAddress
ip = IPAddress.Parse("172.21.67.89")
l_poit = New IPEndPoint(ip, 200)
udpserver= New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
udpserver.Bind(l_poit) ‘ 绑定IP地址和通道
Me.Timer1.Enabled = True ‘启动定时监孔
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ‘接收数据的处理
Dim rec(4096) As Byte
Dim recnum As Integer
Dim diobyte As Byte
If udpserver.Available > 0 Then
recnum = udpserver.Receive(rec)
If recnum > 0 Then
dev.DIOPort().GetDiPortValue(diobyte) '获得DI值
If diobyte = 0 Then
Me.TextBox1.Text = Me.TextBox1.Text + Encoding.ASCII.GetString(rec, 0, recnum)
ElseIf diobyte = 1 Then
Me.TextBox3.Text = Me.TextBox3.Text + Encoding.ASCII.GetString(rec, 0, recnum)
End If
End If
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ‘关闭连接
Me.Timer1.Enabled = False
udpserver.Close()
End Sub
2、客户使用VB.net编程方法,与SQL SERVER 数据库进行数据交互。 需要采用 使用微软的精简NET FRAME 组建,采用SMARD DEVICE 的 SQL SERVER CLIENT 的技术,并采用ADO.NET 的编程方法来实现数据库 的编程方法实现的,实现代码如下:
Imports System.Data.SqlClient
Imports System.Data
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Dim cecon As New SqlCeConnection
Dim sqlstrAsString =
"IntegratedSecurity=SSPI;database=Northwind;server=XUEFENG;UserID=BUILTIN/administrator; Password=hxfbit;" ‘建立数据库的连接
Dim myconn As New SqlConnection(sqlstr)
Dim mycmd As New SqlCommand("SELECT * from Customers ", myconn)
mycmd.CommandType = CommandType.Text (SQL语句查询命令)
myconn.Open()
Dim i As Integer
Dim eof As Boolean
eof = True
Dim myreader As SqlDataReader = mycmd.ExecuteReader() 建立数据缓冲区
Do Until Not eof
While myreader.Read() ‘显示查询数据
Me.TextBox1.Text = myreader.GetString(0)
Me.TextBox2.Text = myreader.GetString(1)
Me.TextBox3.Text = myreader.GetString(2)
Me.TextBox4.Text = myreader.GetString(3)
'Me.ListView1.Items.Add(myreader.GetString(0))
'Me.ListView1.Items(2).SubItems.Add(myreader.GetString(1))
End While
eof = myreader.NextResult()
Loop
myreader.Close()
myreader.Close()
End Sub
3、客户需要一个工业化的建议键盘来代替通用键盘的操作,UNO-2050本机上的DI/O口正好可以来满足此功能,通过4DI和4DO的交叉矩阵,通过软件处理,正好可以来实现一个最多有16个按键的仿真键盘。而研华公司也正好提供了在VB.NET下DIO编程的驱动,客户可以非常方便的来实现这个键盘功能. 驱动的主要函数用法如下:
Imports Advantech.UNO ‘导入驱动
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim num As Int32
num = 0 '' UNO 2000的设备号就是为0
dev = New Advantech.UNO.Device(num) '''初始化 UNO 2000
dev.Open() '打开UNO 2000
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
dev.Close() '关闭设备
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
dev.DIOPort().SetDoPortValue(255, 15) '’DO输出 第一个参数为屏蔽码(0为屏蔽),第二个参数为输出量,自动输出到输出端口
End Sub
4、使用UNO2050与 串口的数据采集模块和串口仪表连接,,但是由于客户需要采用VB.NET编程,VB.net 编程工具没有直接的类似VB6的MSCOMM的控件来进行编程,如果直接用NET下面的MSCORLIB.dll 来编程,会给客户带来很大的困难。但是研华为UNO提供了一个VB.NET下的串口变成驱动,很好的解决了此问题,用户可以非常方便的采用此驱动,就像使用MSCOMM控件一样简单,实现代码如下:
Imports System
Imports Advantech.Common
Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click
Dim port As Integer
port = comArray(cbxCOM.SelectedIndex())
com = New Advantech.Common.ComPort(port) ‘建立串口对象
com.SetComPortState(9600, 8, 0, 1) 设置串口参数
If com.OpenComPort() = True Then ‘打开串口
' set COM port state
If SetComState() = False Then
MsgBox("Set COM port state failed!", MsgBoxStyle.OKOnly, "Error")
Return
End If
If SetComTimeout() = False Then
MsgBox("Set COM port timeout failed!", MsgBoxStyle.OKOnly, "Error")
Return
End If
btnClose.Enabled = True
btnSend.Enabled = True
SwitchEnable(False)
Else
MsgBox("Open COM" & port & ": failed!", MsgBoxStyle.OKOnly, "Error")
End If
End Sub
Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click ‘发送数据
Dim szSend As String, szRecv As String
If txtSend.Text.Length = 0 Then
MsgBox("Please input the command string!", MsgBoxStyle.OKOnly, "Warn")
Exit Sub
End If
szSend = txtSend.Text + Chr(13)
If com.Send(szSend) > 0 Then
If com.Recv(szRecv) > 0 Then
lsbxRecv.Items.Add(szRecv)
Else
lsbxRecv.Items.Add("## Fail to receive! ##")
End If
Else
lsbxRecv.Items.Add("## Fail to send! ##")
End If
lsbxRecv.SelectedIndex = lsbxRecv.Items.Count - 1
End Sub
通过解决以上技术难题,加上UNO本身的高稳定性和强抗干扰问题,基本上克服了原来钢厂中信息查询终端不稳定,体积庞大,容易死机,扩展不灵活,成本高,扩展不灵活等缺点,真正实现了一个工业化的钢厂智能信息查询终端的自动化系统.