摘 要:随着科学技术的日益发展,变频器被广泛应用到工业生产的每个角落。本文介绍了一种利用VB6.0编程,实现计算机与艾默生EV1000型变频器间的频率与状态控制。实验结果表明利用VB6.0提供的 Mscomm控件能够很好的实现计算机对变频器的控制。
关键词:串行通迅;变频器;VB6.0
1.引言
本文以对艾默生EV1000型变频器的控制为例为大家介绍一种使用VB6.0编程工具提供的MScomm控件,通过RS485串行接口对一台设备进行远程控制的方案。
2.变频器485串口通迅方案的设计
本方案采用艾默生Ev1000型变频器,并在窗体上使用HScroll控件手动控制传感器的工作频率,将变器实际工作频率与目标工作频率显示在窗体上。该通过数据发送模块、数据读取模块两个模块组成。数据发送模块将HScroll控件的最大值设为变频器的最大工作频率,本款变器为工频变频器,故最大值为50HZ最小值为0HZ。使变频器的工作频率和HScroll控件中的值一致。这样可以通过拖动HScroll控件的滑动块,就可以实现变频器的频率控制。
2.1 数据发送模块
⑴ 简述
数据发送模块通过使用timer控件不停的读取HScroll控件的值将其?????通过MScomm控件发送到变频器。以达到通过拖动HScroll控件的滑动块或者控制HScroll的值来控制变频器的工作频率的目的。
⑵ 模块设计
本方案采用的变器为工频变频器,最大工作频率为50HZ,可采用RTU和ASCII模式进行串行通迅。本方案采用ASCII模式,数据帧的格式为帧头、从机地址、功能码、数据、校验码、帖尾。帧头为0X3A帖尾为0XD,0XA。常用功能码最的作用是决定不同的操作请求。本方案需要使用的功能码为0X03 和0X06这两个参数。0X03功能为读取变频器功能码参数和运行参数,0X06改写单个变频器功能码或者控制参数,掉电之后不保存。从机地址,在一台上位机控制多台从机的情况下,可以通过该地址来识别各从机的工作状态,并对各从机发布命令。该值在变频器中设置,本款变器的默认地址为05本方案未作改变。数据部分则由寄存器地址和变频器控制字与变频器状态字组成。本方案需要使用的寄存地址分别3200设定变频器工作状态、3201设定变频器工作频率和3301‘变频器实当前主设定的实际运行值。根据ev1000型变频器通迅协议,变频器控制字与状态字由两个八位二进制数编码在转换成十六进制数字符型进行传输。常用的是正常启动变频器,电机运行方向为正转、允许加减速、上位机控制有效、故障复位无效,0000000111000111转为十六进制数为01C7。读取变频器工作频率0000000000000001转为十六进制数为0001。设定变频器频率只需在设定变频器寄地址后加上所需设定的频率即可(表示方法同样是四位十六进制数,使用hex()函数从十进制转为十六进制数不足四位在有效数前补零)。要注意的是本款变频器与上位机之间通迅时传递的频率信息时没有小数位的信息以字符型直接发送给变频器所以将HScroll控件的最大值设为5000,最小值为0。所以在收到变频器发送的工作频率信息时将其除以一百后才是其实际工作频率。代码如下:
Private Sub Form_Load()
yc1 = 0:sbz=chr(58):wbz=chr(13)+chr(10)
MSComm3.Output = Chr(58) + “0506320001C7” + lrcjiaoyan(“0506320001C7”) + Chr(13) + Chr(10) 在窗体启动时启动变频器
End Sub
Private Sub Timer1_Timer()
Label9.Caption = HScroll1.Value / 100 ‘将hscroll的值实时显示在窗体中
If yc1 > 5 Then ‘该值大于5时向控制变频器的工作频率
MSComm3.Output = Chr(58) + “05063201” + pl(Form1.HScroll1.Value) + lrcjiaoyan(“05063201” + pl(Form1.HScroll1.Value)) + Chr(13) + Chr(10)
yc1 = 0
Else
MSComm3.Output = Chr(58) + “050333010001” + lrcjiaoyan(“050333010001”) + Chr(13) + Chr(10)
yc1 = yc1 + 1 ‘yc1小于5时则读取变器的实际工作频率
End If
End Sub
2.2 数据接收模块
⑴ 简述
数据接收模块通过MScomm控件的OnComm事件将变频器向上位机发送的信号接收后转换成十进制数并将其显示在窗体上。
⑵ 模块设计
首先将需要使用的sbz=chr(58),wbz=chr(13)+chr(10)两个变量在Form_Load()事件中定义使之可以OnComm 事件中被引用。MScomm控件的OnComm事件是在串口每接收到一个字节的数据则触发该事件,因为本方案使用timer事件每10毫秒触发时便向变器发送一次读取变频器工作频率的命令可以保证上位机能够不间断的接收到来自变频器关于变频器工作频率的信息。本模块将所收到的数据使用自定义的lrcjiaoyan()函数进行LRC较验,并与发送变频器的发送来LRC 校验码进行比对,如果比对结果一致则该数据帧有效,之后将其变频器工作频率的数据截取下来转换成为十进制数后将其显示到窗体上代码如下:
Private Sub MSComm3_OnComm()
Dim inbyte3 As String:Dim zjg As String:Dim wbzwz As Integer
Dim sbzwz As Integer:Dim jiaoyanzhi As String:Dim jiaoyanzhi1 As String
Dim gn As String:Dim xspl As Integer:Dim sdpl As Long
inbyte3 = MSComm3.Input
inputstring = Trim(inputstring + inbyte3)去掉该数据中的空格
Do While InStr(inputstring, wbz) <> 0 And InStr(inputstring, sbz) <> 0
wbzwz = InStr(inputstring, wbz) ‘确定帧尾的位置
sbzwz = InStr(inputstring, sbz) ‘确定帧首的位置
zjg = Mid(inputstring, sbzwz, wbzwz + 1) ‘截取该数据帧中有效数据
inputstring = Trim(Mid(inputstring, wbzwz + 2))
jiaoyanzhi = Mid(zjg, wbzwz - 2, 2) ‘截取变频器发送来的校验码
jiaoyanzhi1 = lrcjiaoyan(Mid(zjg, sbzwz + 1, wbzwz - 3)) ‘对数据进行校验
If jiaoyanzhi1 = jiaoyanzhi Then ‘判断LRc校验值是否一致
gn = Mid(zjg, sbzwz + 1, 4)
if gn = “0503”
xspl = Val(“&h” + Mid(zjg, sbzwz + 7, 4)) ‘将读取到的数据转换为十进制
Label10.Caption = Str(xspl / 100) ‘将收到的数据显示到窗体上
End if
End If
Inputstring = “ ” ‘清空inputstring的值准备接收下一帧数据。
Loop
End Sub
3 综述
在对单一或几台支持串口通迅的设备如变频器时进行复杂或者需要频繁手动干预的操作时,使用PLC控制并连接到上位机并制作操作界面显得不够经济,而且增加了不必要的中间环节无形中则降低了整个系统的可靠性和维护成本,相比之下使用一台上位机直接控制一台或多台设备则降低了企业的维护成本有利于提高中小企业的自动化程度。
参考文献
[1]《EMERSON EV1000中文V2.1版说明书》;
[2]张辉、李荣利、王和平著《VISUAL BASIC串口通信及编程实例》;
作者简介
郭琦(1982-),男,汉族,从事自动化及安全生产管理工作。