本页已使用福昕阅读器进行编辑。福昕软件(C)2005-2009,版权所有,仅供试用。广州周立功单片机发展有限公司 Tel:(020)38730977 38730977 Fax:38730925 http://www.zlgmcu.com
图 1-22所示电路中,当TXD信号为“1”,即无输入信号时,SP485R芯片工作在“接
收”状态;当TXD为“0”,即有信号输入时,即执行发送功能时,来自TXD信号上的有效电平将自动禁能接收器,使能发送器,从而将TXD信号发送到RS-485网络。
RS-485接口电路的自动换向功能可以有很多种可实现的不同电路形式,但其基本内容都是由TXD信号来控制RS-485芯片中接收器/发送器的开关切换。
由于RS-485接口电路的自动换向将占用一部分接口电路的切换时间开销、信号驱动开销,因此,这一种低成本的RS-485接口电路可能并不适合所有的RS-485应用。比如,在需要可靠性或高速度长距离,尤其在节点较多、负载重的情况下,强烈建议选用前面介绍的独立控制的RS-485接口电路收/发控制方法。
1.4 RS-485通讯协议
RS-485标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议;因此,用户需要在RS-485应用网络的基础上建立自己的应用层通信协议。
由于RS-485标准是基于PC的UART芯片上的处理方式,因此,其通讯协议也规定了串行数据单元的格式(8-N-1格式):1位逻辑0的起始位,6/7/8位数据位,1位可选择的奇(ODD)/偶(EVEN)校验位,1/2位逻辑1的停止位。
目前,RS-485在国内有着非常广泛的应用,许多领域,比如工业控制、电力通讯、智能楼宇等都经常可以见到具有RS-485接口电路的设备。但是,这些设备采用的用户层协议(术语参考自OSI的7层结构)都不相同;这些设备之间并不可以直接连接通讯。
比如,很多具有RS-485接口电路的用户设备采用自己制定的简单通讯协议,或是直接取自ModBus协议(AscII/RTU模式)中的一部分功能;在电力通讯领域,当前国家现在执行的行业标准中,颁布有按设备分类的各种通讯规约,如CDT、SC-1801、u4F、DNP3.0规约和1995年的IEC60870-5-101传输规约、1997年的国际101规约的国内版本DL/T634-1997规约;在电表应用中,国内大多数地区的厂商采用多功能电能表通讯规约(DL/T645-1997)。
下面将分别对ModBus协议(RTU模式)、多功能电能表通讯规约(DL/T645-1997)进行简单介绍,便于大家对应用层通信协议有一个基本的概念与理解。 1.1.1
ModBus协议(RTU模式)
以下资料摘录于Modbus协议(RTU模式)的一部分,介绍了Modbus RTU协议的基本构成、主要特点、参数规定;便于我们理解一个通讯协议的基本模式与要求。关于详细的ModBus协议,用户可以从ModBus-IDA协会 (www.modbus.org) 网站下载具体的内容。 1.
查询—响应周期
w.wwd15.jptenModBus协议遵循“查询—响应”模式,如图 1-23所示。
? 查询:
查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。
? 响应
如果从设备产生一正常的响应,在响应消息中的功能代码是在查询消息中的功能代码的响应。数据段包括了从设备收集的资料:象寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出响应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。
25
本页已使用福昕阅读器进行编辑。福昕软件(C)2005-2009,版权所有,广州周立功单片机发展有限公司 Tel:(020)38730977 38730977 Fax:38730925 http://www.zlgmcu.com
仅供试用。
图 1-23 ModBus协议的“查询—响应”模式
2.
RTU模式 RTU模式的格式: 地址
功能代码 数据数量
数据1
...
数据n
CRC高字节 CRC低字节
当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。
代码系统:
z 8位二进制,十六进制数0...9,A...F
j.netz 消息中的每个8位域都是一个两个十六进制字符组成p 每个字节的位: z 1个起始位
z 8个数据位,最小的有效位先发送 z 1个奇偶校验位,无校验则无 z 1个停止位(有校验时)www.51d,2个Bit(无校验时) 错误检测域:
z CRC(循环冗长检测)
3. RTU帧
使用RTU模式,消息发送至少要以3.5个字符时间的停顿间隔开始。在网络波特率下多
样的字符时间,这是最容易实现的(如图 1-24的T1-T2-T3-T4所示)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0...9,A...F。网络设备不断侦测网络总线,包括停顿间隔时间。当第一个域(地址域)接收到,每个设备都进行译码以判断是否发往自己的。在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。 整个消息帧必须作为一连续的流转输。如果在帧完成之前有超过1.5个字符时间的停顿,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5个字符时间内开始,接收的设备将认为它是前一消息的延续。这将导致一个错误,因为在最后的CRC域的值不可能是正确的。一典型的消息帧如下图 1-24所示: 起始位 设备地址 功能代码 数据 CRC校验 结束符 26
本页已使用福昕阅读器进行编辑。福昕软件(C)2005-2009,版权所有,仅供试用。广州周立功单片机发展有限公司 Tel:(020)38730977 38730977 Fax:38730925 http://www.zlgmcu.com
T1-T2-T3-T4 8Bit 8Bit n个8Bit 16Bit T1-T2-T3-T4 图 1-24 RTU消息帧
4.
地址
地址0是用作广播地址,以使所有的从设备都能认识。当Modbus协议用于更高水平的
网络,广播可能不允许或以其它方式代替。 5.
响应
当从设备响应时,它使用功能代码域来指示是正常响应(无误)还是有某种错误发生(称作异议响应)。对正常响应,从设备仅响应相应的功能代码。对异议响应,从设备返回一等同于正常代码的代码,但最重要的位置为逻辑1。
例如:从一个主设备发往从设备的消息要求读一组保持寄存器,将产生如下功能代码:
0 0 0 0 0 0 1 1 (十六进制03H)
对正常响应,从设备仅响应同样的功能代码。对异议响应,它返回:
1 0 0 0 0 0 1 1 (十六进制83H)
除功能代码因异议错误作了修改外,从设备将一独特的代码放到响应消息的数据域中,这能告诉主设备发生了什么错误。
主设备应用程序得到异议响应后,典型的处理过程是重发消息,或者诊断发自从设备的消息并报告给操作员。
从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代码所定义的行为。这包括了象不连续的寄存器地址,要处理项的数目,域中实际数据字节数。
例如,如果主设备需要从设备读取一组保持寄存器(功能代码03),数据域指定了起始寄存器以及要读的寄存器数量。如果主设备写一组从设备的寄存器(功能代码10十六进制),数据域则指明了要写的起始寄存器以及要写的寄存器数量,数据域的数据字节数,要写入寄存器的数据。
关于详细的ModBus协议,用户可以从ModBus-IDA协会 (www.modbus.org) 网站下载具体的协议内容。
w.wwd15.jpten1.1.2 多功能电能表通讯规约(DL/T645-1997)
国内江苏、浙江、上海地区的电表厂商采用多功能电能表通讯规约(DL/T645-1997)作为
电表的远程控制通讯协议;这是一个在RS-485网络中实现应用的行业标准。 1.
0
通讯字节格式
D0 D1 D2 D3 D4 D5 D6 D7 P
1
起始位0 8位数据D0~D7 偶校验位 停止位1
传送方向从低到高位,一个起始位、一个停止位、一个偶校验位、8位数据位,总共11位。 2.
帧起始符 (68H)
通讯帧格式
地址域 (A0~A5)
帧起始符 (68H)
命令码 (C)
数据长度(L)
数据域 (DATA)
校验码 (CS)
结束符 (16H)
27
本页已使用福昕阅读器进行编辑。福昕软件(C)2005-2009,版权所有,仅供试用。广州周立功单片机发展有限公司 Tel:(020)38730977 38730977 Fax:38730925 http://www.zlgmcu.com
地址域A0~A5:当地址位999999999999H时,为广播地址,同时当从控制器接收到一 帧数据时,地址域相同时应响应命令,取得总线控制权,当响应命令之后,应把总线控制权归还给主控器。
命令码:执行操作的依据。
校验码:帧开始各个字节二进制算术和,不计溢出值。
前导字节:在发送信息之前,发送1个或多个字节FEH,以唤醒接收方。 数据域:发送时数据加33H,接收时数据减33H。
用户可以在国家标准计量局,或技术监督部门查询关于多功能电能表通讯规约(DL/T645-1997)获取更多在RS-485网络中实现的通讯规约的具体内容。
1.5 RS-485程序设计
以下章节将以多功能复费率电表的RS-485通讯接口为设计原型,详细介绍RS-485接口的程序设计方法。 1.1.1
RS-485接口电路
RS-485通讯接口电路是多功能复费率电表系统的一个重要的电路单元。
电表系统的微处理器芯片采用PHILIPS公司的P89LPC931单片机。P89LPC931采用高性能的处理器结构,指令执行时间只需2~4个时钟周期,6倍于标准的80C51微处理器。PHILIPS公司LPC900系列单片机是一个基于80C51内核的高速、低功耗Flash单片机,主要集成了字节方式的I2C总线、SPI接口、UART通信接口、实时时钟、E2PROM、A/D转换器、ISP/IAP在线编程和远程编程方式等一系列有特色的功能部件,非常适合于许多要求高集成度、低成本、高可靠性的仪表应用领域。
微处理器P89LPC931与SP-485E芯片进行连接,构成RS-485通讯接口电路,如图 1-25所示:
w.wwd15.jpten
图 1-25 单片机与RS-485通讯转换电路图
电路通过3个光耦元件PS2501对微处理器P89LPC931和RS-485总线电路进行隔离,
提高系统的抗干扰能力,电路中的双向TVS管P6KE6V8并联在RS-485总线A、B线两端,对电路进行瞬态保护作用,R7和R8为偏置电阻,进行网络失效保护。但是这个电路中没有安装匹配电阻,在通讯网络设计中,应根据实际情况进行匹配电路的设计。
1.1.2 通讯规约
电表系统的通讯协议采用多功能电能表通讯规约(DL/T645-1997)。
28
广州周立功单片机发展有限公司 Tel:(020)38730977 38730977 Fax:38730925 http://www.zlgmcu.com
1.1.3 程序设计流程图
整个通讯程序分为3个部分:数据接收部分、命令执行部分、数据发送部分。
1.1.4
数据接收部分
数据接收程序主要接收一帧正确的数据,数据帧错误的判断符合以下原则: z 有一个字节偶校验错误,数据帧错误。 z 数据帧格式不正确,数据帧错误。 z 数据帧校验码不正确,数据帧错误。 整个程序是在接收中断服务程序中执行的。
接收中断开始接收是前导字节吗?YY接收是前导字节吗?N接收是帧头吗?Y接收地址域(A0~A5)N接收L个数据(DATA)接收校验字正确吗?接收是帧头吗?Yw.wwd15NN.jptenYYN接收是帧尾吗?N置接收帧事件发生标志关闭接收中断接收命令字节(C)结束接收中断接收数据长度字节(L)
图 1-26 接收程序流程图
1.1.5
命令执行部分
这一部分是主程序执行部分,是从机接收一帧正确数据后,通过地址域判断RS-485总
线中主控器是否呼叫本从机,如果是广播地址则所有接收到的从机都应响应命令,同时通过密码的方式,可以设置权限,密码和地址是保存在E2PROM中。
在地址和密码判断正确的时候,程序进行命令译码,对要求的命令执行相应的操作,同
29