基于多线程技术的PLC与PC的通讯方式
本系统采用MFC编程方法,MFC是把串口作为文件设备来处理的,它用CreateFile()打开串口,并获得一个串口句柄,用SetCommState()进行端口配置,包括缓冲区设置,超时设置和数据格式等。然后调用函数ReadFile()和WriteFile()进行数据的读写,用WaitForSingleObject()监视通信事件。在用ReadFile()和WriteFile()读写串口时,一般采用重叠方式。因为同步I/O方式是当程序执行完毕才返回,这样会阻塞其他线程,降低程序执行效率。而重叠方式能使调用的函数立即返回,I/O操作在后台进行,这样线程就可以处理其他事务,同时也实现了线程在同一串口句柄上实现读写操作。
使用重叠I/O方式时,线程要创建OVERLAPPED结构供读写函数使用,该结构最重要的成员是hEvent事件句柄。它将作为线程的同步对象使用,读写函数完成时hEvent处于有信号状态,表示可进行读写操作;读写函数未完成时,hEvent被置为无信号。
利用Windows的多线程技术,在辅助线程中监视串口,有数据到达时依靠事件驱动,读入数据并向主线程报告;并且,依靠重叠读写操作,让串口读写操作在后台运行。
4.上位计算机通信程序设计
以读取PLC输出线圈Y0为首的2个字节的数据为例,编写一个通信程序。查PLC软元件地址表可知,输出线圈Y0的首地址为00A0H,2个字节的数据即为Y0-Y7和Y10-Y17,根据返回的数据,就可以知道PLC此时的状态,以实现对PLC的监控。在每一次读操作之前,先要进行握手联络。对PLC发请求讯号ENQ,然后读PLC的响应讯号。如果读到的响应讯号为ACK,则表示PLC已准备就绪,等待接收通讯数据。
BOOLCPlcComDlg::ReadFromPLC(char*Read_char,char*Read_address,intRead_bytes)
{CSerialSerial;//用于串行通讯的类
if(Serial.Open(1))//初始化串行通讯口COM1
{Serial.SendData(&ENQ_request,1);//发送联络讯号
Sleep(20);//等待20ms秒
Serial.ReadData(&read_BUFFER,1);//读取PLC响应讯号
if(read_BUFFER==ACK){
……
Serial.SendData(&STX_start,1);//向PLC发送“开始”标志代码
Serial.SendData(&CMD0_read,1);//发送“读”命令代码
datasum_check+=CMD0_read;
for(i=0;i<4;i++){
Serial.SendData(&Read_address[i>,1);//发送起始元件地址的ASCⅡ代码
……
Serial.SendData(&ETX_end,1);//发送结束标志代码
Change_to_ASCII(senddatasum_CHECK,datasum_check);//将“和”转化成ASCⅡ代码
Sleep(40);//等待PLC的反应
……
Serial.ReadData(&Read_char[i>,1);//读Read_bytes个字节
if(*readdatasum_CHECK==*readdatasum_check)//“和”效验
{AfxMessageBox(“数据读取成功!”);
returnTRUE;}
else{AfxMessageBox(“校验错误!”);
returnFALSE;}}
}
5.结束语
本文作者创新点:笔者提出了一种基于多线程的PC机与PLC的通讯,该通讯程序采用VC比用VB具有更好的实时性;并采用MFC编程方法用重叠结构读写串口,使串口读写在后台进行。该通讯程序可靠、可移植性好。
本通讯程序作为该系统的一个重要组成部分,经现场调试证明,既简单又实用,具有很好的实用价值。同时,该系统具有直观的人机界面和方便的操作方式,具有广阔的应用前景。
参考文献:
[1>MitsubishiElectricCorporation.可编程控制器通讯手册[Z>.1998.
[2>王也仿可编程控制器应用技术[M>.北京:机械工业出版社,2004.
[3>KRUGLINSKIProgrammingVisualC++6.0技术内幕[M>(修订版).北京:希望电子出版社,1999.
[4>胡银彪用VC++6.0实时绘制发动机试车曲线微计算机信息2002年第18卷第十期69-70页.
电话:15906845558 QQ:41780253
网址:www.gkplc001.com
江东教学点:宁波江东百丈东路1130号海运港8楼(地铁一号线旁边)
海曙校区:海曙区学院路788号upark商业公园B4幢一楼
石浦大酒店旁边匠心教育
Copyright @ 2010-2020 宁波蓝天教育. All Right Reserve
备案号:浙ICP备16003439号-2