摘 要:介绍了西门子MicroMaster变频器的RS-485通信协议,利用VB6.0中的ActiveX控件MSComm6.0通信控件实现
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户 Windows98下单台微机与多台变频器的串行通信控制,并能实时检测各个变频器的运行状态。 P.L.C.技.术.网——可编程控制器技术门户 关键词:变频器、PC机、VB6.0、ActiveX控件、RS-485、事件驱动 WWW_PLCJS_COM-PLC-技.术_网 一、前言 ——可——编——程——控-制-器-技——术——门——户 在许多数控设备中,经常要用变频器去控制交流电机的转速、转向。在某些地方,需要用一台工控PC机灵活地控制多台变频器,以达到控制各交流电机的目的。针对这一需要,一些公司(如德国的西门子、日本东芝、三菱等公司)推出了带有RS485通信接口的变频器,使用户能够方便灵活地选择变频器的强大功能。 WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户) 在Windows98下开发工控软件,可以利用Windows98的丰富资源,方便地生成各种菜单及美观大方的图形界面,软件产品质量高且开发周期短。Visual Basic6.0是Microsoft公司推出的功能强大的Windows开发软件,只能在Windows环境下运行开发32位的应用程序。但在Windows环境下,系统完全接管了各种硬件资源,不允许用户直接控制串行口的中断管理。如何在Windows环境下开发微机的底层资源,已成为当今工业控制软件的一大热点和难点。 WWW_P※LCJS_CO※M-PLC-技-.术_网 本文利用VB6.0的ActiveX控件——Microsoft Communication控件,方便地实现Windows98环境下与多台西门子MicroMaster变频器的串行通信接口,成功地实现了用单台PC机对多台交流异步电动机的灵活控制。 P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户 二、系统的总体设计 WW.W_PLCJS_COM-PLC-技.术_网 图1为系统的总体方框图,这里只重点突出PC机与变频器RS485的接口部分。RS485的驱动器可带32个接收器,在波特率为 100Kbps时,通信距离可达到1.2km;通信距离为15m,波特率可达到10Mbps 。在工业现场,RS485是应用较多的一种通信 WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户) 方式。图中PC机通过RS485接口卡与多个变频器相连接,最多达到32台。每个变频器被赋予各自的地址码用以识别身份,这样上位机便能通过RS485通信线,对挂在上面的变频器进行控制操作。 WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户) 三、变频器的串口通信协议 WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户) 对于西门子MicroMaster变频器。其通信方式为RS-485,波特率最高可达19200bps;1位起始位,8位数据位,1位奇偶效验位,1位停止位。变频器接收控制的通信协议如下: WWW_PL※CJS_COM-PLC-技.术_网 STX:起始字符,02H。 WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户) LGE:发送字节数,对于MicroMASTER,为0CH(12个字节)。 WWW_PLC※JS_COM-PmLC-技.术_网 ADR:变频器的地址码,取值范围为0-31(bit:0-4位),bit5为1时为广播发送。 WWW_P※LCJS_COM-PLC-)技.术_网 PKE:为一16位的字,用来控制变频器的运行参数设置,各bit的含义如下: WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户) 对于MicroMaster,控制位为0001时,读变频器的参数;控制位为0010时,写参数到变频器的RAM和EEPROM。bit11未用,置为0。变频器的参数值详见说明书。 W1WW_P4LCJS_COM-PLC-技.术_网 IND:为16位的字,未用,置为0。 WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户) VAL:为16位的变频器参数,与PKE一起将运行参数写入到变频器中。 WWW_P※LCJS_COM-PLC-)技.术_网 STW:为16位的字,用来控制变频器的运行动作。各位的具体含义详见说明书。 WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户) HSW:为16位的字,用来控制变频器的输出频率。满频的值为16384(400HZ)对应100%的输出频率,最大满频的值为32767,即200%的输出频率。当取值为32768-65535时,表示反向的输出频率从0-200%变化,电机反转。 ——可——编——程——控-制-器-技——术——门——户 BBC:效验字符,为前面所有字节的异或和。 WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户) 若变频器#2(地址码为02H)以满频的25%输出频率,则以上各参数的值如下: WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户) 同时,变频器也向上位机回送状态数据,其通信协议如下: WWW_PLCJS_COM-PLC-技.术_网 与上位机向北变频器发送的控制字相比,变频器回送的状态字只是以ZSW代替了STW,HIW代替了HSW,其余字的含义是一样的。 plcjs.技.术_网 ZSW:为16位的字,用来指示变频器的当前运行状态。各位的具体含义详见说明书。 P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户 HIW:为16位的字,代表变频器的输出频率,其定义与HSW是一样的。 W1WW_P4LCJS_COM-PLC-技.术_网 因此,对于变频器能通过面板按键的设置功能,通过以上的通信协议也一样能实现。并且通过RS-485通信线最多能同时控制32台变频器,同时各变频器的运行状态也能实时地回送给上位机,这就大大地方便了用户,增加了控制系统的灵活性。 WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户) 四、Viscal Basic 6.0下对变频器进行串行通信控制 WWW_PL※CJS_COM-PLC-技.术_网 1、VB6.0中的ActiveX控件MSComm W1WW_P4LCJS_COM-PLC-技.术_网 在Windows环境下,操作系统完全接管了各种硬件资源,不允许用户直接控制串行口的中断管理。以往程序员只能通过数目众多的API函数来控制串口。 VB6.0下提供了一个ActiveX控件Microsoft Communication Control 6.0,简称MSComm控件。用户可以在自己的应用程序嵌入MSComm控件,利用它可以方便地进行计算机串口的通信管理。 WWcW_PLCJS_COM-PLC-技.术_网 在vb6.0开发环境中,MSComm通信控件可直接从VB的ToolBox中加入窗体Form,即可用其进行通信。若ToolBox中无此控件,则用Tools的Custom Controls将MSComm.VBX从Windows的System子目录中加入VB的ToolBox中。 WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户) MSComm控件有许多属性(Property),其中一些重要的属性如下: WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户) CommPort:设置串口号;类型:short 。 P.L.C.技.术.网——可编程控制器技术门户 Settings:设置串口通信参数;类型:Csting 。 WWW_PL※CJS_COM-PLC-技.术_网 PortOpen:设置或返回通信口的状态;类型:BOOL 。 WWcW_PLCJS_COM-PLC-技.术_网 InputMode:设置从缓冲区读取数据的格式;类型:long 。 WWW_P※LCJS_COM-PLC-)技.术_网 Input:从接收缓冲区读取数据;类型:VARIANT 。 WWW_P※LCJS_CO※M-PLC-技-.术_网 Output:向发送缓冲区写入数据;类型:VARIANT 。 WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户) InBufferCount:接收缓冲区中的字节数;类型:short 。 WW.W_PLC※JS_C,OM-PL,C-技.术_网 OutBufferCount:发送缓冲区中的字节数;类型:short 。 WWW_P※LCJS_COM-PLC-)技.术_网 CommEvent:设置或返回Input每次读出的字节数;类型:short 。 WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户) CommEvent:串口事件;类型:short 。 WWW_PLC※JS_COM-PmLC-技.术_网 其中串口号(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从缓冲区读字符串时每次读出的字符个数,这个性质对于读出数据块中长数据串非常有用。 WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户) 另外,MSComm控件提供了两种方法来处理串口通:上面属性的InBufferCount和OutBufferCount用于串口的查询方式;对于较复杂的通信任务,可通过SetCommEvent()函数设置串口要响应的事件,当相应事件或串口错误事件发生时,系统会激活OnComm()事件,在OnComm()中添加用户的处理代码,则可实现类似DOS中断的串口处理程序。 WWW_P※LCJS_COM-PLC-)技.术_网 2、变频器串口通信控制检测的软件编程 WWW_PL※CJS_COM-PLC-技.术_网 在项目窗体中嵌入MSComm通信控件之后,为了用该控件控制一个串口进行通信操作,还必须在应用程序中插入该控件。为此为程序的某个对话框插入MSComm控件,控件名为MSCOMM1,并为其添加两个定时器控件(TimPeriodic和TimNonPeriodic)和一个命令按钮控件CmdNonPeriodic 。通信控件用于访问串口、发送和接收数据;周期定时器控件(TimPeriodic)用于控制每秒由计算机向各数据点发送周期性命令;命令按钮控件与非周期定时器控件(TimNonPeriodic)用于发送非周期性命令。MicroMaster变频器回送的状态信息一帧位14个字节。为此,程序编制上采用事件驱动的通信方式,串口每接受14个字符边激活一个OnComm()事件,在OnComm()消息处理函数中加入相应的处理代码,用来读取状态字ZSW和HIW各位的状态参数,并做出相应的处理,如显示、报警等等。下面简要给出用事件驱动方式读出变频器回送状态字的程序源代码。设RS-485的口地址为PC机的串口2的地址,波特率为9600bps 。 P.L.C.技.术.网——可编程控制器技术门户 (1)窗体中各控件初始设置:TimPeriodic为1s,TimNonPeriodic为0.5s ——可——编——程——控-制-器-技——术——门——户 Sub Form_Load() WWW.PLCJS.COM——可编程控制器技术门户 Mscomm1.CommPort=2 ’选用COM2串行口 ——可——编——程——控-制-器-技——术——门——户 MsComm1.setting=”9600,N8,1” ’波特率为9600,无奇偶校验,8位数据位,一位停止位 WW.W_PLCJS_COM-PLC-技.术_网 Mscomm1.InputLen=0 ’Input将读取接收缓冲区的全部内容 WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户) Mscomm1.InputLenSize=1024 ’设置接收缓冲区的字节长度 WWW_P※LCJS_CO※M-PLC-技-.术_网 Mscomm1.PortOpen=0 ’打开通信口 WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户) Mscomm1.InBufferCount=0 ’清除发送缓冲区数据 WWW_PLCJS@_COM%-PLC-技.术_网 Mscomm1.OutBufferCount=0 ’清除接收缓冲区数据 WWW_P※LCJS_CO※M-PLC-技-.术_网 TimPeriodic.inteval=1000 ’设置1s定时间隔,使遥测命令每隔1s发送1次 WWW_P※LCJS_CO※M-PLC-技-.术_网 TimNonPeriodic.inteval=500 ’设置0.5s定时间隔,查询命令按钮是否处于激活状态以确定是否发送周期性命令 plcjs.技.术_网 CmdPressed=False ’命令按钮为未激活状态 ——可——编——程——控-制-器-技——术——门——户 DuringPeriodic=False ’周期命令数据传输尚未开始 WWW.PLCJS.COM——可编程控制器技术门户 DuringNonPeriodic=False ’非周期命令数据传输尚未开始 P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户 End Sub WWW_PLCJS@_COM%-PLC-技.术_网 (2)非周期性命令的发送:根据命令按钮状态及周期性命令数据传输状态,在TimNonPeriodic定时器的中断程序中发送非周期性命令。 WWW_P※LCJS_CO※M-PLC-技-.术_网 Sub CmdNonPeriodic_Click() WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户) CmdPressed=True ’命令按钮激活 WWW_PLC※JS_COM-PmLC-技.术_网 End Sub P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户 Sub TimNonperiodic_Timer() P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户 If DuringPeriodic=True OR Cmdpressed=False Then Exit Sub ’如周期命令数据传输尚未结束或命令按钮处于激活 WWcW_PLCJS_COM-PLC-技.术_网 状态,则退出发送非周期性命令程序。 P.L.C.技.术.网——可编程控制器技术门户 CmdPressed=False ’命令按钮恢复为未激活状态 plcjs.技.术_网 Call SendData(NonPeriodic_COMMAND) ’发送非周期性命令 WWW_PLC※JS_COM-PmLC-技.术_网 Mscomm1.Rthreshold=R_NONPERIODIC_BYTE‘发送非周期性命令后,设置Rthreshold属性,使主站接收所设定的字节数 WWW_PLCJS@_COM%-PLC-技.术_网 后引发OnComm事件 WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户) End Sub WW.W_PLCJS_COM-PLC-技.术_网 (3)TimPeriodic定时器程序:在TimPeriodic定时器的中断程序中发送周期性命令。 P.L.C.技.术.网——可编程控制器技术门户 Sub TimPeriodic_Timer() WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户) If DuringNonPeriodic=True Then Exit Sub ’如非周期命令数据传输尚未结束,则退出发送非周期性命令程序。 WW.W_PLCJS_COM-PLC-技.术_网 DuringPeriodic=True ’设置周期命令数据传输状态为正在进行中 WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户) Call SendData(NonPeriodic_COMMAND) ’发送非周期性命令 WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户) Mscomm1.Rthreshold=R_PERIODIC_BYTE’设置Rthreshold属性,使主站接收R_PERIODIC_BYTE个字节,引发OnComm事件 WWW.PLCJS.COM——可编程控制器技术门户 End Sub WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户) (4)OnComm事件程序:根据Rthreshold属性设置值,当接收缓存区内接收到相应字节的字符时,引发OnComm事件,在中断程序中接收数据。 ——可——编——程——控-制-器-技——术——门——户 Sub Mscomm1_OnComm() WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户) Select Case Mscomm1.commEvent ’在此插入处理各种不同错误或事件的代码 P.L.C.技.术.网——可编程控制器技术门户 Case MSCOMM_EV_RECEIVE W1WW_P4LCJS_COM-PLC-技.术_网 ReceiveString$=Mscomm1.Input P.L.C.技.术.网——可编程控制器技术门户 Select Case Mscomm1.Rthreshold WWW.PLCJS.COM——可编程控制器技术门户 Case R_PERIODIC_BYTE‘周期性命令的应答数据 plcjs.技.术_网 Call DisposeDate(NonPeriodic_CommAND) ’处理接收数据 WWcW_PLCJS_COM-PLC-技.术_网 DuringPeriodic=False ’设置周期命令数据传输状态为结束 WWW_PL※CJS_COM-PLC-技.术_网 Case R_NONPERIODIC_BYTE ’非周期性命令的应答数据 WWW_P※LCJS_CO※M-PLC-技-.术_网 Call DisposeData(NonPeriodic_CommAND) ’处理接收数据 WW.W_PLCJS_COM-PLC-技.术_网 DuringNonPeriodic=False ’设置非周期命令数据传输状态结束 WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户) End Select WWW_PLCJS@_COM%-PLC-技.术_网 End Select W1WW_P4LCJS_COM-PLC-技.术_网 End Sub WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户) 上述程序中,因MicroMaster变频器回送的状态信息一帧为14个字节,所以R_NONPERIODIC_BYTE和R_PERIODIC_BYTE 。对于变频器回送的状态信息则利用Windows的消息处理函数OnComm()进行处理。在消息处理函数中,将变频器回送的14个状态字一次全部读到所定义的变量参数中,然后程序再从变量参数中分别读取各状态字,在屏幕上显示、判断并报警。 P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户 五、结束语 WW.W_PLC※JS_C,OM-PL,C-技.术_网 本文利用VB6.0下的ActiveX控件和MicroMaster变频器RS-485的串行通信功能,实现了在Windows09环境下用单台PC机控制多台变频器的任务,并能实时检测各变频器的运行状态。整个控制系统灵活方便,具有很大的实用性。 |