工业控制--串口通讯方法(精)
工业控制中上位机的串口通信设计与实现

【 y rssrac mmu iain, utt ra ig, Iu n to Ke wo d ] il o e nc to m l h e dn AP f cin i
前 言
本 文 中 使 用 的 W i o API 数 是 nd ws 函
B OOL S tp mm( eu Co HA F l. N DL E h i e
接 口 在 设 置 通 信 配 置 和 发 送 错 误 敏 感 、 无 时 间 限 制 的 数 据 时 尤 其 有 用 。 通 过 一 个 实 例 程 序 介 绍 串 口 通 信 程 序 的 编 制 方 法 。 这 个程 序用于调试 下位机 与上位机 的通讯 ,
可 以 根 据 不 同 的 下 位 机 设 置 和 不 同 的 通 信
DW ORD w0u Ou u //输 出 缓 冲 区 d t ee
的 大 小 ) ;
要写 的字节数 目
LP DW 0RD p I Numb Of e W rte / er Byts itn,
取 得 指 定 通 信 端 口的 当前 控 制 设 置 填 充 端 口 控 制 块
B00L Ge Co m S a e t m t t(
1 1 打开 和 配 置 串 口 .
/已 经 写 的 字 节 的数 目
LP 0VE RLAP E I Ov r a p d / P D p e lp e /指
向 一 个 0VERIAP D 结 构 , 异 步 读 取 时 PE 更 新 此 结 构 。; ) 它 的 返 回值 等 和 读 串 口 函数 相 同 。
协 议 对 下 位 机 进 行 实 时 检 测 , 把 采 集 的 数 据 显 示 出 来 ,送 出 测 试 信 号 。
一种面向工业控制的串口通信控制技术

・
1 ・ 4
梅 山科 技
20 0 6年 设备增 刊
一
种面向工业控制的串 口通信控制技术
董 刚 周 明 华 ( 山钢铁 公 司设备部 南 京 梅 2 03 ) 1 0 9
摘 要 : 绍 了 串口通 信 的接 口定义 、 线标 准 、 介 接 通信 协 议 和梅 钢 热 轧喷 印控 制 系统 使 用
运输 区喷 印 点时 , 喷印 机能够 及 时定位 , 钢卷 的 在
顶端 和侧 端 喷印 钢卷 号 。
1 梅钢 热轧 喷 印系统 组态及 原理
梅钢热轧喷印系统采用三层网络通信架构实
现 , teNe 网 络 层 、 G 网 络 层 和 G Nis网 E hr t E D e u 络层 。具 体组 态方 式见 图 1 。
采用 。在 串行 通 讯 时 , 求通 讯 双 方 都 采用 一 个 要 标 准接 口, 不 同 的设 备 可 以方 便 地 连接 起来 进 使 行通信。 梅 钢热 轧主轧 线 喷 印系统使 用 串 口及 串 口通 信 控制 程序 , GE 系统 的 喷 印 数 据 和 喷 印控 制 将 数 据传输 给 三菱 A&M L P C系统 , 旦 钢卷到 达 一
所 谓通信协 议是 指通信 双方 的一种 约定 。约
定包 括 对 数据 格 式 、 同步方式 、 送 速 度 、 传 传送 步 骤、 检纠 错 方式 以及 控 制字 符定 义 等 问题 做 出统
一
备 ) D E( 据 通 信 设 备 ) 间 的 一 个 接 口, 和 C 数 之 D TE包括计 算 机 、 端 、 口打 印机 等 设 备 。通 终 串
董 刚 周 明华 一种 面向工 业控制 的 串口通信控 制技 术
plc怎么和网口串口通讯

plc怎么和网口串口通讯PLC如何与网口和串口进行通讯导语:在现代工业自动化领域,PLC(可编程逻辑控制器)是非常常见的控制设备。
而与外部设备进行通讯是PLC的重要功能之一。
本文将介绍PLC如何与网口和串口实现通讯,并探讨其应用领域和优势。
一、PLC与网口通讯PLC与网口的通讯称为以太网通讯,采用网络协议进行数据交换,能够实现设备之间的高速传输。
PLC通过网口与上位机、其他设备等进行数据通讯,实现监控、数据采集、远程操作等功能。
1. 硬件连接PLC需通过网线连接到网络交换机或路由器,确保网络通畅。
一般来说,PLC具有内置的以太网接口,只需要将网线连接到PLC的以太网口即可开始通讯。
2. 配置参数PLC与网口通讯前需要进行一些参数配置。
首先,配置IP地址、子网掩码和网关。
IP地址是PLC在网络中的身份标识,子网掩码用于指定与PLC相连的设备是否属于同一网络,网关则指定网络中的出口。
其次,配置PLC的MAC地址,以保证能够正确寻址和传输数据。
最后,配置通讯协议和端口号,确定与上位机进行通讯时所需的规则和端口。
3. 通讯协议通讯协议是PLC与上位机之间进行数据交换的规则,常用的有Modbus TCP、Ethernet/IP、PROFINET等。
根据实际需求选择合适的通讯协议,并在PLC和上位机之间进行相应的配置和参数设置。
同时,在通讯过程中确定数据传输格式、数据长度、起始地址等,以确保数据的准确传输。
二、PLC与串口通讯与网口不同,串口通讯是PLC与其他设备进行点对点的数据交换,适用于距离较远、数据传输量较小的场景。
串口通讯有多种类型,常见的有RS-232和RS-485。
1. 硬件连接PLC与串口设备通过串口线连接,RS-232通常使用DB9接口,RS-485通常使用RJ45接口。
将PLC和串口设备的串口线正确连接后,可以开始进行串口通讯。
2. 配置参数串口通讯的参数配置包括波特率、数据位、停止位和校验位等。
串口通讯协议

串口通讯协议串口通讯协议是一种用于在计算机和外部设备之间进行数据传输的通信协议。
它是通过串行通信接口(串口)将数据以逐位的方式传输。
串口通讯协议通常用于连接计算机和各种外设,如打印机、调制解调器、传感器等。
1. 什么是串口通讯协议?串口通讯协议是一种规定了数据传输格式和通信规则的协议。
它定义了数据帧的结构、数据的编码和解码方式、数据的传输速率等。
串口通讯协议通常由硬件和软件两部分组成。
硬件部分包括串口接口的物理连接、电气特性以及数据线的连接方式。
串口通常包括发送线(TX)、接收线(RX)和地线(GND)。
这些线路通过串口线连接计算机和外设。
软件部分涉及到数据的传输和解析。
在串口通讯中,数据被分为连续的字节,并通过串行方式逐个传输。
发送方将字节一位一位地发送到接收方,接收方则按照事先约定好的规则解析和处理数据。
2. 常见的串口通讯协议2.1 RS-232RS-232是一种常见的串口通讯协议,它定义了串口的物理接口和电气特性。
RS-232通常使用DB9或DB25连接器,并且规定了数据线的连接方式、电平范围等。
2.2 UARTUART(Universal Asynchronous Receiver/Transmitter)是一种通用的异步收发器。
它是实现串口通讯的重要组件,负责将数据从并行格式转换为串行格式,并在发送和接收之间进行时序控制。
UART可以通过调整参数来适应不同的通信需求,如波特率、数据位、停止位和校验位等。
2.3 SPISPI(Serial Peripheral Interface)是一种同步串行通信协议,常用于连接微控制器和外部设备。
SPI使用4条线进行通信,包括时钟线、数据线、主从选择线和片选线。
SPI具有高速传输和多设备连接的优势。
2.4 I2CI2C(Inter-Integrated Circuit)是一种串行通信协议,用于连接集成电路芯片之间的通信。
I2C使用两条线进行通信,一条是时钟线(SCL),另一条是数据线(SDA)。
PLC与单片机之间的串行通信实现方法探讨

PLC与单片机之间的串行通信实现方法探讨随着工业自动化的不断发展,PLC(Programmable Logic Controller,可编程逻辑控制器)和单片机作为常用的控制设备,扮演着越来越重要的角色。
在实际的工业生产中,PLC和单片机往往需要进行数据的交互和通信,以实现对工艺过程的控制和监测。
而在这种通信中,串行通信被广泛应用。
本文将探讨PLC和单片机之间的串行通信实现方法,以期为实际应用提供一些参考。
一、串行通信概述串行通信是指在数据传输中,比特按照一定的顺序进行传送,也就是每次只传送一个比特位。
与之相对应的是并行通信,其数据在传输时多个比特同时传送。
在实际工业控制系统中,串行通信由于线缆布置简单、传输距离远和干扰小等特点而得到了广泛的应用。
串行通信包含同步和异步两种方式。
在同步串行通信中,发送和接收设备通过一个时钟信号实现同步传输。
而在异步串行通信中,传输的数据通过起始位和停止位的表示来进行同步。
在工业控制系统中,由于同步通信受到时钟信号的限制,一般采用异步串行通信的方式。
二、PLC与单片机之间的串行通信现在让我们来讨论PLC与单片机之间的串行通信。
PLC作为工业控制中的核心设备,通常负责控制和监测生产过程。
而单片机则常用于硬件控制和数据的采集。
在工业控制系统中,PLC和单片机之间需要进行数据的交互和通信,以实现工艺过程的控制和监测。
在实际的应用中,PLC与单片机之间的串行通信一般采用RS-232、RS-485、Modbus等通信协议。
RS-232是一种传统的串行通信标准,其传输距离较短,一般在15米左右。
RS-485则是一种适用于远距离传输的串行通信标准,其传输距离可以达到1200米。
而Modbus是一种通信协议,广泛应用于工业控制系统中,其采用主从架构,支持点对点和多点通信。
1、使用串口通信模块在实际应用中,我们可以在PLC和单片机上分别搭载串口通信模块,通过串口通信模块实现两者之间的数据交互。
串口通信协议的制定方法

帧尾也和附加信息进行区分。这样当收到串口数 dows环境下的串口通讯叨计算机工程,2001,27,
据时可以按照下面方法解析命令:首先查找帧头和 (6):176—179.
帧尾,确定命令在数据中的位置;然后判断命令的 长度(帧尾位置一帧头位置);最后判断命令是否 正确(命令编码+附加信息)。经过此次改进将很
信1息l科【学
科 技信总 ——黑龙江——
串口通信协议的制定方法
谢春生宋坦路石成
(河南辉煌科技股份有限公司,河南郑州450000)
摘要:在当前工业应用中,串口通信依靠其低廉、方便、易行、成熟的特点,得以广泛使用。本文从串口项目应用的特点对串口通信协议的制定 方法进行介绍。
关键词:串口;通信协议;制定方法
在信息技术和网络技术高速发展的21世纪,作为社会重要的基础信息设施之一的Internet的建立需要各类网络设备的支持,然而,传统的网络管理 系统只能通过网络对具有联网功能的设备进行监控、管理和维护,而当这些设备产生故障断开网络时,或当其他的无联网功能的串口设备出现故障时 ,就需要技术人员到现场去进行维护,从而浪费了大量的人力、物力。
串口通信——精选推荐

串⼝通信概念通信(Serial Communications)的概念⾮常简单,串⼝按位(bit)发送和接收。
与串⾏通信相对的是并⾏通信。
数据传输⼀般都是以字节传输的,⼀个字节8个位。
拿⼀个并⾏通信举例来说,也就是会有8根线,每⼀根线代表⼀个位。
⼀次传输就可以传⼀个字节,⽽串⼝通信,就是传数据只有⼀根线传输,⼀次只能传⼀个位,要传⼀个字节就需要传8次。
就像⼩虎队那⾸歌⼀样,把你的⼼,我的⼼,串⼀串,再烤⼀烤。
串⼝通信就是把数据串在⼀根线上传输,所以就叫串⼝吧。
通信⽅式⼀般情况下,设备之间的通信⽅式可以分成并⾏通信和串⾏通信两种。
它们的区别是:串⾏通信分类1、按照数据传送⽅向分为:单⼯:数据传输只⽀持数据在⼀个⽅向上传输;半双⼯:允许数据在两个⽅向上传输。
但是,在某⼀时刻,只允许数据在⼀个⽅向上传输,它实际上是⼀种切换⽅向的单⼯通信;它不需要独⽴的接收端和发送端,两者可以合并⼀起使⽤⼀个端⼝。
全双⼯:允许数据同时在两个⽅向上传输。
因此,全双⼯通信是两个单⼯通信⽅式的结合,需要独⽴的接收端和发送端。
2、按照通信⽅式分为:同步通信:带时钟同步信号传输。
⽐如:SPI,IIC通信接⼝。
异步通信:不带时钟同步信号。
⽐如:UART(通⽤异步收发器),单总线。
异步通信的两个关键:第⼀,数据单元——帧,它是双⽅约定好的数据格式;第⼆,波特率,它决定了‘帧’⾥每⼀位的时间长度。
异步通信的特点:不要求收发双⽅时钟的严格⼀致,实现容易,设备开销较⼩,但每个字符要附加2~3位⽤于起⽌位,各帧之间还有间隔,因此传输效率不⾼。
在同步通讯中,收发设备上⽅会使⽤⼀根信号线传输信号,在时钟信号的驱动下双⽅进⾏协调,同步数据。
例如,通讯中通常双⽅会统⼀规定在时钟信号的上升沿或者下降沿对数据线进⾏采样。
在异步通讯中不使⽤时钟信号进⾏数据同步,它们直接在数据信号中穿插⼀些⽤于同步的信号位,或者将主题数据进⾏打包,以数据帧的格式传输数据。
通讯中还需要双⽅规约好数据的传输速率(也就是波特率)等,以便更好地同步。
串口通讯方法的三种实现

串口基本信息用一台电脑实验串口自发自收,实验前要将串口(以9针为例)的发送引脚(2脚)和接受引脚(3脚)短接。
三线连接:适用于计算机之间尤其是PC机和单片机之间的数据通信。
其连接信号对为(TxD,RxD)、(RxD,TxD)、(SG,SG)。
即发送数据TxD端和接受数据RxD端交叉连接,信号地SG对应连接。
七线交叉连接:适用于同型号的计算机之间的连接,如PC机间的数据通信。
其连接信号对为:(TxD,RxD)、(RxD,TxD)、(SG,SG)、(RTS,CTS)、(CTS,RTS)、(DSR.DTR)、(DTR,DSR)。
其中,TxD、RxD、SG与前面信号的含义相同,RTS为请求发送,CTS为准许发送,DSR为数据装置准备好,DTR为数据终端准备好。
在本地连接的微机系统中,RTS、CTS、DTR、DSR用作硬件联络控制信号。
目前使用的串口连接线有DB9和DB25两种连接器,用户可以国家使用的具体机器选择相应的连接器。
一个串口通讯类在/network/serialport.shtml。
PC机的RS-232接口的电平标准是-12V标示“1”,和+12V表示“0”,有些单片机的信号电平时TTL 型,即大于2.4v表示“1”,小于0.5v表示“0”,因此采用RS-232总线进行异步通信是,发送端和接受端要有一个电平转换接口。
串口通讯方法的三种实现串口是计算机上一种非常通用的设备通信协议。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS一232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信(Serial Communication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
串口通信方便易行,应用广泛。
在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
工业控制--串口通讯方法(WINAPI实现)介绍介绍工业控制领域利用串口和外围设备进行通讯。
正文前言:总所周之,利用串口进行数据通讯在在通讯通讯领域重占有着重要的地位。
利用RS232-RS485进行数据信号的采集和传递是VC编程的又一大热点。
串口通讯在通讯软件重有着十分广泛的应用。
如电话、传真、视频和各种控制等。
在各种开发工具中间,VC由于功能强大和灵活,同时也得到了Microsoft的最大支持,所以在一般进行涉及硬件操作的通讯编程重,大都推荐使用VC作为开发工具。
然而工业控制串口通讯这个又不同于一般的串口通讯程序,因为控制外围设备传送的大都是十六进制数据(BYTE类型),所以,为了提高程序的运行稳定性,我们在编写程序进行通讯时可以不考虑传送BYTE类型数据的工作。
串口通讯目前流行的方法大概有两种:一是利用Microsoft提供的CMSCOMM控件进行通讯,不过现在很多程序员都觉应该放弃这种方式。
二是利用WINAPI函数进行编程,这种编程的难度最高,要求你要掌握很多的API函数。
三是利用现在网络上面提供的一些串口通讯控件进行编写,比如CSerial类等。
程序实现:我在经过许多的项目的开发和实践中发现,采用WIN API函数进行串口的开发能够给程序员很大的控件,并且程序运也很稳定。
所以我将与串口接触的函数进行封装,然后在各个工程中进行调用,效果还是比较好的,现将各个函数和调用方法列举出来,希望对各位有所帮助。
一、设置串口相关工作 #define MAXBLOCK 2048 #define XON 0x11 #define XOFF 0x13 BOOL SetCom(HANDLE &m_hCom, const char *m_sPort, int BaudRate, int Databit, CString parity, CString stopbit { COMMTIMEOUTS TimeOuts; ///串口输出时间超时设置 DCB dcb; ///与端口匹配的设备 m_hCom=CreateFile(m_sPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL |FILE_FLAG_OVERLAPPED, NULL; // 以重叠方式打开串口if(m_hCom==INVALID_HANDLE_VALUE { AfxMessageBox("设置串口部分,串口打开失败"; /////重叠方式异步通信(INVALID_HANDLE_VALUE)函数失败。
return FALSE; } SetupComm(m_hCom,MAXBLOCK,MAXBLOCK; //设置缓冲区memset(&TimeOuts,0,sizeof(TimeOuts; TimeOuts.ReadIntervalTimeout=MAXDWORD; // 把间隔超时设为最大,把总超时设为0将导致ReadFile立即返回并完成操作TimeOuts.ReadTotalTimeoutMultiplier=0; //读时间系数TimeOuts.ReadTotalTimeoutConstant=0; //读时间常量TimeOuts.WriteTotalTimeoutMultiplier=50; //总超时=时间系数*要求读/写的字符数+时间常量 TimeOuts.WriteTotalTimeoutConstant=2000; //设置写超时以指定WriteComm成员函数中的SetCommTimeouts(m_hCom, &TimeOuts; //GetOverlappedResult函数的等待时间*/ if(!GetCommState(m_hCom, &dcb ////串口打开方式、端口、波特率与端口匹配的设备 { AfxMessageBox("GetCommState Failed"; return FALSE; } dcb.fParity=TRUE; //允许奇偶校验 dcb.fBinary=TRUE; if(parity=="NONE" dcb.Parity=NOPARITY;if(parity=="ODD" dcb.Parity=ODDPARITY; if(parity=="EVEN"dcb.Parity=EVENPARITY; if(stopbit=="1"//设置波特率 dcb.StopBits=ONESTOPBIT; //if(stopbit=="0"//设置波特率 // dcb.StopBits=NONESTOPBIT; if(stopbit=="2"//设置波特率 dcb.StopBits=TWOSTOPBITS; BOOL m_bEcho=FALSE; /// intm_nFlowCtrl=0; BOOL m_bNewLine=FALSE; /// dcb.BaudRate=BaudRate; // 波特率dcb.ByteSize=Databit; // 每字节位数 // 硬件流控制设置dcb.fOutxCtsFlow=m_nFlowCtrl==1;dcb.fRtsControl=m_nFlowCtrl==1 ?RTS_CONTROL_HANDSHAKE:RTS_CONTROL _ENABLE; // XON/XOFF流控制设置(软件流控制!)dcb.fInX=dcb.fOutX=m_nFlowCtrl==2; dcb.XonChar=XON; dcb.XoffChar=XOFF; dcb.XonLim=50; dcb.XoffLim=50; if(SetCommState(m_hCom, &dcb return TRUE;////com的通讯口设置 else { AfxMessageBox("串口已打开,设置失败"; return FALSE; } } 二、读串口操作: int ReadCom(HANDLE hComm, BYTE inbuff[], DWORD &nBytesRead, int ReadTime { DWORD lrc; ///纵向冗余校验 DWORD endtime; /////////jiesuo static OVERLAPPED ol; int ReadNumber=0; int numCount=0 ; //控制读取的数目 DWORD dwErrorMask,nToRead; COMSTAT comstat; ol.Offset=0; ///相对文件开始的字节偏移量 ol.OffsetHigh=0; ///开始传送数据的字节偏移量的高位字,管道和通信时调用进程可忽略。
ol.hEvent=NULL; ///标识事件,数据传送完成时设为信号状态 ol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL;endtime=GetTickCount(+ReadTime;//GetTickCount(取回系统开始至此所用的时间(毫秒 for(int i=0;i<2000;i++ inbuff[i]=0; Sleep(ReadTime;ClearCommError(hComm,&dwErrorMask,&comstat;nToRead=min(2000,comstat.cbInQue; if(int(nToRead<2 goto Loop;if(!ReadFile(hComm,inbuff,nToRead,&nBytesRead,&ol{ if((lrc=GetLastError(==ERROR_IO_PENDING { ///////////////////endtime=GetTickCount(+ReadTime;//GetTickCount(取回系统开始至此所用的时间(毫秒 while(!GetOverlappedResult(hComm,&ol,&nBytesRead,FALSE//该函数取回重叠操作的结果 { if(GetTickCount(>endtime break;} } } return 1; Loop: return 0; } 三、写串口命令 int WriteCom(HANDLE hComm, BYTE Outbuff[], int size, int bWrite[] { DWORD nBytesWrite,endtime,lrc; static OVERLAPPED ol; DWORD dwErrorMask,dwError; COMSTAT comstat;ol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL; ol.Offset=0; ol.OffsetHigh=0; ol.hEvent=NULL; ///标识事件,数据传送完成时,将它设为信号状态ClearCommError(hComm,&dwErrorMask,&comstat;if(!WriteFile(hComm,Outbuff,size,&nBytesWrite,&ol{ if((lrc=GetLastError(==ERROR_IO_PENDING { endtime=GetTickCount(+1000; while(!GetOverlappedResult(hComm,&ol,&nBytesWrite,FALSE{ dwError=GetLastError(; if(GetTickCount(>endtime { AfxMessageBox("写串口时间过长,目前串口发送缓冲区中的数据数目为空"; break; }if(dwError=ERROR_IO_INCOMPLETE continue; //未完全读完时的正常返回结果else { // 发生错误,尝试恢复! ClearCommError(hComm,&dwError,&comstat; break; } } } } FlushFileBuffers(hComm; PurgeComm(hComm,PURGE_TXCLEAR; bWrite=0; return 1; } 四、调用方法很简单,只需要将你的串口参数进行简单的设置就可以了。