商品详情大图

IO控制包PLC技术发展的潮流卡件

及时发货 交易保障 卖家承担邮费

商品详情

. Modbus协议源代码简介



2.1 关于modbus中的常见两种寄存器区别

保持寄存器:指可以通过通信命令读或者写的寄存器;通常是一些功能控制寄存器或者输出寄存器等。不同的设计中,有些保持寄存器是掉电保持;有些则不然。

输入寄存器:指只能读不能写的寄存器,通常是状态寄存器或者是输入结果寄存器等。

线圈寄存器,可以类比为开关量,每一个bit都对应一个信号的开关状态。所以一个byte就可以同时控制8路的信号。

离散输入寄存器:相当于线圈寄存器的只读模式,每个bit表示一个开关量,而他的开关量只能读取输入的开关信号,无法写入。

2.2 Modbus开源库常用配置接口

1)modbus_t* modbus_new_rtu(const char *device,

int baud, char parity, int data_bit,

int stop_bit)

modbus_new_rtu函数用于生成Modbus的句柄,在本函数中可以设置通

信协议中的波特率、校验位、数据长度以及停止位,其返回值为通过设置后生成的句柄,用于在读写数据时使用,每个句柄可以执行一个modbus指令。如果这些配置参数有误,就会返回一个空指针。

2)static int _modbus_rtu_connect(modbus_t *ctx)

本函数主要功能是将通信串口设置为rtu模式。

3)int modbus_set_slave(modbus_t *ctx, int slave)

本函数设置本句柄的从机号。



2.3 Modbus主机通信常用接口

1)int modbus_write_registers(modbus_t *ctx, int addr, int nb, const uint16_t *src)

本函数为将数组中的数据写入到远端设备(从机)的寄存器中,写入的地址位addr,长度为nb个寄存器。

2)int modbus_read_registers(modbus_t *ctx, int addr, int nb, uint16_t *dest)

本函数将远端设备(从机)保持寄存器中的数据复制到数组dest中。

3)int modbus_read_input_registers(modbus_t *ctx, int addr, int nb,

uint16_t *dest)

本函数读取远端设备(从机)地址为addr输入寄存器中的数据,数据长度为nb。



2.4 Modbus从机通信主要接口

1)int _modbus_receive_msg(modbus_t *ctx, uint8_t *msg, msg_type_t msg_type)

本函数可以用于处理来自主机的请求,返回接受到的字符的数量,如果成功,则返回uint8_t数组中的消息(即主机发送的命令),否则返回-1。



2)int modbus_reply(modbus_t *ctx, const uint8_t *req,

int req_length, modbus_mapping_t *mb_mapping)

本函数负责在接受到请求后,分析请求并生成响应消息,并且发送到主机。如果请求属性为广播,那么不发送响应消息。

三、 调试问题分享

  在调试中,从机的Server进程会经常出现崩溃,后发现在Server经常每次处理配置变更时,都会重新new出新的modbus句柄,但却不释放原有句柄,这种处理会导致多次修改Modbus通信配置时,从机Server进程崩溃。

解决方案:在程序中判断,当modbus句柄已经存在时,此时更新配置后,不再new出新的句柄,而是调用接口 modbus_close(), modbus_free()释放句柄中的配置,然后用更新后的配置重新设置句柄参数。

MODBUS 是 OSI 模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。

自从 1979 年出现工业串行链路的事实标准以来,MODBUS 使成千上万的自动化设备能够通信。目前,继续增加对简单而雅观的 MODBUS 结构支持。互联网组织能够使 TCP/IP 栈上的保留系统端口502 访问 MODBUS。

MODBUS 是一个请求/应答协议,并且提供功能码规定的服务。MODBUS 功能码是 MODBUS 请求/应答 PDU 的元素。本文件的作用是描述 MODBUS 事务处理框架内使用的功能码。

1.2 规范性引用文件

1.RFC791,互联网协议,Sep81 DARPA

2.MODBUS 协议参考指南 Rev J,MODICON,1996 年 6 月,doc#PI_MBUS_300

MODBUS 是一项应用层报文传输协议,用于在通过不同类型的总线或网络连接的设备之间的客户机/服务器通信。

目前,使用下列情况实现 MODBUS:

以太网上的 TCP/IP。

各种媒体(有线:EIA/TIA-232-E、EIA-422、EIA/TIA-485-A;光纤、无线等等)上的异步串行传输。

MODBUS PLUS,一种高速令牌传递网络。

输入与输出之间以及比特寻址的和字寻址的数据项之间的区别并没有暗示任何应用操作。如果这是对可疑对象核心部分自然的解释,那么这种区别是可完全接受的,而且很普通,以便认为四个表格全部覆盖了另外一个表格。

对于基本表格中任何一项,协议都允许单个地选择 65536 个数据项,而且设计那些项的读写操作可以越过多个连续数据项直到数据大小规格限制,这个数据大小规格限制与事务处理功能码有关。很显然,将通过 MODBUS 处理的所有数据放置在设备应用存储器中。但是,存储器的物理地址不应该与数据参考混淆。要求仅仅是数据参考与物理地址的链接。

MODBUS 功能码中使用的 MODBUS 逻辑参考数字是以 0 开始的无符号整数索引。

MODBUS 模型实现的实例
下例实例示出了两种在设备中构造数据的方法。可能有不同的结构,这个文件中没有全部描述出来。每个设备根据其应用都有它自己的数据结构。

实例 1:有 4 个立块的设备

下例实例示出了设备中的数据结构,这个设备含有数字量和模拟量、输入量和输出量。由于不同块中的数据不相关,每个块是相互立。按不同MODBUS 功能码访问每个块。

一旦服务器处理请求,使用合适的 MODBUS 服务器事务建立 MODBUS 响应。

根据处理结果,可以建立两种类型响应:

一个正 MODBUS 响应:
响应功能码 = 请求功能码

一个 MODBUS 异常响应:
01、用来为客户机提供处理过程中与被发现的差错相关的信息;

02、响应功能码 = 请求功能码 + 0x80;

03、提供一个异常码来指示差错原因。

5、功能码分类
有三类 MODBUS 功能码。它们是:

公共功能码

是较好地被定义的功能码,
是的,
MODBUS 组织可改变的,
公开证明的,
具有可用的一致性测试,
MB IETF RFC 中证明的,
包含已被定义的公共指配功能码和未来使用的未指配保留供功能码。
用户定义功能码

有两个用户定义功能码的定义范围,即 65 至 72 和十进制 100 至 110。
用户没有 MODBUS 组织的任何批准就可以选择和实现一个功能码
不能被选功能码的使用是的。
如果用户要重新设置功能作为一个公共功能码,那么用户启动 RFC,以便将改变引入公共分类中,并且指配一个新的公共功能码。
保留功能码

一些公司对传统产品通常使用的功能码,并且对公共使用是无效的功能码。

请求参数描述:

指配号为14的MODBUS封装接口识别读识别码请求。定义四种访问类型:

01:请求获得基本设备识别码(流访问)

02:请求获得正常设备识别码(流访问)

03:请求获得扩展设备识别码(流访问)

04:请求获得特定识别码对象(访问)

在识别码数据不适合单响应的情况下,可以需要几个请求/响应事务处理。对象id字节给出了获得的个对象识别码。对于个事物处理来说,客户机设置对象id为0,以便获得设备识别码数据的开始。对于下列事务来说,客户机设置对象id为前面响应中服务器的返回值。

如果对象id不符合任何已知对象,那么服务器象指向对象0那样响应(从头开始)。

在单个访问的情况下:ReadDevId代码04,请求中的对象id给出了获得的对象识别码。

如果对象id不符合任何已知对象,那么服务器返回一个异常码=02(非法数据地址)的异常响应。

响应参数描述:

功能码: 功能码 43(十进制)0x2B (十六进制)

MEI 类型: 为设备识别码接口指配号的 14 (0x0E) MEI 类型

ReadDevId 码: 与请求 ReadDevId 码相同:01、02、03 或 04

一致性等级: 设备的识别码一致性等级和支持访问的类型

01:基本识别码(仅流访问)

02:正常识别码(仅流访问)

03:扩展识别码(仅流访问)

81:基本识别码(流访问和单个访问)

82:正常识别码(流访问和单个访问)

83:扩展识别码(流访问和单个访问)

随后更多: 在 ReadDevId 码 01、02或03(流访问)的情况下,

如果识别码数据不符合单个响应,那么需要几个请求/响应事务处理。

00:对象不再是可利用的

FF:其它识别码对象是可利用的,并且需要更多 MODBUS 事务处理

在 ReadDevId码04(单个访问)的情况下,

设置这个域为00。

下一个对象 Id: 如果“随后更多=FF”,那么请求下一个对象的识别码

如果“随后更多=00”,那么设置为00(无用的)对象号

在响应中返回的对象识别码号

(对于单个访问,对象号码= 1)

对象 0.id: PDU 中返回的个对象识别码(流访问)或请求对象的识别码(单个访问)

Object0.长度: 个对象的字节长度

Object0.值: 个对象的值(对象0.长度字节)



ObjectN.id: 后对象的识别码(在响应中)

ObjectN.长度: 后对象的字节长度

ObjectN.值: 后对象的值(对象N.长度字节)

“基本设备识别码”的读设备识别码请求的实例:在这个实例中,一个响应PDU中发送所有的报文。

IS420UCSBH4A是通用电气制造的控制模块,是Mark VIe系列的一部分,用于燃气涡轮控制系统,带有1066 MHz的Intel EP80579微处理器。应用程序代码由称为UCSB控制器的立计算机执行。控制器通过板载1/0网络接口安装在面板上,与I/O包进行通信。只有Mark控制I/O模块和控制器被私有的、的以太网(即IONet)所支持。控制器的操作系统(OS)是QNX中微子,一种实时多任务操作系统,为要求的速度和可靠性的工业应用开发。UCSB控制器没有任何应用程序I/O主机,而传统控制器在背板上承载应用程序I/O。此外,每个控制器都可以访问所有的I/O网络,为它们提供所有的输入数据。

如果控制器因维护或维修而关闭,硬件和软件架构确保没有应用程序输入的单点丢失。使用Mark VIeS UCSBSIA安全控制器和安全1/0模块实现功能安全回路,以实现SIL 2和3功能。熟悉SIS应用的操作人员使用Mark Vles安全设备,以降低关键安全功能的风险。这些特殊的控制硬件和软件具有IEC 61508认证,并配置与安全控制器和分布式I/O模块的工作。
UCSB控制器提供以下优点:
单模块
内置电源
不需要跳线设置
没有电池
无风扇(UCSBSIA, UCSBHIA, UCSBH4A)
双冗余风扇,支持IS420UCSBH3A
小面板的足迹
闪存可以方便地更新
UCSB安装:
直接安装到面板金属板上的单个模块包含控制器。模块外壳和安装的尺寸如下图所示。每一项测量都以英寸为单位。UCSB如图所示安装在面板上,垂直气流通过翅片保持畅通。

下一条:A413285-BIR82卡件机架
厦门雄霸电子商务有限公司漳州分公司为你提供的“IO控制包PLC技术发展的潮流卡件”详细介绍
厦门雄霸电子商务有限公司漳州分公司
主营:欧美进口模块,卡件 控制器,触摸屏 伺服,工控系统备件
联系卖家 进入商铺

GEIO控制包信息

最新信息推荐

拨打电话