福州西门子(授权)一级代理商
- 供应商
- 浔之漫智控技术(上海)有限公司西门子一级代理商
- 认证
- 报价
- ¥86.00元每台
- 西门子模块
- 西门子plc模块
- 西门子变频器
- 西门子一级代理商
- 西门子触摸屏
- 西门子触摸屏
- 联系电话
- 15618722057
- 手机号
- 15618722057
- 联系人
- 占亦
- 所在地
- 上海市松江区石湖荡镇塔汇路755弄29号1幢一层A区213室
- 更新时间
- 2024-05-15 07:00
本采用mfc编程,mfc是把串口作为文件设备来处理的,它用createfile()打开串口,并一个串口句柄,用setcommstate()进行端口配置,包括缓冲区设置,超时设置和数据格式等。然后调用函数readfile()和writefile()进行数据的读写,用waitforsinglebbbbbb()通信事件。在用readfile()和writefile()读写串口时,一般采用重叠。因为同步i/o是当程序执行完毕才返回,这样会阻塞其他线程,程序执行效率。而重叠能使调用的函数立即返回,i/o操作在后台进行,这样线程就可以处理其他事务,同时也实现了线程在同一串口句柄上实现读写操作。
使用重叠i/o时,线程要创建overlapped结构供读写函数使用,该结构重要的成员是hevent事件句柄。它将作为线程的同步对象使用,读写函数完成时hevent处于有状态,表示可进行读写操作;读写函数未完成时,hevent被置为无。
利用bbbbbbs的多线程技术,在辅助线程中串口,有数据到达时依靠事件驱动,读入数据并向主线程报告;并且,依靠重叠读写操作,让串口读写操作在后台运行。
4.计算机通信程序设计
以读取plc输出线圈y0为首的2个字节的数据为例,编写一个通信程序。查plc软元件地址表可知,输出线圈y0的首地址为00a0h,2个字节的数据即为y0-y7和y10-y17,根据返回的数据,就可以知道plc此时的状态,以实现对plc的监控。在每一次读操作之前,先要进行握手联络。对plc发请求讯号enq,然后读plc的响应讯号。如果读到的响应讯号为ack,则表示plc已就绪,等待接收通讯数据
基于多线程技术的plc与pc的通讯
0.引言
在现代工业控制中,plc以其高可靠性、适应工业现场、强大的联网功能等特点,被广泛应用。可实现顺序控制、pid回路调节、高速数据采集分析、计算机,是实现机电一体化的重要手段和发展方向。但plc无法单独构成完整的控制,无法进行复杂的运算和显示各种实时控制图表和曲线,无良好的用户界面,不便于监控。将个人计算机(pc)与plc结合起来使用,可以使二者优势互补,充分利用个人计算机强大的人机接口功能、丰富的应用和低廉的价格优势,组成高性能价格比的控制。
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++串口通信程序中的实现
在bbbbbbs的一个内,包含一个或多个线程,每个线程共享所有的资源,包括打开的文件、标识及动态分配的内存等等。
一个内的所有线程使用同一个32位地址空间,而这些线程的执行由调度程序控制,调度程序决定哪个线程可执行和什么时候执行线程。线程有优先级别,优先权较低的线程必须等到优先权较高的线程执行完任务后再执行。在多处理器的机器上,调度程序可以把多个线程放到不同的处理器上运行,这样可以使处理器的任务平衡,也的运行效率。
bbbbbbs内部的抢先调度程序在活动的线程之间分配cpu时间,bbbbbbs区分两种不同类型的线程,一种是用户界面线程(userinterfacethread),它包含消息循环或消息泵,用于处理接收到的消息;另一种是工作线程(workthread)它没有消息循环,用于执行后台任务、串口事件的线程即为工作线程