您当前的位置:五五电子网电子知识电工技术电工文摘Windows98下单台P与多台变频器的串行通信 正文
Windows98下单台P与多台变频器的串行通信

Windows98下单台P与多台变频器的串行通信

点击数:7490 次   录入时间:03-04 11:52:58   整理:http://www.55dianzi.com   电工文摘
摘 要:介绍了西门子MicroMaster变频器的RS-485通信协议,利用VB6.0中的ActiveX控件MSComm6.0通信控件实现  

WINOOWs98下单台微机与多台变频器的串行通信控制,并能实时检测各个变频器的运行状态。  

一、前言  

在许多数控设备中,经常要用变频器去控制交流电机的转速、转向。在某些地方,需要用一台工控PC机灵活地控制多台变频器,以达到控制各交流电机的目的。针对这一需要,一些公司(如德国的西门子、日本东芝、三菱等公司)推出了带有RS485通信接口的变频器,使用户能够方便灵活地选择变频器的强大功能。  

在WINOOWs98下开发工控软件,可以利用WINOOWs98的丰富资源,方便地生成各种菜单及美观大方的图形界面,软件产品质量高且开发周期短。Visual Basic6.0是Microsoft公司推出的功能强大的WINOOWs开发软件,只能在WINOOWs环境下运行开发32位的应用程序。但在WINOOWs环境下,系统完全接管了各种硬件资源,不允许用户直接控制串行口的中断管理。如何在WINOOWs环境下开发微机的底层资源,已成为当今工业控制软件的一大热点和难点。  

本文利用VB6.0的ActiveX控件——Microsoft Communication控件,方便地实现WINOOWs98环境下与多台西门子MicroMaster变频器的串行通信接口,成功地实现了用单台PC机对多台交流异步电动机的灵活控制。  

二、系统的总体设计  

图1为系统的总体方框图,这里只重点突出PC机与变频器RS485的接口部分。RS485的驱动器可带32个接收器,在波特率为 100Kbps时,通信距离可达到1.2km;通信距离为15m,波特率可达到10Mbps 。在工业现场,RS485是应用较多的一种通信  
方式。图中PC机通过RS485接口卡与多个变频器相连接,最多达到32台。每个变频器被赋予各自的地址码用以识别身份,这样上位机便能通过RS485通信线,对挂在上面的变频器进行控制操作。  

三、变频器的串口通信协议  

对于西门子MicroMaster变频器。其通信方式为RS-485,波特率最高可达19200bps;1位起始位,8位数据位,1位奇偶效验位,1位停止位。变频器接收控制的通信协议如下:  

STX:起始字符,02H。  

LGE:发送字节数,对于MicroMASTER,为0CH(12个字节)。  

ADR:变频器的地址码,取值范围为0-31(bit:0-4位),bit5为1时为广播发送。  

PKE:为一16位的字,用来控制变频器的运行参数设置,各bit的含义如下:  

对于MicroMaster,控制位为0001时,读变频器的参数;控制位为0010时,写参数到变频器的RAM和EEPROM。bit11未用,置为0。变频器的参数值详见说明书。  

IND:为16位的字,未用,置为0。  

VAL:为16位的变频器参数,与PKE一起将运行参数写入到变频器中。  

STW:为16位的字,用来控制变频器的运行动作。各位的具体含义详见说明书。  

HSW:为16位的字,用来控制变频器的输出频率。满频的值为16384(400HZ)对应100%的输出频率,最大满频的值为32767,即200%的输出频率。当取值为32768-65535时,表示反向的输出频率从0-200%变化,电机反转。  

BBC:效验字符,为前面所有字节的异或和。  

若变频器#2(地址码为02H)以满频的25%输出频率,则以上各参数的值如下:  

同时,变频器也向上位机回送状态数据,其通信协议如下:  

与上位机向北变频器发送的控制字相比,变频器回送的状态字只是以ZSW代替了STW,HIW代替了HSW,其余字的含义是一样的。  

ZSW:为16位的字,用来指示变频器的当前运行状态。各位的具体含义详见说明书。  

HIW:为16位的字,代表变频器的输出频率,其定义与HSW是一样的。  

因此,对于变频器能通过面板按键的设置功能,通过以上的通信协议也一样能实现。并且通过RS-485通信线最多能同时控制32台变频器,同时各变频器的运行状态也能实时地回送给上位机,这就大大地方便了用户,增加了控制系统的灵活性。  

四、Viscal Basic 6.0下对变频器进行串行通信控制  

1、VB6.0中的ActiveX控件MSComm  

在WINOOWs环境下,操作系统完全接管了各种硬件资源,不允许用户直接控制串行口的中断管理。以往程序员只能通过数目众多的API函数来控制串口。 VB6.0下提供了一个ActiveX控件Microsoft Communication Control 6.0,简称MSComm控件。用户可以在自己的应用程序嵌入MSComm控件,利用它可以方便地进行计算机串口的通信管理。  

在vb6.0开发环境中,MSComm通信控件可直接从VB的ToolBox中加入窗体Form,即可用其进行通信。若ToolBox中无此控件,则用Tools的Custom Controls将MSComm.VBX从WINOOWs的System子目录中加入VB的ToolBox中。  

MSComm控件有许多属性(Property),其中一些重要的属性如下:  

CommPort:设置串口号;类型:short 。  

Settings:设置串口通信参数;类型:Csting 。  

PortOpen:设置或返回通信口的状态;类型:BOOL 。  

InputMode:设置从缓冲区读取数据的格式;类型:long 。  

Input:从接收缓冲区读取数据;类型:VARIANT 。  

Output:向发送缓冲区写入数据;类型:VARIANT 。  

InBufferCount:接收缓冲区中的字节数;类型:short 。  

OutBufferCount:发送缓冲区中的字节数;类型:short 。  

CommEvent:设置或返回Input每次读出的字节数;类型:short 。  

CommEvent:串口事件;类型:short 。  

其中串口号(CommPort)设置为1、2等表示COM1、COM2。参数设置(Settings)的格式为“B,P,D,S”B表示波特率,P表示奇偶校验(N:无校验,E:偶校验,O:奇校验),D表示字节有效位数,S表示停止位数。串口状态为BOOL变量,TRUE表示打开串口,FALSE表示关闭串口。InputMode使程序能方便地选择从缓冲区读取数据的格式,设置为0时,为字符串格式(Text),设置为1时,为二进制格式(Binary)。InputLen设置或返回的是用Input从缓冲区读字符串时每次读出的字符个数,这个性质对于读出数据块中长数据串非常有用。  

另外,MSComm控件提供了两种方法来处理串口通:上面属性的InBufferCount和OutBufferCount用于串口的查询方式;对于较复杂的通信任务,可通过SetCommEvent()函数设置串口要响应的事件,当相应事件或串口错误事件发生时,系统会激活OnComm()事件,在OnComm()中添加用户的处理代码,则可实现类似DOS中断的串口处理程序。  

2、变频器串口通信控制检测的软件编程  

在项目窗体中嵌入MSComm通信控件之后,为了用该控件控制一个串口进行通信操作,还必须在应用程序中插入该控件。为此为程序的某个对话框插入MSComm控件,控件名为MSCOMM1,并为其添加两个定时器控件(TimPeriodic和TimNonPeriodic)和一个命令按钮控件CmdNonPeriodic 。通信控件用于访问串口、发送和接收数据;周期定时器控件(TimPeriodic)用于控制每秒由计算机向各数据点发送周期性命令;命令按钮控件与非周期定时器控件(TimNonPeriodic)用于发送非周期性命令。 

MicroMaster变频器回送的状态信息一帧位14个字节。为此,程序编制上采用事件驱动的通信方式,串口每接受14个字符边激活一个OnComm()事件,在OnComm()消息处理函数中加入相应的处理代码,用来读取状态字ZSW和HIW各位的状态参数,并做出相应的处理,如显示、报警等等。下面简要给出用事件驱动方式读出变频器回送状态字的程序源代码。设RS-485的口地址为PC机的串口2的地址,波特率为9600bps 。  

(1)窗体中各控件初始设置:TimPeriodic为1s,TimNonPeriodic为0.5s  

Sub Form_Load()  

Mscomm1.CommPort=2 选用COM2串行口  

MsComm1.setting=”9600,N8,1” 波特率为9600,无奇偶校验,8位数据位,一位停止位  

Mscomm1.InputLen=0 ’Input将读取接收缓冲区的全部内容  

Mscomm1.InputLenSize=1024 ’设置接收缓冲区的字节长度  

Mscomm1.PortOpen=0 ’打开通信口  

Mscomm1.InBufferCount=0 ’清除发送缓冲区数据  

Mscomm1.OutBufferCount=0 ’清除接收缓冲区数据  

TimPeriodic.inteval=1000 ’设置1s定时间隔,使遥测命令每隔1s发送1次  

TimNonPeriodic.inteval=500 ’设置0.5s定时间隔,查询命令按钮是否处于激活状态以确定是否发送周期性命令  

CmdPressed=False ’命令按钮为未激活状态  

DuringPeriodic=False’周期命令数据传输尚未开始  

DuringNonPeriodic=False’非周期命令数据传输尚未开始  

End Sub  

[1] [2]  下一页


本文关键字:变频器  通信  电工文摘电工技术 - 电工文摘