基于RS232modbus协议的双机串行通信

目录一、Modbus 协议分析 (1)1.1两种传输方式 (2)1.2 Modbus消息帧 (3)1.3错误检测方法 (7)二、程序设计思想 (8)2.1总体设计 (8)2.2 硬件设计 (9)2.2.1单片机串行通信功能 (9)2.2.2 MAX232芯片 (11)2.2.3整体电路设计 (11)2.3 软件设计 (12)2.3.1主机系统软件设计 (12)2.3.2从机系统软件设计 (15)三、程序代码 (18)基于51单片机的双机串行通信设计一、Modbus 协议分析Modbus 协议是应用于电子控制器上的一种通用语言。

通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。

它已经成为一通用工业标准。

有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。

此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。

它描述了一控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。

它制定了消息域格局和内容的公共格式。

当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。

如果需要回应,控制器将生成反馈信息并用Modbus协议发出。

在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。

这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。

1) 在Modbus网络上转输标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。

控制器能直接或经由Modem组网。

控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。

其它设备(从设备)根据主设备查询提供的数据作出相应反应。

典型的主设备:主机和可编程仪表。

典型的从设备:可编程控制器。

主设备可单独和从设备通信,也能以广播方式和所有从设备通信。

如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。

Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。

从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。

如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。

2) 在其它类型网络上传输在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。

这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。

提供的多个内部通道可允许同时发生的传输进程。

在消息位,Modbus协议仍提供了主—从原则,尽管网络通信方法是“对等”。

如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。

同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。

3) 查询—回应周期(i)查询查询消息中的功能代码告之被选中的从设备要执行何种功能。

数据段包含了从设备要执行功能的任何附加信息。

例如功能代码03是要求从设备读保持寄存器并返回它们的内容。

数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。

错误检测域为从设备提供了一种验证消息内容是否正确的方法。

(ii)回应如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。

数据段包括了从设备收集的数据:象寄存器值或状态。

如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。

错误检测域允许主设备确认消息内容是否可用。

1.1两种传输方式控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。

用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus 网络上的所有设备都必须选择相同的传输模式和串口参数。

ASCII模式RTU模式所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。

在其它网络上(像MAP和Modbus Plus)Modbus 消息被转成与串行传输无关的帧。

1)ASCII模式当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。

这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。

代码系统十六进制,ASCII字符0...9,A...F,消息中的每个ASCII字符都是一个十六进制字符组成每个字节的位。

•1个起始位•7个数据位,最小的有效位先发送•1个奇偶校验位,无校验则无•1个停止位(有校验时),2个Bit(无校验时)错误检测域•LRC(纵向冗长检测)2)RTU模式当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。

这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。

代码系统•8位二进制,十六进制数0...9,A...F•消息中的每个8位域都是一个两个十六进制字符组成每个字节的位•1个起始位•8个数据位,最小的有效位先发送•1个奇偶校验位,无校验则无•1个停止位(有校验时),2个Bit(无校验时)错误检测域•CRC(循环冗长检测)1.2 Modbus消息帧两种传输模式中(ASCII或RTU),传输设备以将Modbus 消息帧为有起点和终点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给所有设备),判知何时信息已完成。

部分的消息也能侦测到并且错误能设置为返回结果。

1) ASCII帧使用ASCII模式,消息以冒号(:)字符(ASCII码3AH)开始,以回车换行符结束(ASCII码0DH,0AH)。

其它域可以使用的传输字符是十六进制的0...9,A...F。

网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断是否发给自己的。

消息中字符间发送的时间间隔最长不能超过1秒,否则接收的设备将认为传输错误。

一个典型消息帧如下所示:ASCII消息帧2) RTU帧使用RTU模式,消息发送至少要以3.5个字符时间的停顿间隔开始。

在网络波特率下多样的字符时间,这是最容易实现的(如下图的T1-T2-T3-T4所示)。

传输的第一个域是设备地址。

可以使用的传输字符是十六进制的0...9,A...F。

网络设备不断侦测网络总线,包括停顿间隔时间内。

当第一个域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。

在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。

一个新的消息可在此停顿后开始。

整个消息帧必须作为一连续的流转输。

如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。

同样地,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。

这将导致一个错误,因为在最后的CRC域的值不可能是正确的。

一典型的消息帧如下所示:RTU消息帧3) 地址域消息帧的地址域包含两个字符(ASCII)或8Bit(RTU)。

可能的从设备地址是0...247 (十进制)。

单个设备的地址范围是1...247。

主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。

当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。

地址0是用作广播地址,以使所有的从设备都能认识。

当Modbus协议用于更高水准的网络,广播可能不允许或以其它方式代替。

4) 如何处理功能域消息帧中的功能代码域包含了两个字符(ASCII)或8Bits (RTU)。

可能的代码范围是十进制的1...255。

当然,有些代码是适用于所有控制器,有些是应用于某种控制器,还有些保留以备后用。

当消息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为。

例如去读取输入的开关状态,读一组寄存器的数据内容,读从设备的诊断状态,允许调入、记录、校验在从设备中的程序等。

当从设备回应时,它使用功能代码域来指示是正常回应(无误)还是有某种错误发生(称作异议回应)。

对正常回应,从设备仅回应相应的功能代码。

对异议回应,从设备返回一等同于正常代码的代码,但最重要的位置为逻辑1。

主设备应用程序得到异议的回应后,典型的处理过程是重发消息,或者诊断发给从设备的消息并报告给操作员。

5) 数据域数据域是由两个十六进制数集合构成的,范围00...FF。

根据网络传输模式,这可以是由一对ASCII字符组成或由一RTU字符组成。

从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代码所定义的所为。

这包括了象不连续的寄存器地址,要处理项的数目,域中实际数据字节数。

6) 错误检测域标准的Modbus网络有两种错误检测方法。

错误检测域的内容视所选的检测方法而定。

ASCII当选用ASCII模式作字符帧,错误检测域包含两个ASCII字符。

这是使用LRC(纵向冗长检测)方法对消息内容计算得出的,不包括开始的冒号符及回车换行符。

LRC字符附加在回车换行符前面。

RTU当选用RTU模式作字符帧,错误检测域包含一16Bits值(用两个8位的字符来实现)。

错误检测域的内容是通过对消息内容进行循环冗长检测方法得出的。

CRC域附加在消息的最后,添加时先是低字节然后是高字节。

故CRC的高位字节是发送消息的最后一个字节。

7) 字符的连续传输当消息在标准的Modbus系列网络传输时,每个字符或字节以如下方式发送(从左到右):最低有效位...最高有效位使用ASCII字符帧时,位的序列是:有奇偶校验无奇偶校验位顺序(ASCII)使用RTU字符帧时,位的序列是:有奇偶校验无奇偶校验位顺序(RTU)1.3错误检测方法标准的Modbus串行网络采用两种错误检测方法。

奇偶校验对每个字符都可用,帧检测(LRC或CRC)应用于整个消息。

它们都是在消息发送前由主设备产生的,从设备在接收过程中检测每个字符和整个消息帧。

用户要给主设备配置一预先定义的超时时间间隔,这个时间间隔要足够长,以使任何从设备都能作为正常反应。

如果从设备测到一传输错误,消息将不会接收,也不会向主设备作出回应。

这样超时事件将触发主设备来处理错误。

发往不存在的从设备的地址也会产生超时。

1)奇偶校验用户可以配置控制器是奇或偶校验,或无校验。

这将决定了每个字符中的奇偶校验位是如何设置的。

合集下载

基于modbus通信协议的rs232通信

基于modbus通信协议的rs232通信
数据域,Modbus消息帧中的数据域主要是包含了请求和响应参数。主站发给从站消息的数据域包含信息为:从站必须用于执行由功能代码所定义的动作。这包括了读取线圈、离散量输入的起始地址、读取的数量等。如果没有错误发生,从站返回的响应数据域内包含请求的数据,如果有错误发生,则响应数据域内为异常码,告诉主站异常的原因。
};
#endif __SERIALPORT_H__
2.串口的一些成员函数实现(CSerialPort.cpp)
2.1串口线程函数
UINT CSerialPort::CommThread(LPVOID pParam)
{
CSerialPort *port = (CSerialPort*)pParam;
port->m_bThreadAlive = TRUE;
class CSerialPort
{
public:
// contruction and destruction
CSerialPort();
virtual~CSerialPort();
// port initialisation
BOOLInitPort(CWnd* pPortOwner, UINT portnr = 1, UINT baud = 19200, char parity = 'N', UINT databits = 8, UINT stopsbits = 1, DWORD dwCommEvents = EV_RXCHAR | EV_CTS, UINT nBufferSize = 512);
if (port->m_hComm)// check if the port is opened
PurgeComm(port->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);

双机串行通信的设计与实现

双机串行通信的设计与实现

双机串行通信的设计与实现设计流程如下:1.确定通信协议:在设计双机串行通信时,首先要确定通信协议,包括数据格式、数据传输速率、错误检测和纠错等方面。

常见的协议有RS-232、RS-485、USB等。

2.硬件设计:双机串行通信需要使用串行通信接口进行数据传输。

设计中需要考虑硬件的选型,如选择合适的串行通信芯片、电平转换电路、线缆等。

根据通信协议的要求,确定串行通信接口的电平、波特率等参数。

3. 软件设计:在设计双机串行通信的软件时,需要实现数据的发送和接收功能。

常见的操作系统如Windows、Linux等提供了串口通信的API函数,可以方便地实现通信功能。

软件设计包括以下几个方面:a)串口初始化:设置串口的波特率、数据位数、停止位数、校验位等参数。

b)数据发送:将需要发送的数据经过封装后发送给串口。

c)数据接收:通过串口接收数据,并解析数据格式。

d)错误检测与纠错:对接收到的数据进行错误检测,如使用奇偶校验、CRC等方式进行数据完整性检验,针对错误数据进行纠正或丢弃。

e)数据处理:根据具体应用场景对接收到的数据进行处理,如进行数据解析、存储、显示等。

4.通信测试与调试:设计完成后,需要进行通信测试与调试,确保双机串行通信的正确性和稳定性。

通过发送和接收数据进行测试,检查通信协议的实现是否正确,数据的传输是否准确。

实现双机串行通信的关键在于硬件设计与软件设计的合理结合。

合理选择适合的硬件设备,同时根据通信协议的要求进行软件开发,能够保证通信的可靠性和稳定性。

总而言之,双机串行通信的设计与实现需要确定通信协议、硬件设计与软件开发,通过测试和调试保证通信的正确性与稳定性。

它是计算机通信的重要组成部分,应用广泛。

RS232串口通讯详解

RS232串口通讯详解

串口通讯—RS-232-C详解蓝鸟发表于 2005-9-22 16:19:34串行通信接口标准经过使用和发展,目前已经有几种。

但都是在RS-232标准的基础上经过改进而形成的。

所以,以RS-232C为主来讨论。

RS-323C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。

它适合于数据传输速率在0~20000b/s范围内的通信。

这个标准对串行通信接口的有关问题,如信号线功能、电器特性都作了明确规定。

由于通行设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信接口中广泛采用。

在讨论RS-232C接口标准的内容之前,先说明两点:首先,RS-232-C标准最初是远程通信连接数据终端设备DTE(Data Terminal Equipment)与数据通信设备DCE(Data Communication Equipment)而制定的。

因此这个标准的制定,并未考虑计算机系统的应用要求。

但目前它又广泛地被借来用于计算机(更准确的说,是计算机接口)与终端或外设之间的近端连接标准。

显然,这个标准的有些规定及和计算机系统是不一致的,甚至是相矛盾的。

有了对这种背景的了解,我们对RS-232C标准与计算机不兼容的地方就不难理解了。

其次,RS-232C标准中所提到的“发送”和“接收”,都是站在DTE立场上,而不是站在DCE的立场来定义的。

由于在计算机系统中,往往是CPU和I/O设备之间传送信息,两者都是DTE,因此双方都能发送和接收。

一、RS-232-CRS-232C标准(协议)的全称是EIA-RS-232C标准,其中EIA(Electronic Industry Association)代表美国电子工业协会,RS(ecommeded standard)代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969),在这之前,有RS232B、RS232A。

双机间的串口双向通信设计

双机间的串口双向通信设计

双机间的串口双向通信设计双机间的串口双向通信设计是一种常见的数据传输方式,常用于微控制器与外设之间的通信。

在这种设计中,一台计算机或控制器作为主机发送数据,另一台计算机或设备作为从机接收数据。

下面将详细介绍双机间串口通信的设计流程和步骤。

1.串口选择首先,需要确定双机间通信所采用的串口类型,常见的串口包括RS232、RS485、USB等。

根据实际情况选择合适的串口类型。

2.硬件连接在确定好串口类型后,将两台计算机或控制器的串口通过串口线连接起来。

一般来说,主机的发送线(TX)连接到从机的接收线(RX),主机的接收线(RX)连接到从机的发送线(TX)。

确保连接稳固可靠。

3.通信协议通信协议是双机间串口通信的重要组成部分,它规定了数据的格式、传输方式和传输顺序等信息。

常见的通信协议有ASCII码、Modbus、CAN 等。

根据通信需求选择合适的通信协议,并确保双方的通信协议一致。

4.数据打包与解包在数据传输之前,需要将要发送的数据打包成一定的格式。

例如,可以使用数据头、命令、校验码等字段将数据组织起来。

接收方在接收到数据之后,需要将数据进行解包,还原出原始数据。

5.数据传输流程数据传输的流程一般包括发送方发送数据和接收方接收数据两个步骤。

发送方在发送数据之前,需要先打包数据,然后通过串口发送数据包。

接收方在接收到数据后,需要先解包数据,然后进行相应的处理。

6.错误检测与纠错在进行双机间串口通信时,为了保证数据的可靠传输,可以采用一些错误检测和纠错的方法。

例如,可以使用CRC校验或奇偶校验等方式进行数据的完整性检测。

如果发现数据错误,可以采取相应的纠错措施。

7.控制流程在双机间串口通信中,还可以通过控制流程来控制通信的开始和结束。

例如,可以通过发送方发送控制字节来告知接收方数据的开始和结束。

接收方在接收到控制字节后,根据控制字节进行相应的处理。

8.实时性要求在一些实时性较高的应用中,需要考虑数据传输的实时性。

双机之间的串行通信设计

双机之间的串行通信设计

双机之间的串行通信设计随着计算机技术的快速发展,双机之间的串行通信变得越来越重要。

无论是在数据传输、系统控制还是协同处理方面,双机之间的串行通信都扮演着关键角色。

本文将探讨双机之间的串行通信设计,包括串行通信的原理、串行通信的应用、串行通信的优势以及设计双机之间串行通信的步骤。

一、串行通信的原理串行通信是一种逐位传输数据的通信方式。

在双机之间的串行通信中,一台机器将数据一位一位地发送给另一台机器,接收方接收到数据后将其重新组装为完整的信息。

串行通信常用的协议有RS-232、RS-485、SPI等。

二、串行通信的应用1.数据传输:双机之间通过串行通信传输大量数据,例如在两台计算机之间传输文件、传输实时音视频数据等。

2.系统控制:双机之间通过串行通信进行系统控制,例如一个机器向另一个机器发送指令,控制其执行特定的任务。

3.协同处理:双机之间通过串行通信进行协同处理,例如在分布式系统中,各个节点之间通过串行通信共同完成复杂的任务。

三、串行通信的优势相比于并行通信,双机之间的串行通信具有以下几个优势:1.传输距离更远:串行通信可以在较长的距离上进行数据传输,而并行通信受到信号干扰和传输线损耗的限制。

2.更少的传输线:串行通信只需要一条传输线,而并行通信需要多条传输线。

3.更快的速度:串行通信在同等条件下具有更快的传输速度,因为每一位数据传输所需的时间更短。

4.更可靠的传输:串行通信可以通过校验位等方式来保证数据传输的可靠性。

四、设计双机之间串行通信的步骤设计双机之间的串行通信需要经过以下几个步骤:1.确定通信协议:首先需要确定双机之间的通信协议,例如RS-232、RS-485等。

不同的通信协议有着不同的特点和适用范围,需要根据具体的应用需求进行选择。

2.确定物理连接方式:根据通信协议的选择,确定双机之间的物理连接方式,例如使用串口线连接、使用网络连接等。

3.确定数据传输格式:确定数据传输的格式,包括数据的编码方式、数据的起始位和停止位等。

基于RS232的双机通信实验程序和电路图.doc

基于RS232的双机通信实验程序和电路图.doc
图1 单片机之间通信的原理图
五、实验过程
单片机1的程序:
#include<reg52.h>
#define uchar unsigned char//宏定义
#define unit unsigned int//宏定义
sbit anjian=P1^0;//定义按键的位
ucharnum;
uchar codetable[]={0xff,0xc0,0xf9,0xa4,0xb0,0x9
SBUF=table[num]; //发送值
}
TI=0;//清除发送中断标志位
}
}
单片机2的程序:
#include<reg52.h>
#define uchar unsigned char//宏定义
#define unit unsigned int //宏定义
unsigned char rec_c;
void main()
{
TMOD=0x20; //定时器1工作方式2
TH1=0xFD; //11.0592Mhz 9600bps
TL1=0xFD;
TR1=1;//启动定时器1
SCON=0x5; //模式1:8位数据可变波特率,允许接收
EA=1; //打开总中断
ES=1;//打开串口1中断
}
//中断接收函数
voidrec() interrupt 4
1、 使用串口实现单片机1与单片机2的数据通信 ,实现互相控制。要求按下单片机1系统板上的按键 ,单片机2系统板上LED点亮。
三、实验环境
1、编程软件keil
2、仿真软件proteus
四、实验原理
MAX232芯片用于电平转换 ,实现RS232电平与TTL电平(单片机)的互相转换。本次实验单片机之间通信不使用握手信号 ,只需3根信号线:TXD(发送线) ,RXD(接收线) ,GND(地线)。单片机之间通信的原理图如图1所示 ,当单片机1(主机)查询外接控制开关S3按下时 ,单片机1发送一个自定义信号给单片机2(从机) ,单片机2收到信号后点亮指示灯LED4。

串口通信RS232与RS458简介

串口通信RS232和RS485简介PLC与控制设备之间的通信基本上都是基于串行通信接口,采用其对应的通信协议进行控制的,而对于串行通信接口,常用的包括RS232、RS422、RS485。

一、RS232串行通信接口RS-232接口符合美国电子工业联盟(EIA)制定的串行数据通信的接口标准,被广泛用于计算机串行接口外设连接,有些老式PC机上就配置有RS232接口。

RS232的工作方式是单端工作方式,这是一种不平衡的传输方式,收发端信号的逻辑电平都是相对于信号地而言的,RS232最初是DET(数字终端设备)和DCE(数据通信设备)一对一通信,也就是点对点,一般是用于全双工传送,当然也可以用于半双工传送。

此外,RS232是负逻辑,逻辑电平是±5~±15V,传输距离短,只有15米,实际应用可以达到50米,但是再长的距离就须加调制了。

最初RS232标准物理接口是25个引脚的,因为常用的是9个引脚,后来就基本采用DB9连接器了,RS232的DB9连接器的引脚定义见下图:在DB9的9个引脚中,并不是所有的信号端都使用的,比如说RTS/CTS只有在半双工方式中作发送和接收时的切换用,而在全双工方式中,因配置双向通道所以不需要。

一般来说,在全双工方式中RS232标准接线只要三条线就足够了,两根数据信号线TXD/RXD,一根信号地线GND。

双方连接的方式是将TXD和RXD交叉连接,信号地直接相接,然后将各自的RTS/CTS,DSR/DTR短接,将DCD和RI悬空就可以。

二、RS485串行通信接口1、概况为改进RS232通信距离短、速率低的缺点,1983年,RS-485通讯接口被电子工业协会(Electronics Industries Association EIA)批准为一种通讯接口标准。

使用RS-485作为物理层的常用标准协议主要有工业HART总线、modbus协议、Profibus DP等等。

使用modbus协议实现串口数据通信

使用modbus协议实现串口数据通信Saptarshi Naskar,Krishnendu Basuli和Samar sen Sarma计算机科学和工程部门,University of Calcutta, 92, A. P. C. Road,Kolkata - 700 009, India串行通信是在通信信道或计算机总线连续地发送数据,每一位数据占据一个固定的时间长度[5、6、7]。

RS-232是在数据终端设备(DTE)和数据通讯设备(DCE)之间进行串行二进制传输的一个标准,通常用于计算机串口。

原RS-232标准只定义了DTEs与DCEs的连接关系,例如,调制解调器。

零调制解调器是一种直接使用RS-232串行电缆连接两个DTEs沟通方法(电脑,终端、打印机等)。

这个零调制解调器配置简化了计算机之间握手协议。

在零调制解调器模式下,由发送端、接收端,地线组成的最小三线RS-232接口通常用于RS-232设备不是全都必需的下[5、6、7]。

另一种常见的连接是一种DTE-DTE连接,例如连接两个人电脑,以便他们之间交换数据。

对于这样的连接,所谓的零调制解调器连接是必要的,其实这个连接也被在这个项目中用到。

第三类是DCE-DCE连接。

这里所谓的尾电路电缆是必要的,但这是一种非常罕见的连接。

其他的RS-232规范[5、6、7]:(a)、信号电压:发送端-5V到-15V(逻辑1),+ 5V到+ 15V(逻辑0),接收端-3V -15V(逻辑1),+ 3V到+ 15伏特(逻辑0)。

在PC机上通常为+ / - 12伏。

(b)、最大的电缆长度:50英尺(19200 bps),3000英尺(2400bps),在大多数无干扰的情况下,可以更长。

(c)、连接器:最常见的RS-232连接器是DB-9和DB-25。

每个连接器都有一个公头和一个母头。

在大多数情况下公头接DTE,母头接DCE(尽管在其它情况下也可能不同)。

(d)、各管脚信号见下表:DCD,DTR,DSR,RTS和CTS就是所谓的握手线,用于设备之间互相交换状态信息。

双机联动串口通信原理

双机联动串口通信原理双机联动串口通信是指两台计算机通过串口进行数据传输,其中一台计算机作为发送方,另一台计算机作为接收方。

串口通信使用的是异步串行通信协议,即在数据传输时不需要同步时钟信号,而是通过起始位、数据位、校验位和停止位等控制信号来识别和传输数据。

在双机联动串口通信中,发送方会将数据按照一定的格式打包成数据帧,并通过串口发送给接收方。

接收方会解析接收到的数据帧,并进行数据处理和应答。

串口通信使用的是RS232、RS422或RS485等标准协议,其中RS232是最常用的一种。

RS232协议规定了串口通信信号的电气参数和接口标准,包括标准的串口连接方式、数据传输速率、数据帧格式等。

在双机联动串口通信中,不同的计算机系统要求的串口设置可能会不同,例如波特率、数据位、校验位、停止位等。

为了保证串口通信的正确性,发送方和接收方需要进行串口设置的协商,确保两台计算机系统的串口设置一致。

双机联动串口通信还涉及到数据帧的分组、传输和处理等过程。

数据帧通常包括起始位、目的地址、源地址、数据、校验和和结束位等字段。

在传输数据帧时,发送方会首先发送起始位和目的地址,接收方在接收到起始位后开始等待数据,当目的地址与该计算机的地址一致时,才开始接收数据帧。

在接收数据帧后,接收方会进行数据处理和校验,并发送应答信号。

在实际应用中,双机联动串口通信主要用于工业控制、数据采集、通讯设备等领域。

由于串口通信具有简单、稳定、可靠、廉价等优点,因此在工业自动化控制系统中得到广泛应用。

同时,随着通信技术的发展,越来越多的设备开始采用以太网、无线网络等高速数据传输方式,使串口通信在某些领域面临着逐步替代的趋势。

基于RS232_485协议的多机通信系统的设计

收稿日期:2008-08-27基金项目:南昌工程学院青年基金项目(2006K J017)作者简介:刘萍先(1974-),男,硕士,讲师.文章编号:1674-0076(2008)06-0016-04基于RS232/485协议的多机通信系统的设计刘萍先1,曹清华1,赵筱媛2(1.南昌工程学院机械与动力工程系,江西南昌330099;2.江西财经大学职业技术学院,江西南昌330013)摘 要:基于RS232/RS485协议,利用MCS51系列单片机和VB6.0及WinAPI 函数,完成一对多的数据通信系统设计,同时对多机通讯编程问题进行了讨论,指出了使用WinAPI 函数解决MSC OM M 通信控件无法实现的多机通讯问题的关键点,并提供了一个实现了该方案的电镀槽数据采集与控制系统的实例.关键词:RS485;VB6.0;多机通讯;串口通讯;MSC omm中图分类号:T N91 文献标识码:ADesign of multi 2m achine communication system b ased on RS232/485protocolLI U Ping 2xian 1,C AO Qing 2hua 1,ZH AO X iao 2yuan 2(1.Departm ent of M echanical and Dynam ic Engineering ,Nanchang Institute of T echn ology ,Nanchang 330099,China ;2.S ch ool of Professional T echnique ,J iangxi University of Finance &E con om ics ,Nanchang 330013,China )Abstract :This paper introduces a design based on RS232/RS485protocol ,which has im plemented the one 2to 2many (1∶N )communication by applying MCS51single chip ,Visual Basic 6.0and WinAPI function.Mean 2while ,the paper analyzes the problem of multi 2machine communication ,points out the key to the problem that MSC omm fails to s olve by using the WinAPI function ,and presents an exam ple of plating bath data gathering and control system.K ey w ords :RS485;VB6.0;multi 2machine communication ;serial communication ;MSC omm0 前 言在工业领域,主从式的设备监控管理模式应用越来越来广泛.一台上位机同时监控多台下位机(1∶N ),相比一台上位机监控一台下位机(1∶1)的模式,更具有经济性、方便性和时效性.在一对多的通信模式中,由于下位机与上位机、下位机与下位机之间的物理位置相距较远,运行环境复杂、干扰大,使用RS232串口通讯(最长15m )完全不能达到要求,而通讯距离远(最长1200m )、抗干扰能力强的RS485串口通讯协议完全能够胜任工业中复杂的电磁环境.RS232总线只能实现一对一的通信,RS485总线可挂接32台设备,可进行1∶N 的通信[1].而PC 机具有较强的数据分析处理能力,良好的人机界面及大容量数据存储空间,可充当上位机,用来监控下位机的运行状况.但是,通常PC 机上只有RS232C 串口,要使用RS485来进行实现1∶N 通信,必须将RS232通信协议与RS485通信协议进行双向转换.下位机通常采用单片机来实现,也可用可编程序控制器(P LC ).MCS51系列单片机具有价格低,功能强,抗干扰能力好、温限宽和面向控制等特点.Visual Basic6.0以其强大的功能、使用简单、能在短时间内开发出高效的通信程序而成为Windows 系统开发的主要编程语言.VB 可直接使用用户自定义控件VBX 或OCX 文件;VB 可通过调用动态链接库(D LL ,dynamic link library )或Win32API 函数来加快应用程序关键部件的执行第27卷第6期2008年12月南昌工程学院学报Journal of Nanchang Institute of T echnology V ol.27N o.6Dec.2008速度;VB 支持面向对象编程,支持链表存储数据对象,在编程过程中,程序更具结构化,模块化.1 系统设计图1为典型的一对多的主从通信控制模式,PC 机充当主机,多台下位机充当从机.由于RS232串口逻辑电平为-15~-3V (逻辑1)和+3~+15V (逻辑0),传送距离最大为15m ,而RS485采用RS422A 的通信电平,为±2~±6V ,当速率为9600BPS 时,传送距离可达1500m [2].因此,这两种总线必须通过一个电平转换装置来进行互联.同时,由于下位机使用单片机如AT89S52芯片,只有串行接收(RX D )、发送(TX D )引脚,图1 系统结构图只支持TT L 电平,与RS485总线电平不匹配,因此不能直接与RS485总线相连,在电路设计中需增加一M AX487转换芯片来驱动.与RS422不同,RS485总线只能处于半双工模式,“收”和“发”不能同时进行,系统的工作模式只能是一种“应答”工作模式.系统结构如图1所示.2 系统通信软件设计整个多机通信系统设计的关键在于系统通信模块的实现.一对多的通信模式有别于单一的一对一通信,它采用主从工作模式.由于通信总线上并挂着多台下位机,每一台下位机都是平等的.上位机为了能识别下位机,需要对每一台下位机进行编址,即一个类似于以太网卡M AC 地址的十六进制编号.这个地址编号在该RS485总线上是独一无二的.当上位机需要监控目标下位机时,首先发出具有编号的地址帧于RS485总线上,此时总线上的每一台下位机都将接收到这个地址帧,并进行判断.若目标地址与自身相符,说明该下位机被选中,要求接收发送监控数据,即收发数据帧信息,否则,退出并回到接收地址帧状态.数据的交换过程(包括建立连接和交换数据)采用一问一答的方式,上位机询问了下位机,下位机才给予应答,收到应答后,数据交换才继续进行下去.这样的方式可以避免多个下位机间没有次序的数据通信,扰乱整个网络上数据的传输.为了让下位机能够识别地址帧和数据帧,那么在帧结构构成上需要进行单独设计.串行数据以高低电平来区分0或者1,以一个字节(Byte )为最小单位进行发送,一个Byte 为8个二进制位(Bit ),另外附加3个位作为起始位、停止位和奇偶校验位.在选择不使用奇偶校验的情况下,串口一次最小传送10个Bit ,如果需要奇偶校验,则是11个Bit ,排列为[起始位][数据位1到8][奇偶校验位][停止位].起始位和停止位是必不可少的,可利用的只有奇偶校验位,即习惯中的最9位.令第9位为1,代表该数据为地址帧,令第9位为0代表数据帧.MCS51系列的单片机中的串行通信模式2、3都支持区分地址帧和数据帧,Micros oft Windows 操作系统同样支持这项功能.2.1 下位机通信程序设计下位机采用AT89S52芯片,通信程序采用主从工作模式,下位机被动地接收上位机的指令.其程序流程如图2所示.该程序的关键点在于判断查询地址是否是已方.若是,一是发回确定数据,二是紧接进行相应的数据接收和发送;否则再次回到接收地址帧状态.下位机通信中断程序如下:RS232I NT: PUSH ACC PUSH PSW C LR RI AC A LL SC ONDE LAY M OV A ,S BUF //读串口数据 C JNE A ,01H ,OUTRS232 //判断地址编号是否与该机编号相符否 C LR S M271第6期刘萍先,等:基于RS232/485协议的多机通信系统的设计 M OV A ,#055H //相符,则返回一个55H 数据回,说明查到设备 AC A LL SE NDDAT A AC A LL RECI VE DAT A JB 2FH.6,OUTRS232 M OV 40H,A图2 下位机通信中断处理流程图 AC A LL RECI VE DAT A //接收数据 JB 2FH.6,OUTRS232 M OV 41H ,A AC A LL RECI VE DAT A JB 2FH.6,OUTRS232 M OV 2DH ,A M OV A ,42H AC A LL SE NDDAT A M OV A ,43H AC A LL SE NDDAT A //发送数据 M OV A ,44H AC A LL SE NDDAT A M OV A ,45H AC A LL SE NDDAT A M OV A ,2EH AC A LL SE NDDAT A SET B S M2OUTRS232: SET B S M2 POP PSW POP ACC RETI2.2 上位机通信程序设计上位机通信程序作为整个系统中的主机,肩负着系统数据采集、指令下达,同时提供信息系统管理功能的多重任务.其中通信模块是系统中的核心部件.通信模块的实现方法有多种,在VB6.0中,可用:(1)MSC OM M 控件;(2)直接调用动态链接库(D LL ,Dynamic Link Library );(3)调用API 函数的方式.MSC OM M 是微软提供的标准通信控件.利用该控件可对串行通信的数据发送和接收进行设置,还可对串口状态及串行通信的信息格式和协议进行设置.在通信过程中可以通过触发OnC omm 事件来追踪、处理通信和错误事件的发生.或通过查询的方式,在每个重要的程序功能之后检查C ommEvent 属性值来检测事件和通信错误.程序设计简单方便,快捷[3].但是MSC OM M 控件中关于通信的很多参数的设置没有提供,致使特殊情况下,如多机通信,无法成功通信握手.调用动态链接库与调用MSC OM M 控件相似.第三种方法通过调用Windows 底层通信API 函数,如WriteFile 和ReadFile 函数,来发送和接收数据.程序中对串口通信的操作,与文件操作类似.同时,通信中,可利用DC B (device control block )串口设备控制块,来配置串口参数和串行通信驱动程序,从而灵活地实现多机通信.在VB6中,作者专门设计了一个通信类,并定义它的属性和方法,如表1所示.在类的定义中,按照要求将系统API 函数进行包装,对外提供统一的接口.调用时,可按如下步骤进行:(1)首先将类进行实类化,创建一个通信类(C omm )对象:在Dim AC omm as New C omm(2)打开一串行端口,如打开C OM1,runResult =AC mOpenP ort (1)(3)调用初始化方法,如:runRe 281南昌工程学院学报2008年sult =AC mInit ()(4)设置参数,如runResult =AC mSetPara (“9600,M ,8,1”),这是设置通信波特率9600,标志位M (置串行通信数据格式中的第9位为1,表示地址帧),数据长度8位,停止位1位.若要发送数据帧时,参数设置方法调用时,实参应为“9600,S ,8,1”,S 表示空位,即第9位设置为0.(5)发送或接收数据.在发送和接收之前,首先将要发送的数据存放在一个数组中或定义一个空的数组单元以用于存放接收到的数据.如:runResult =AC mSendData (data )(6)结束通信.AC mClose ()通过实验,在通信初始化方法commInit ()中,串口设备控制块的参数设置如下参数值时可以成功进行多机通信连接,而采用系统默认的参数则不能成功连接.flag =G etC ommState (HCF ,typDC B ) ′===================== typDC B.BaudRate =9600 typDC B.ByteSize =8 typDC B.DC Blength =28 typDC B.E ofChar =0 typDC B.ErrorChar =0 typDC B.EvtChar =0 typDC B.fBitFields =4113 typDC B.Parity =4 typDC B.StopBits =0 typDC B.wReserved =0表1 通信类项目名称:类型属性方法-HCF :long -typDC B :DC B +commOpenP ort (comP ort :byte ):Boolean +commInit ():Boolean +clearBu ffer ():Boolean +commSetPara (strSettings :S tring ):Boolean +commSendData (data ():Byte ):Boolean +commReceiveData (Bu ffer ():Byte ):Boolean +commClose () typDC B.X offChar =19 typDC B.wReserved1=0 typDC B.X offLim =512 typDC B.X onChar =17 typDC B.X on Lim =2048 typDC B.X on Lim =2048 ′=====================图3 电镀槽数据采集与控制信息管理系统软件主界面flag =SetC ommState (HCF ,typDC B )′设置DC B 块.其中,typDC B 为设备控制块,HCF 为通信控制句柄.3 实现实例基于上述系统结构,实现了电镀槽数据采集与控制信息管理系统软件,如图3所示.上位机系统采用VB6.0编写,程序大量使用了面向对象的编程思想,并利用数据链表来存放和遍历数据对象(clsDataofObject )和参数设置对象(clsSetValueofObject ).系统每隔10s ,上位机依次向下位机发送一条查询指令.下位机接收到指令,返回成功应答数据55H ,表明主机与从机之间已经成功建立连接,交换数据开始.最终各个下位机传送来的电压电流数据及工作状态信息都显示在表格中.(下转第28页)91第6期刘萍先,等:基于RS232/485协议的多机通信系统的设计1.5 算 例已知参数:冷媒水的进口温度14℃,加热水进口温度为90℃时,得出的两级吸收式制冷循环变工况运行的性能曲线.图3所示为冷凝温度变化引起的制冷量的增加(以冷凝温度为32℃的制冷量为基准),从图中可以看出,随着冷凝温度的降低,两级吸收式制冷循环的制冷量是提高的,在冷凝温度为30℃时,制冷量增加了11.6%.这是符合基本原理的,因为降低了冷却水温度,就提高了吸收器中溴化锂溶液的吸收能力,可图3 冷却水温度与制冷量的关系以降低吸收器中的出口溶液浓度,提高了系统的放气范围,减少了循环溶液的流量,制冷量也就相应增加.2 结束语本文根据两级吸收式制冷循环的循环流程特点,建立了循环中各个部件的数学模型,编制了溴化锂溶液以及水的热物性参数的通用计算模块和整个系统的仿真软件,模拟了冷却水温度变化对两级系统制冷量的影响.该仿真软件能够有效的模拟各种变工况运行,得出影响系统的一些重要的参数,从而可以对系统进行最优方案的设计,优化系统的运行工况,减小系统的不可逆损失,提高热效率,为太阳能空调的商品化提供了分析手段.参考文献:[1]Rivera W ,X icale A.Heat trans fer coefficients in tw o phase flow for the water/lithium bromide mixture used in s olar abs orption refrigerationsystems[J ].S olar Energy Materials &S olar Cells ,2001,70:309-320.[2]陈 滢,朱玉群,耿 玮,等.低温热源驱动的单效/双级(SE/D L )吸收式制冷循环[J ].太阳能学报,2002,(1):102-107.[3]高田秋一.吸收式制冷机[M].北京:机械工业出版社,1987.[4]McNeely LA.Therm odynamic properties of aqueous s olutions of lithium bromide[J ].ASHRAE T ransactions ,1979,85:413-427.[5]戴永庆,郑玉清.溴化锂吸收式制冷机[M].北京:国防工业出版社,1996.(上接第19页)4 结束语系统硬件采用AT89S52单片机和RS 2485驱动芯片M AX487组网,通过转换器,将RS485总线与RS232串口对接.软件采用主从通信协议,下位机采用通信模式2,上位机利用第9位奇偶校验位区分成地址帧和数据帧,利用VB6.0和WinAPI 函数设计上位机软件.通过软件硬件的结合,成功实现了一对多通信.在给出的信息系统实例中,可以对下位机进行管理,包括删除、添加和修改下位机的参数信息.主机根据这些信息来与地址匹配的从机通信,完成对整个网络中所有设备的监控.参考文献:[1]王 琦,秦娟英,周 伟.用RS 2485构成总线型多点数据采集系统[J ].计算机自动测量与控制,2000,8(6):45-47.[2]张筠莉,刘书智.Visual C ++实践与提高:串口通信与工程应用篇[M].北京:中国铁道出版社,2006.[3]张红兵,张宁达,郑云萍.VB6.0环境下利用Mscomm 控件实现串行通信[J ].微计算机信息,2002,18(12):67-68.[4]李 华.MCS -51系列单片机实用接口技术[M].北京:航空航天大学出版社,1993.82南昌工程学院学报2008年。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档