1 概述 Modbus是一种串行通信协议,是Modicon公司(现施耐德电气)于1979年为使用可编程逻辑控制器(PLC)通信而发表。如今Modbus已成为工业领域通信协议的业界标准,并且是工业电子设备之间常用的连接方式。 1.1 关于 Modbus 协议 Modbus协议使用的是主从的通讯技术,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方所使用的协议称为Modbus Slave。典型的主设备包括工控机和工业控制器等;典型的从设备如可编程逻辑控制器(PLC)等。 MODBUS是OSI模型第7层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。 Modbus通讯物理接口可以选用串口(包括RS232、RS485等),也可以选择以太网口等。 图 1. Modbus 通信栈 MODBUS协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上的MODBUS协议映射能够在应用数据单元(ADU)上引入一些附加域。 图 2. 通用 Modbus 帧 当服务器对客户机响应时,它使用功能码域来指示正常(无差错)响应或者出现某种差错(称为异常响应)。需要管理超时,以便明确地等待可能不会出现的应答。 图 3. Modbus 事务处理(无差错) 图 4. Modbus 事务处理(异常响应) MODBUS使用一个‘big-Endian’表示地址和数据项。这意味着当发射多个字节时,首先发送最高有效位。例如,寄存器大小16-bit的值为0x1234,先发送的第一字节为0x12,然后为0x34。MODBUS的数据模型以一系列具有不同特征表格上的数据模型为基础。四个基本表格为: 表 1. Modbus 数据模型 MODBUS有三类功能码:公共功能码、用户定义功能码、保留功能码。 公共功能码是较好地被定义的功能码,保证是唯一的、公开证明的,具有可用的一致性测试。 图 5. 公共功能码定义 Modbus 串行链路协议是一个主从协议。在同一时刻,只有一个主节点连接于总线,一个或多个子节点(最大编号为247)连接于同一个串行总线。Modbus通信总是由主节点发起。子节点在没有收到来自主节点的请求时,从不会发送数据。子节点之间从不会互相通信。主节点在同一时刻只会发起一个Modbus事务处理。 主节点以两种模式对子节点发出Modbus 请求: 1、 单播模式,主节点以特定地址访问某个子节点,子节点接到并处理完请求后,子节点向主节点返回一个报文(一个'应答')。每个子节点必须有唯一的地址 (1 到 247),这样才能区别于其它节点被独立的寻址。 图 6. 单播模式 2、 广播模式,主节点向所有的子节点发送请求。对于主节点广播的请求没有应答返回。广播请求一般用于写命令。所有设备必须接受广播模式的写功能。地址 0 是专门用于表示广播数据的。 图 7. 广播模式 Modbus有两种串行传输模式被定义:RTU 模式(默认) 和 ASCII 模式。 图 8. RTU 和 ASCII 模式的位序列 Modbus 串行链路上所有设备的传输模式 (和串行口参数) 必须相同。有关Modbus 实现和特性的详细信息,请访问Modbus 官网:https://modbus.org。 1.2 关于 FreeModbus 协议栈 FreeMODBUS是一个针对通用的Modbus协议栈在嵌入式系统中应用的实现。它提供了RTU/ASCII传输模式及TCP协议支持。FreeModbus遵循BSD许可证,这意味着用户可以将FreeModbus应用于商业环境中。目前FreeMODBUS只免费提供了一个Modbus从机节点的协议栈。该协议栈使用ANSI C编写,并且支持多个变量。 本应用指南将介绍如何在AT32F435单片机上,通过FreeMODBUS协议栈实现Modbus从机节点的主要功能,并提供基于AT32F43x_StdPeriph_Lib和FreeMODBUS协议栈的源代码。如结合AT32-Comm-EV Board和AT-START Board可以方便快速的搭建起基于RS485的Modbus从机节点。 1.3 关于 Modbus Poll 调试软件 Modbus Poll是一个Modbus主机模拟器,支持Modbus RTU、ASCI、TCP/IP传输模式。它可以协助开发人员调试Modbus从设备,测试和模拟Modbus协议的通信。通过多文档界面接口,可以同时监控多个Modbus从机设备、数据域等。每个窗口可简单地设定从设备ID、功能码、地址、长度和轮询间隔。支持Modbus数据模型的四个基本表格,支持Modbus的多个公共功能码。 本应用指南中将下载安装Modbus Poll在PC机上作为Modbus主机,与AT-START Board(作为Modbus从机)通过USB转RS485的模块相连,实现一个完整的、可测试的Modbus通信网络。 2 AT32 硬件准备 硬件主要由AT32-Comm-EV Board和AT-START Board组成。 本应用指南提供的demo使用到的外设资源有USARTTMR等,用户可根据具体需要灵活配置和修改,使用RS232或RS485来实现Modbus物理层的连接。 图 9. AT32 Modbus 结构原理图 AT-START Board 当前提供例程基于AT-START-F435。可提供基于RS232的Modbus通信。 图 10. AT-START-F435 V1.0 实验板 AT32-Comm-EV Board 可提供例程基于RS485的Modbus通信支持。 图 11. AT-START 结合 AT32-Comm-EV 使用 3 将FreeMODBUS移植到AT32上 3.1 基础工程准备 下载最新版本BSP&PACK文件,按照其应用指南进行安装及配置,本文档及例程均基于AT32F4xx_StdPeriph_Lib_V2.x.x的BSP&PACK文件进行开发。可借用at_start_f435文件夹下的temple工程来进行修改,更改文件夹及工程名为freemodbus,并准备在该工程内添加FreeMODBUS源码。 |