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

1.系统构成

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

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

2.通讯协议

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

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

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

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

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.上位计算机通信程序设计

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(&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;}}

计算机网络多线程通信,多线程技术的PLC与PC的通讯方式相关推荐

  1. mfc多线程编程实例_多线程技术的PLC与PC的通讯方式

    点击箭头处"工业之家",选择"关注公众号"! 基于多线程技术的PLC与PC的通讯方式 1.系统构成  推进系统中,PC机选用工控计算机.它是整个控制系统的核心, ...

  2. plc和pc串口通讯接线_PC与PLC的串口通信及编程实现

    35 PC 与 PLC 的串口通信及编程实现 黄植功 (广西师范大学物理与电子工程学院,广西  桂林  541004) 摘  要: 在自由口模式下,通信协议由用户自己的梯形图程序控制.用户可以使用梯形 ...

  3. PLC编程中网络通讯方式有几种?

    Plc网络由多个子网组成,每个子网的通信过程由通信协议决定,通信方式是通信协议的核心内容.通信模式包括访问控制模式和数据传输模式.所谓接入控制(也称接入控制)是指如何获得共享通信介质的使用权,而数据传 ...

  4. plc和pc串口通讯接线_Plc与pc串口调试手册

    Plc 与 pc 串口调试手册 硬件连接线 制作串口连接线, plc 管脚 23459 ,不可连接错误! ! pc 管脚 23875 , 串口模块 232 插在 1 号插槽,通信时 sw4 保持 of ...

  5. dcs与plc与c语言的联系,PLC 与DCS的通讯方式,举例讲解

    化工区乙烯装置采用的是Honeywell TDC3000 DCS系统,这牵扯到要与许多PLC的通讯问题.因为在生产中操作人员要通过DCS的操作界面来了解所有系统的运行状况,这其中首当其冲的就是PLC, ...

  6. plc和pc串口通讯接线_三菱FX系列PLC与电脑之间串口RS232通讯协议简易解析

    本文介绍的 PC 与三菱 FX 系列 PLC 通信,是通过 PLC 的编程口与 PC 机的串口进行的,采用 SC-09 编程电缆作为计算机与 PLC 通信的连线.电缆的 9 芯 D 形插头连接在计算机 ...

  7. s7300plc串口通信_实现S7-300 PLC与PC机的普通串口通信毕业论文

    摘  要 现代工业控制系统通常以PC机为上位机,通过与现场工控设备如PLC等的数据交换与处理,实现对工业生产的过程控制.这就促进了上位机与现场工控设备通信手段的不断发展和完善. 西门子S7-300 P ...

  8. plc和pc串口通讯接线_让你搞懂PLC串口通讯和通讯接口,这东西估计没几个能说清楚~...

    电力作业人员在使用PLC的时候会接触到很多的通讯协议以及通讯接口,最基本的PLC串口通讯和基本的通讯接口你都了解吗? 1,什么是串口通讯? 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线 ...

  9. 打印机通讯 tspl指令_西门子PLC四种核心通讯方式汇总学习

    西门子作为最早进入中国市场的工控厂家,其市场占有率一直非常高. 西门子PLC的品质非常好,其网络稳定性.开放性深受工控人员的喜爱,而且编程软件分类多,使用方便.在国内工控界具有显著地位.虽然大家对西门 ...

最新文章

  1. [转]iOS 远程推送(APNs)
  2. 【c语言】蓝桥杯算法提高 时间转换
  3. 用《R数据科学》学习一套数据处理语法
  4. Visual Studio 2010 Ultimate 正式版已经可以下载,大家快开始下载啊
  5. 如何看待水氢发动机事件
  6. 云软件——艺术字符设计!【推荐】
  7. 多线程爬虫工作流程图 to 子年
  8. AndroidStudio中添加第三库文件的方法
  9. unix network programming volume 2 interprocess communications second edition环境搭建出错的处理...
  10. [WPF自定义控件库] 自定义控件的代码如何与ControlTemplate交互
  11. clock()、time()、clock_gettime()和gettimeofday()函数的用法和区别
  12. 祝刘冬冬十八周岁快乐
  13. 借助Intent实现Android工程中Activity之间Java对象的传递——实现Serializable接口
  14. 微信驾校服务平台功能开发
  15. MySQL8.0安装踩坑记录
  16. 网站漏洞安全渗透测试公司组建方案
  17. ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph (有上下界可行流)
  18. return next(val for val in obj if safe_isfinite(val)) StopIteravtion报错解决方法
  19. C++ 二义性是什么?怎么解决?
  20. smzdm 扫地机器人_Dyson 360 EYE扫地机器人评测:这次的黑科技是否值得拥有?

热门文章

  1. 【数学建模】线性代数知识汇总,参加建模大赛的小伙伴看过来,它会是你的最优选
  2. tableau应用实战案例(二)-TABLEAU调用中国地图和Python获取地址的经纬度
  3. HMM模型和Viterbi算法
  4. 实例讲解hadoop中的map/reduce查询(python语言实现)
  5. MATLAB中rand,randi,randn函数,及rand('state',0)和rand('seed',0)产生随机种子详解
  6. 使用flink Table Sql api来构建批量和流式应用(3)Flink Sql 使用
  7. RxJava在闲鱼系统吞吐量提升上的实践
  8. python的des和3des加解密
  9. linux下logrotate配置和理解---转
  10. 手机中的AR是怎么实现的