0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >技术信息 > 基于多线程技术的PLC与PC的通讯方式

基于多线程技术的PLC与PC的通讯方式

2018-05-29
类别:技术信息
eye 245
文章创建人 拍明


0.引言

在现代工业控制系统中,PLC以其高可靠性、适应工业过程现场、强大的联网功能等特点,被广泛应用。可实现顺序控制、PID回路调节、高速数据采集分析、计算机上位管理,是实现机电一体化的重要手段和发展方向。但PLC无法单独构成完整的控制系统,无法进行复杂的运算和显示各种实时控制图表和曲线,无良好的用户界面,不便于监控。将个人计算机(PC)与PLC结合起来使用,可以使二者优势互补,充分利用个人计算机强大的人机接口功能、丰富的应用软件和低廉的价格优势,组成高性能价格比的控制系统。

基于多线程技术的PLC与PC的通讯方式.png

1.系统构成

推进系统中,PC机选用工控计算机。它是整个控制系统的核心,是上位机。其主要利用良好的图形用户界面,显示从PLC接收的开关量和控制手柄的位置,进行一些较复杂的数据运算,并且向PLC发出控制指令。

PLC是该系统的下位机,负责现场高速数据采集(控制手柄的位置),实现逻辑、定时、计数、PID调节等功能,通过串行通讯口向PC机传送PLC工作状态及有关数据,同时从PC机接受指令,向蜂鸣器、指示灯、滑油泵、控制手柄的位置等发出命令,实现PC机对控制系统的管理,提高了PLC的控制能力和控制范围,使整个系统成为集散控制系统。

2.通讯协议

计算机与PLC之间的通信是建立在以RS232标准为基础的异步双向通信上的,FX系列PLC有其特定的通信格式,整个通信系统采用上位机主动的通信方式,PLC内部不需要编写专门的通信程序,只要把数据存放在相应的数据寄存器中即可,每个数据寄存器都有相应的物理通信地址,通信时计算机直接对物理通信地址进行操作。通信过程中,传输字符和命令字以ASCⅡ码为准,常用的字符及其ASCⅡ码对应关系。

计算机与PLC进行通讯时,计算机与PLC之间是以帧为单位进行信息交换的,其中控制字符ENQ、ACK、NAK,可以构成单字符帧发送和接受,其余的信息帧发送和接受时都是由字符STX、命令字、数据、字符ETX以及和校验5部分组成。

校验和在信息帧的尾部用来判断传输的正确与否,和校验码的计算方法是将命令码到ETX之间的所有字符的ASCⅡ码(十六进制数)相加,取所得和的最低2位数,在后面的通信程序设计里面还会提到。进行差错检验的方法很多,常用的有奇偶校验码,水平垂直冗余校验LRC,目前广泛使用的是CRC校验码,它能查处99%以上18位或更长的突出错误,而在计算机与PLC点对点的短距离通讯时,出错的几率较小,因而采用校验和法,基本能满足要求。

3.多线程技术及在VC++串口通信程序中的实现

在Windows的一个进程内,包含一个或多个线程,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等等。

一个进程内的所有线程使用同一个32位地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行和什么时候执行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完任务后再执行。在多处理器的机器上,调度程序可以把多个线程放到不同的处理器上运行,这样可以使处理器的任务平衡,也提高系统的运行效率。

Windows内部的抢先调度程序在活动的线程之间分配CPU时间,Windows区分两种不同类型的线程,一种是用户界面线程(UserInterfaceThread),它包含消息循环或消息泵,用于处理接收到的消息;另一种是工作线程(WorkThread)它没有消息循环,用于执行后台任务、监视串口事件的线程即为工作线程。

本系统采用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编程方法用重叠结构读写串口,使串口读写在后台进行。该通讯程序可靠、可移植性好。

本通讯程序作为该系统的一个重要组成部分,经现场调试证明,既简单又实用,具有很好的实用价值。同时,该系统具有直观的人机界面和方便的操作方式,具有广阔的应用前景。

【多线程技术】

采用超线程即是可在同一时间里,应用程序可以使用芯片的不同部分。虽然单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行操作。而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。

cpu说明

CPU生产商为了提高CPU的性能,通常做法是提高CPU的时钟频率和增加缓存容量。不过目前CPU的频率越来越快,如果再通过提升CPU频率和增加缓存的方法来提高性能,往往会受到制造工艺上的限制以及成本过高的制约。

性能

尽管提高CPU的时钟频率和增加缓存容量后的确可以改善性能,但这样的CPU性能提高在技术上存在较大的难度。实际上在应用中基于很多原因,CPU的执行单元都没有被充分使用。如果CPU不能正常读取数据(总线/内存的瓶颈),其执行单元利用率会明显下降。另外就是目前大多数执行线程缺乏ILP(Instruction-Level Parallelism,指令级并行)支持。这些都造成了目前CPU的性能没有得到全部的发挥。因此,Intel则采用另一个思路去提高CPU的性能,让CPU可以同时执行多重线程,就能够让CPU发挥更大效率,即所谓“超线程(Hyper-Threading,简称“HT”)”技术。超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率。

超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程,P4处理器需要多加入一个Logical CPU Pointer(逻辑处理单元)。因此新一代的P4 HT的die的面积比以往的P4增大了5%。而其余部分如ALU(整数运算单元)、FPU(浮点运算单元)、L2 Cache(二级缓存)则保持不变,这些部分是被分享的。

虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每各CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。

英特尔P4 超线程有两个运行模式,Single Task Mode(单任务模式)及Multi Task Mode(多任务模式),当程序不支持Multi-Processing(多处理器作业)时,系统会停止其中一个逻辑CPU的运行,把资源集中于单个逻辑CPU中,让单线程程序不会因其中一个逻辑CPU闲置而减低性能,但由于被停止运行的逻辑CPU还是会等待工作,占用一定的资源,因此Hyper-Threading CPU运行Single Task Mode程序模式时,有可能达不到不带超线程功能的CPU性能,但性能差距不会太大。也就是说,当运行单线程运用软件时,超线程技术甚至会降低系统性能,尤其在多线程操作系统运行单线程软件时容易出现此问题。

需要注意的是,含有超线程技术的CPU需要芯片组、软件支持,才能比较理想的发挥该项技术的优势。目前支持超线程技术的芯片组包括如:英特尔i845GE、PE及矽统iSR658 RDRAM、SiS645DX、SiS651可直接支持超线程;英特尔i845E、i850E通过升级BIOS后可支持;威盛P4X400、P4X400A可支持,但未获得正式授权。操作系统如:Microsoft Windows XP、Microsoft Windows 2003,Linux kernel 2.4.x以后的版本也支持超线程技术。


责任编辑:Davia

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯