金刚石合成控制系统中多串口通信技术的设计与实现
etTimeOuts()函数用于获得访问超时值。
(9)ClosePort()函数可用来关闭串口。因为在Windows系统中串口是系统资源,因而在不用时,应将其释放掉,以便于其它进程对该资源的使用。
4基于串口通信的金刚石合成控制
金刚石合成控制系统采用主从式控制方式,上位机为微机、下位机为PLC。上位机的主要功能是对系统进行实时监控,下位机的主要功能是对系统进行实时控制。上位机采用Windows98操作系统,其监控程序可用VC开发,上、下位机之间通过RS-232与RS-485串口进行通信,它们之间采用的通信波特率为9600bps,无奇偶校验,每字节8位,并有1位停止位。上、下位机之间传送的数据格式可自己定义。由于传输数据时可能会引起错误,所以加入了校验算法。该系统通过上位机向下位机发送数据,下位机收到后就把当前系统的状态参数返回给上位机。由于该系统中所控制的参数具有迟滞性,所以应采用定时发送数据的方法来采集现场状态信息。
上位机编程时,可用VC6.0生成一个对话框类型的程序框架,然后将自己编写的CSerialPort类加入到该工程中,并在主界面类?CCrystal?中添加一个CSerialPort类的成员变量serial。当监控系统开始工作时,可用AfxBeginThread??函数创建辅助线程来管理串口通信,当调用CSerialPort类中的WritePort??函数向串口发送数据后,可调用_sleep??函数使辅助线程休眠一段时间,以便使PLC有充分的时间返回数据;接着再调用CSerialPort类中的ReadPort()函数并从串口读数据,然后再调用_sleep()函数使辅助线程再休眠一定的时间。这样设计后,当进行串口通信时,主线程就能继续完成监控功能和处理其他事务。辅助线程函数的主要代码如下:
UINTSerialPro(void*param)
{
Ccrystal*mdlg=(Ccrystal*)param?
CStringstr;
intflag=1;
//如果初始化串口失败返回
if(!InitPort(“com2”))
{AfxMessageBox(“打开串口2失败”);
return0;
}
//循环读写串口,直到结束
while(flag)
{
//这里把要发送的数据传送给变量str
……
//向串口写数据
mdlg->serial.WritePort(hport,str);
//让辅助线程休眠100ms
_sleep(100);
//从串口读数据并赋给变量str
str=mdlg->serial.ReadPort(hport);
//这里把从串口得到的数据进行处理
……
5结束语
运用面向对象方法和多线程技术设计的通用串口通信类CSerialPort类,通过对WindowsAPI函数的封装使串口通信变得简单方便、容易维护。目前,该软件系统已成功地应用于金刚石合成控制系统,并成功解决了RS-232与RS-485两种串口通信的问题。经过几个月的运行表明,该串口通信软件工作稳定,出色地完成了系统的实时监控和显示任务。此外,由于采用了面向对象的方法和模块化设计,该软件的维护和升级十分方便;同时该系统具有很好的移植性,按照不同需求稍微改动一些代码就可以应用于其它控制系统中。
《金刚石合成控制系统中多串口通信技术的设计与实现(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/165448.html
(9)ClosePort()函数可用来关闭串口。因为在Windows系统中串口是系统资源,因而在不用时,应将其释放掉,以便于其它进程对该资源的使用。
4基于串口通信的金刚石合成控制
金刚石合成控制系统采用主从式控制方式,上位机为微机、下位机为PLC。上位机的主要功能是对系统进行实时监控,下位机的主要功能是对系统进行实时控制。上位机采用Windows98操作系统,其监控程序可用VC开发,上、下位机之间通过RS-232与RS-485串口进行通信,它们之间采用的通信波特率为9600bps,无奇偶校验,每字节8位,并有1位停止位。上、下位机之间传送的数据格式可自己定义。由于传输数据时可能会引起错误,所以加入了校验算法。该系统通过上位机向下位机发送数据,下位机收到后就把当前系统的状态参数返回给上位机。由于该系统中所控制的参数具有迟滞性,所以应采用定时发送数据的方法来采集现场状态信息。
上位机编程时,可用VC6.0生成一个对话框类型的程序框架,然后将自己编写的CSerialPort类加入到该工程中,并在主界面类?CCrystal?中添加一个CSerialPort类的成员变量serial。当监控系统开始工作时,可用AfxBeginThread??函数创建辅助线程来管理串口通信,当调用CSerialPort类中的WritePort??函数向串口发送数据后,可调用_sleep??函数使辅助线程休眠一段时间,以便使PLC有充分的时间返回数据;接着再调用CSerialPort类中的ReadPort()函数并从串口读数据,然后再调用_sleep()函数使辅助线程再休眠一定的时间。这样设计后,当进行串口通信时,主线程就能继续完成监控功能和处理其他事务。辅助线程函数的主要代码如下:
UINTSerialPro(void*param)
{
Ccrystal*mdlg=(Ccrystal*)param?
CStringstr;
intflag=1;
//如果初始化串口失败返回
if(!InitPort(“com2”))
{AfxMessageBox(“打开串口2失败”);
return0;
}
//循环读写串口,直到结束
while(flag)
{
//这里把要发送的数据传送给变量str
……
//向串口写数据
mdlg->serial.WritePort(hport,str);
//让辅助线程休眠100ms
_sleep(100);
//从串口读数据并赋给变量str
str=mdlg->serial.ReadPort(hport);
//这里把从串口得到的数据进行处理
……
5结束语
运用面向对象方法和多线程技术设计的通用串口通信类CSerialPort类,通过对WindowsAPI函数的封装使串口通信变得简单方便、容易维护。目前,该软件系统已成功地应用于金刚石合成控制系统,并成功解决了RS-232与RS-485两种串口通信的问题。经过几个月的运行表明,该串口通信软件工作稳定,出色地完成了系统的实时监控和显示任务。此外,由于采用了面向对象的方法和模块化设计,该软件的维护和升级十分方便;同时该系统具有很好的移植性,按照不同需求稍微改动一些代码就可以应用于其它控制系统中。
《金刚石合成控制系统中多串口通信技术的设计与实现(第3页)》