uC/Modbus 用户手册——第一节

目录

 

1.0 引言

1.01 拓扑结构

1.02 uC/Modbus结构体系


1.0 引言

这篇文档对uC/Modbus进行叙述,实现了Modicon Modbus协议(简称Modbus)以及Modbus协议的“丹尼尔扩展”,在Daniel Flow Products中详述。

Modbus协议的更多详细信息,参考Modicon的:

Modicon Modbus Protocol Reference Guide

PI–MBUS–300 Rev. J

Modbus协议包含接收和发送预定义的数据包,这里称为“帧”。Modbus协议操作两种类型的数据帧,一种是ASCII帧,一种是远程终端单元(RTU)帧。ASCII帧是一种基于ASCII十六进制字符的数据帧,而RTU帧这是一个严格的二进制实现。ASCII模式更容易实现与调试,但是只能提供RTU模式一半的传输速率。在uC/Modbus中您可以使用任意模式,因为Micrium已经全部实现。

uC/Modbus可以支持任意数量的通信通道。每个通道上的操作模式都可以是ASCII或RTU,并且可以按通道进行选择。

图1-1展示了使用uC/Modbus设计的产品与其他Modbus主机和从机产品之间的关系。“串行通道”通常是RS-232C或RS-485异步串行接口,通常是UART(通用异步收发器)。

图1-1 基于Modbus的产品之间的关系

主机(也称为客户端)在系统中启动所有数据传输,发送到一个或多个从机(也称为服务器)。也就是,只有Master(Client)可以从Slave(Server)读取数据或向其写入值。

uC/Modbus可以做到看起来像有多个主/从端口。事实上,uC/Modbus允许您从一个目标系统中组合多达250个主/从端口!

uC/Modbus-S表示您的产品包含uC/Modbus的Modbus从机实现,uC/Modbus-M表示您的产品包含uC/Modbus的Modbus主机实现。

应该注意,产品可以同时包含uC/Modbus-S和uC/Modbus-M。但是,主端口和从端口将位于单独的端口上。

1.01 拓扑结构

图1-2展示了多个产品(从设备)与一个主设备的关系。(假设使用RS-485)

图1-2 Modbus主机与从机在RS-485网络上的关系

图1-3展示多个产品(从机)与多个Modbus主句的关系(假设示例中使用RS-485),其中一种产品是uC/Modbus-M。需要注意,每个RS-485网络上只能有一个主机存在。

图1-3 RS-485网络上的多个Modbus主机与从机

图1-4展示多个产品(从机)与多个Modbus主机的关机的关系(假设示例中使用RS-232C)。可以看到,使用RS-232C,每一个主机需要直与每一个从机进行连接。uC/Modbus支持这种拓扑,因为每个产品可以拥有多个通信通道。虽然RS-232C需要多个点对点连接,但它的好处是提高了吞吐量,因为通信可以同时发生,而不是按顺序进行。

图1-4 RS-232C中的多个Modbus主机与从机

Modbus允许按整型、浮点(如果是丹尼尔扩展)和离散值从目标系统读取或写入目标系统。uC/Modbus可以读写:

    16-bit整型值,最大65536。

    32位浮点值,最大65536。

    多达65536个线圈和多达65536个离散输入。

整型和浮点请求不可以混合在同一个命令中。可以通过一条命令写入多个整型值(最多125个)和多个浮点值(最多62个)。

根据使用的处理器,可以选择运行uC/Modbus的速率,波特率可以是9600-256000。事实上可实现的波特率仅受限于CPU的性能,并不是uC/Modbus。

1.02 uC/Modbus结构体系

图1-5展示uC/Modbus通信栈如何适配您的产品以及源文件与每个层的关系。

图1-5 模块之间的关系

MB代表ModBus,MBS代表ModBus Slave,MBM代表ModBus Master。以mb_开头的文件表示文件中的代码独立于Modbus Slave或Master。以mbs_开头的文件包含Modbus Slave特定的代码,当然,以mbm_开头的文件包含Modbus Master特定的代码。

F1-5(1)

产品需要配置uC/Modbus(在编译时),以便确定产品支持的最大通道数、通道是否支持Modbus ASCII或RTU、是否支持“丹尼尔扩展”来提供浮点支持、支持哪些Modbus 功能码、产品作为主机/从机或同时作为主从机等。配置通过修改C头文件(mb_cfg.h)实现。这是您需要提供的代码,mb_cfg.h通常位于产品目录中,因为每个产品都可能不同。

F1-5(2)

一个Modbus主机,连接到运行了uC/Modbus从机的的产品时,就可以读取或更改应用中的任何数据。访问数据(读/写)通过提供的mb_data.c文件实现。Mb_data.c可以读取整型、线圈、离线输入、浮点数等。mb_data.c还允许在读写数据时执行任意代码。例如,如果您更改了圆的直径并需要计算面积,您可以简单地在mb_data.c中包含计算面积的代码。后面会有更多关于这个问题的信息。这些代码需要您来提供,mb_data.c通常位于产品目录中,因为每个产品都可能不同。

F1-5(3)

这是应用程序专用代码,它知道如何处理Modbus ASCII和/或Modbus RTU数据包。 您不必修改此代码。

F1-5(4)

产品中UARTs的接口放置在板级支持包中,名称是mb_bsp.c。该文件需要您提供,以便接入uC/Modbus。注意,每个通道都可以通过RS-232C或RS-485连接(在接口层)。这是您需要提供的代码,mb_bsp.c被放置在您的产品目录中,或者由Micrium提供,位于

\Micrium\Software\uC-Modbus\Ports\<CPU>\<compiler>目录。 这是您正在使用的CPU或板的适配层。

F1-5(5)

不论是否使用RTOS环境,,都可以使用uC/Modbus-S。uC/Modbus-M默认RTOS存在。当然,您可以使用任何RTOS,并且RTOS的细节被隔离在mb_os.c的文件中。uC/OS-II、uC/OS-III和Non-OS环境的代码已经提供,因此您的产品在使用uC/OS-II或uC/OS-III或不使用任何RTOS的时候,使用uC/Modbus-S是不需要修改这些代码的。mb_os.h文件仅在不运行RTOS的时候使用uC/Modbus-S才需要。在第8节中说明。

F1-5(6)

uC/Modbus不依赖于CPU以及您使用的编译器。但是您需要提供您的CPU和编译器的数据类型的信息。例如,您需要定义如下数据类型:

CPU_BOOLEAN Boolean (True or False, Yes or No, etc.)

CPU_INT08U 8 bit unsigned integer

CPU_INT16U 32 bit unsigned integer

CPU_INT32U 8 bit unsigned integer

CPU_FP32 32 bit IEEE754 floating-point

这些数据类型是需要的,因为uC/Modbus从不使用标准C的数据类型(如,char、short、int、long等),因为他们是不可移植的。

这些数据类型需要放置在cpu.h文件中。(后面在谈这个)

全文下载地址:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值