2、变频器串口通信控制检测软件的编制
在项目文件嵌入MSComm控件的头文件mscomm.h及实现文件mscomm.cpp之后,为了用该控件控制1个串口进行通信操作,还必须在应用程序中插入该控件。为此,我们为程序的某个对话框插入MSComm控件,控件ID为IDC_MSCOMM1,并利用Class
Wizard为其添加变量CCMSComm
m_Coml,则程序中对串口的各种操作都可通过变量m_Coml来实现。
MicroMaster变频器回送的状态信息1帧为14B。为此,程序编制上采用事件驱动的通信方式,串口每接收14个字符便激活1个OnComm()事件,在OnComm()消息处理函数中加入相应的处理代码,用来读取状态字ZSW和HIW各位的状态参数,并作出相应的处理,如显示、报警等。下面简要给出用事件驱动方式读出变频器回送状态字的程序源代码。设RS-485卡的口地址为工控PC机的串口4的地址,波特率为9600b/s。
串口初始化程序如下:
m_Coml.SetCommPort(4); //设置串口4
if(!
m_Coml.GetPortOpen())
m_Coml.SetPortOpen(TRUE); //打开串口
m_Coml.SetSettings(″9600,e,8,1″); //串口参数设置
m_Coml.SetInputMode(1); //设置Binary缓冲输入方式
m_Coml.SetRThreshold(14); //每接收1个字符时//激发OnComm()事件
工控PC机控制变频器的参数通过类ColeVariant的构造函数来实现,ColeVariant可以接受各种类型的数据(如字符串、整数、浮点数等)并自动将其转换为符合VARIANT要求的数据。程序代码如下:
m_Coml.SetOutput(ColeVariant(″x02″)); //发送起始//字符02H
m_Coml.SetOutput(ColeVariant(″x0C″));
//发送数据//长度字符0CH
…… //发送其它的控制参数
对于变频器回送的状态信息则利用Windows的消息处理函数OnComm()进行处理。利用ClassWizard为MSComm控件IDC_MSCOMM1添加消息处理函数OnOnCommMscomm1(),在OnOnCommMscomm1()中加入处理代码如下(最后2个语句为添加的程序代码,其余代码由ClassWizard自动生成):
void
CGpsdataDlg::OnOnCommMscomm1()
{
//TODO:Add your control
notification handler //code
here
m_Coml.SetInputLen(0); //读取串口缓冲区全//部数据
VARIANT
Parameter=m_Coml.GetInput(); //数据赋给VARIANT变量
…… //具体程序处理代码
}
在消息处理函数OnOnCommMscomm1()中,将变频器回送的14个状态字每一次全部读到VARIANT变量Parameter中,然后程序再从VARIANT类型的数组变量Parameter中分别读取各状态字节,在屏幕上显示、判断并报警。
本文利用VC5.0下的ActiveX控件和MicroMaster变频器RS-485的串行通信功能,实现了在Windows95环境下用单台工控PC机控制多台变频器的任务,并能实时检测各变频器的运行状态。整个控制系统灵活方便,具有很大的实用性。