新闻中心

EEPW首页 > 电源与新能源 > 设计应用 > 基于VC环境的变频器联网控制

基于VC环境的变频器联网控制

作者:时间:2011-03-26来源:网络收藏

4 计算机串口通讯编程

对于的计算机串口通信编程可以用多种方法实现。MSComm控件通过串行端口传输和接收数据,因此,可在编写计算机串口通信程序时使用MSComm控件。MSComm控件使用时比较方便,只要完成简单的串口初始化设置,然后调用相应的读写函数即可完成计算机串口通信操作。但是,使用MSComm控件在设置通信参数时是成批进行的,即数据传输速率、奇偶校验、数据位数和停止位数是作为一个参数进行设置的。这样使通信参数的设置和修改不太灵活自如,因此,不采用MSComm控件进行串行通信编程。利用Windows通信API函数进行串口通信编程可以非常灵活地进行串口参数的配置,但编程非常复杂,专业化程度较高,因此也没有采用。利用的标准通信函数inp,inpw,inpd,outp,outpw,outpd等直接对串口进行操作编程需要对硬件电路的结构原理非常了解,但这里并不需要对计算机的串口电路非常了解,因此同样没有采用。最终程序中应用的是第三方编写的串行通信Cserial类。下面对CSerial类进行解释。

CSerial::CSerial是类构造函数,不带参数,负责初始化所有类成员变量。

CSerial::Open是打开通信端口的成员函数,带两个参数,一个是串行端口号,另一个是波特率。

CSerial::Close是关闭通信端口的成员函数。类析构函数调用这个函数,因此可不用显式调用这个函数。

CSerial::SendData函数把数据从一个缓冲区写到串行端口。它所带的第一个参数是缓冲区指针,其中包含要被发送的资料。这个函数返回一些到端口的实际字节数。

CSerial::ReadDataWaiting函数返回等待在通信端口缓冲区中的数据,不带参数。

CSerial::ReadData函数从端口接收缓冲区读入数据。第一个参数是缓冲区指针,第二个参数是个整数值,给出缓冲区的大小。

将CSerial.cpp和CSerial.h添加入源程序,在串口通信程序部分调用CSerial类的函数,可以很方便地完成通信功能。下面是在程序中用CSerial类编写通信程序,完成的功能是按既定的通信协议向网络下传查询指令,并接收从站返回的信息。如果连发三次都没有接收到的应答信息就显示为离线状态。

CSerialSerial;

inti;

CStringm_mes;

Unsignedcharsend[14]={0x02,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x80,0x00,0x00,0x00};

for(i=1;i=m_slname;i++)

{

send[2]=i;

unsignedcharu=send[0];

for(intl=1;l13;l++)

{

u=u^send[l];

}

send[13]=u;

showaf=send[10];

if(Serial.Open(m_port,m_baudrate))

{

Serial.SendData(send,14);

}

Sleep(200);

if(Serial.ReadDataWaiting())

{

Serial.ReadData(recieve,14);

}

else

{

Serial.SendData(send,14);

Sleep(200);

if(Serial.ReadDataWaiting())

{

Serial.ReadData(recieve,14);

}

else

{

Serial.SendData(send,14);

Sleep(200);

if(Serial.ReadDataWaiting())

{

Serial.ReadData(recieve,14);

}

else

{

m_mes.Format(%disoffline,i);

m_recc.InsertString(-1,m_mes);

}

}

}

在与变频器的通信中要求计算机的串口号和通信速率是可变的。Open函数的两个参数就是计算机的串口号和通信速率,在调用该函数初始化串口时,将这两个参数按所希望的数赋值就可以正常通信了。如果要修改这两个参数,只要将修改值赋给这两个参数的变量,再调用一次Open函数从新初始化计算机串口即可。在Open函数中仅初始化了串口号、通信速率和8位数据位这三个参数,其它参数采用上一次串口初始化形成的参数数据。但是,在通信中还要求传送的数据为二进制数据、偶校验和有1位停止位,这就要求对Open函数进行修改。对Open函数的修改主要是对其中设备快(DCB)的修改。只要将旧的DCB结构改写为以下结构即可。

GetCommState(m_hIDComDev,&dcb);

dcb.BaudRate=nBaud;

dcb.ByteSize=8;

dcb.fParity=1;

dcb.fBinary=1;

dcb.Parity=EVENPARITY;

dcb.StopBits=ONESTOPBIT;

经过上述修改后,用Open函数初始化的串口就符合传送二进制数、偶校验、8位数据位、1位停止位和波特率及端口可变的要求,计算机可以和变频器进行正常的通信了。

5 组网实验

远程软件完成后进行组网实验。网络上用一台计算机连接两台变频器,对其中一台变频器执行正转起动到30Hz的命令,软件控制界面显示如图5所示。

图5 变频器器起动控制界面

6 结语

本文主要介绍了实现变频器远程网络控制的计算机控制软件如何编写。从软件的功能框架,数据库的操作和计算机串口通信3个方面进行了阐述,详细说明了在下来编写合乎我们要求的控制软件的方法,具有一定的实际参考价值。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭