金刚石合成控制系统中多串口通信技术的设计与实现
iplier=0,
UINT ReadConstant=0,
UINT WriteMultiplier=10,
UINT WriteConstant=1000);
DCB GetDCB();? //获得DCB参数
//SetDCB()函数实现设置DCB参数
BOOL SetDCB(
UINT BaudRate=9600,
UINT Parity=0,
UNIT ByteSize=8,
UINT StopBits=1);
// GetTimeOuts()函数获得超时参数
COMMTIMEOUTS GetTimeOuts();
// SetTimeOuts()函数设置超时参数
BOOL SetTimeOuts(
UINT ReadMultiplier=0,
UINT ReadConstant=0,
UINT WriteMultiplier=10,
UINT WriteConstant=1000);
// WritePort()函数实现写串口操作
void WritePort(HANDLE port,CString);
CString ReadPort(HANDLE port); //读串口操作
BOOL ClosePort();? //关闭串口
};
下面对该类的重要函数作以说明:
(1)在构造函数CSerialPort()中已对该类的数据成员进行了初始化操作。
(2)初始化串口函数InitPort()函数用于完成串口的初始化工作,包括打开串口、设置DCB参数、设置通信的超时时间等。
打开串口使用CreateFile()函数,其中InitPort()函数中的第一个参数为要打开的串口,通常将该参数赋给CreateFile()函数中的第一个参数;设置DCB参数应调用该类中的SetDCB()函数,并将InitPort()函数中的第2至第5参数赋给SetDCB()函数;设置通信的超时时间应调用该类中的SetTimeOuts()函数,并将InitPort()函数中的第6至第9参数赋给SetTimeOuts()函数。另外,该串口是系统资源,应该根据不同要求对其安全属性进行设置。
(3)SetDCB()函数用于设置DCB参数,包括传输的波特率、是否进行奇偶校验、每字节长度以及停止位等。
(4)SetTimeOuts()函数用于设定访问的超时值,根据设置的值可以计算出总的超时间隔。前面两个参数用来设置读操作总的超时值,后面两个参数用来设置写操作总的超时值。
(5)WritePort()函数用来完成向串口写数据。由于该系统需要对多个串口进行通信,所以首先应把串口号作为参数传递给该函数;接着该函数把按参数传递过来的、要发送的数据进行编码(也就是加入校验,这样能减少误码率),然后再调用Windows API函数WriteFile()并把数据发送到串口。
(6)ReadPort()函数用来完成从串口读数据,由于有多个串口,所以应把串口作为参数传递进来,然后调用API函数ReadFile(),并把下位机发送到串口,数据读出来放到缓存里面,接着对数据进行处理以将其变换成字符串(CString)类型并返回。
(7)GetDCB()函数主要用于获得串口的当前配置,可通过调用API函数GetCommState()来实现,然后再进行相应的处理。
(8)GetTimeOuts()函数用于获得访问超时值。
(9)ClosePort()函数可用来关闭串口。因为在Windows系统中串口是系统资源,因而在不用时,应将其释放掉,以便于其它进程对该资源的使用。
4 基于串口通信的金刚石合成控制
金刚石合成控制系统采用主从式控制方式,上位机为微机、下位机为PLC。上位机的主要功能是对系统进行实时监控,下位机的主要功能是对系统进行实时控制。上位机采用Windows 98操作系统,其监控程序可用VC开发,上、下位机之间通过RS-232与RS-485串口进行通信,它们之间采用的通信波特率为9600bps,无奇偶校验,每字节8位,并有1位停止位。上、下位机之间传送的数据格式可自己定义。由于传输数据时可能会引起错误,所以加入了校验算法。该系统通过上位机向下位机发送数据,下位机收到后就把当前系统的状态参数返回给上位机。由于该系统中所控制的参数具有迟滞性,所以应采用定时发送数据的方法来采集现场状态信息。
上位机编程时,可用VC6.0
- 一种柴油发电机组远程监控平台的实现(09-05)
- 讲述如何实现单片机与触摸屏的通信(02-06)
- 以光速洞察世界(03-13)
- 【技术周刊】通信黑科技之——华为/运营商力挺的NB-IoT(08-28)
- 集崭新的超宽带(UWB)无线通信技术(02-11)
- 车载通信技术在智能交通系统中发挥的作用(07-02)