FreeModbus 系列应用

      最后更新:2021-10-15 12:15:08 手机定位技术交流文章

      FreeModbus应用摘要系列之一。

      • FreeModbus 的配置配置文件
      • FreeModbus 访问自由模式
      • 硬件需求
      • 移植
        • 这个故事是我们对2011年埃及抗争的特别报导的一部分。
          • 2011年埃及抗争特别报导部分内容,
          • 我不确定,港口时间员,修改C的函数
        • 二楼,二楼,二楼,二楼,二楼,二楼,二楼,对应用程序层回声功能的修改
        • 这是我这辈子第一次见到一位女士。
      • 初始化及运行
      • FreeModbus启动程序分析

      FreeModbus 的配置配置文件

      FreeModbus是奥地利撰写的 Modbus 协议。 它是一个用于嵌入应用程序的自由( 免费) 全球MODBUS 协议的移植。 Modbus 是工业生产环境中使用的一种常见协议。 Modbus 通信平台分为两层: Modbus 应用程序,它规定了数据模式和功能,以及网络层。

      FreeModbus支持RRU/ACSCII传输模式以及TCP议定书。

      FreeModbus协定的硬件要求非常少——只是任何序列港和足够的微控制器,用于记录和档案管理,以支持模式客数据框架。

      现支持如下功能码:

      Read Input Register (0x04)
      Read Holding Registers (0x03)
      Write Single Register (0x06)
      Write Multiple Registers (0x10)
      Read/Write Multiple Registers (0x17)
      Read Coils (0x01)
      Write Single Coil (0x05)
      Write Multiple Coils (0x0F)
      Read Discrete Inputs (0x02)
      Report Slave ID (0x11)

      在这里插入图片描述

      FreeModbus 访问自由模式

      FreeModbus的最新版本是V1.6, 可通过以下链接从官方网络下载:
      https://www.embedded-solutions.at/en/freemodbus-downloads/

      您可以使用 Git 工具或下载已拉链的软件包。
      https://github.com/cwalter-at/freemodbus

      硬件需求

      FreeModbus协定的硬件要求非常少——只是任何序列港和足够的微控制器,用于记录和档案管理,以支持模式客数据框架。
      (1) 一个无同步线界面,能够接收缓冲区,完成并用空间间隙发送缓存。
      5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
      在使用操作系统的处理器上,可以通过独立创建工作对操作系统进行 Modbus 时间查询。 小微控制器通常无法使用操作系统,在这种情况下,可以使用一个全局变量完成事件队列( Atmel AVR 移植方式如此 ) 。
      使用的 Modbus 模块数量决定了实际储存需求。 以下是支持的功能编译者需要的存储单元清单。 ARM 是一个 GNUARM 编译者。 这是我们20114年埃及抗议活动特别覆盖的一部分。 4 使用 -O1 选项提供。 AVR 值是 WinaVR 编译者。 这是我们2011年埃及抗议活动特别覆盖的一部分。 5 使用 -Os 选项编制。

      移植

      这个故事是我们对2011年埃及抗争的特别报导的一部分。

      在物理层, 用户只需配置序列端口和定时器。 界面文件必须更改 。 和 porttimer, c- porttimer, c- porttimer, c- porttimer, c- porttimer, c- porttimer, c- porttimer, c- porttimer, c- porttimer, c- porttimer, c- porttimer

      2011年埃及抗争特别报导部分内容,

      1) void vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
      函数是创建序列状态。 有两个参数: xRxenable 和 xTxenable 。 如果 XRxenable 是真实的, 它应该能够接收和接收一系列嘴部的中断。 在 RS485 通信系统中, 还应当注意将 RS485 接口芯片配置为发送推进器; 如果 XTxenable 是真实的, 它应该能够连续发送和传输 。

      2) void vMBPortClose( void )
      该功能关闭莫德布斯通信港,特别是通信港的发送和接收使能器。

      3) BOOL xMBPortSerialInit(UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity)
      此函数是初始字符串通信端口。 有四个参数 : ucport、 ulBaudRate、 ucDataBits 和 eParacy 。 参数 ucport 可能被忽略 ; 参数 ulBaudRate 是通信端口的端口速率, 该端口应该以用于设定此值的硬件端口的端口速率为基础; 参数 ucDataBits 是用于通信的数据的空间宽度。 注意如果使用 RTU 模式, 有 ucDataBits=8, 如果使用 ASCII 模式, 有 ucDataBits=7, 所使用的硬件端口的数据宽度应该以此参数为基础; eParity=MB_PAR_NONE 是非核查方法, 此时硬件端口应该设置为随机检查, 停止位函数返回 TRUE 值 。

      4) BOOL xMBPortSerialPutByte(CHAR ucByte)
      函数将一个字节数据传送到通信端口。 参数是: ucByte, 数据将发送。 在此函数中, 您应准备一个函数来发送一个字节数据。 注意由于它被用于中断传输, 必须在发送者登记册中放置数据。 函数返回 TRUE 。

      5) BOOL xMBPortSerialGetByte( CHAR * pucByte )
      3⁄4 ̄ ̧漯B

      6) void prvvUARTTxReadyISR(void)
      此函数不需要更改。 您可以在用户发送断段功能中调用此函数, 用户在使用此函数后应该清除发送断段符号 。

      7) void prvvUARTRxISR(void)
      此函数不需要更改。 您可以在用户的接受断开函数中调用此函数, 用户在调用此函数后应该清除接收断开符号 。

      我不确定,港口时间员,修改C的函数

      1) BOOL xMBPortTimersInit( USHORT usTim1Timerout50us )
      此函数的参数是: 我们Tim1 Timm1 Timorrout50us 的数, 50us 的数。 用户应该根据所使用的硬件设定超时计时器, 这样它可以中断 Tim1 Timm1 Timorrout50us* 50us. 函数返回结果 TRUE 。

      2) void vMBPortTimersEnable( )
      此函数作为计时器。 要使用它, 用户必须删除断段标记、 零计时器, 并重新启动计时器 。

      3) void vMBPortTimersDisable( )
      函数关闭计时器。在此函数下,用户必须清除零计时器并关闭计时器。

      4) void TIMERExpiredISR( void )
      定时器中断函数。此函数不需要更新。只需在用户的定时器中断中调用,在调用后,用户应清除断线符号位置。

      二楼,二楼,二楼,二楼,二楼,二楼,二楼,对应用程序层回声功能的修改

      用户必须声明要使用登记册,并更改应用程序层中的相关回声函数。
      1) eMBErrorCode eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )
      在此插入登记册回声功能 。 * PucRegBuffer 是要添加到协议中的数据, 我们地址是输入登记册的地址, 而 usNRegs 是要读取的存款数量。 用户根据要访问的登记册的地址, 给公众添加必要的存储值 。

      2) eMBErrorCode eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode )
      * PucRegBuffer是协议数据,我们地址是进入登记册的空位数,我们NRegs是进入登记册的空位数,eMode是访问类型(MB_REG_READ来维持阅读登记册,MB_REG_REITE来保持写作登记册)。 用户应根据要访问的登记册地址、我们地址或地址,将相关值添加到登记册上。

      3) eMBErrorCode eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode )
      读写环回回声函数。 * PucRegBuffer 是要添加到协议中的数据, 我们地址是圆圈地址, WeAddress 是要访问的圆圈数量, 电子Mode 是访问类型( MB_REG_READ 是读取圆圈状态, MB_REG_RWITE 是写线圈)。 用户应该根据要访问的圆圈地址, 或放置鼠标, 将合适的圆圈的值按顺序添加到公共地址。

      4) eMBErrorCode eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete )
      3⁄4 ̄ ̧漯B

      这是我这辈子第一次见到一位女士。

      用户只需在主函数中调用协议初始化代码, 以及电文处理功能。 用户必须调用以下功能:
      1) eMBErrorCode eMBInit( eMBMode eMode, UCHAR ucSlaveAddress, UCHAR ucPort, ULONG ulBaudRate, eMBParity eParity )
      协议初始化函数。 eMode 是将要使用的模型, 用户可以选择 MB_ RTU (RTU 模式)、 MB_ ASCII (ASCII 模式) 或 MB_ TCP (TCP 模式); ucSlaveAddress 是机器地址, 用户取 1 - 247 (0 是广播地址, 保留 248 255); ulBaudRate 是用户必要时选择的电信端口速率, 但是,

      2) eMBErrorCode eMBSetSlaveID( UCHAR ucSlaveID, BOOL xIsRunning, UCHAR constpucAdditional, USHORT usAdditionalLen )
      从机器 ID 设定功能 。 注意 ID 指定设备类型, 与 ucSlave Address (来自机器地址) 不同 。 同一通信系统可以使用相同的 ucSlaveID, 但不同的 ucSlaveAddress. ucSlaveID 不是一个字节设备 ID; xIsRunning 是设备的有效状态, 0xFF 正在运行, 0x00 被停止 。
      不需要使用此方法。 但是, 当 Modbus 通信系统由不同的设备组成时, 此函数应该用于添加相关设备的描述 。 附加性是设备的额外描述, 需要时要添加; usApplicalLen 是额外的描述长度( 字节 ) 。

      3) eMBErrorCode eMBPoll( void )
      用户必须在主循环中调用此方法。 对于使用操作系统的应用程序,应另设一项任务,以使操作系统能够按周期调用此功能。

      初始化及运行

      FreeModbus 以信件队列协议为基础。 协议协议通过检测相应信息来履行相关功能。 协议仓库的初始化和运行程序以信件队列协议为基础,符合以下适当程序。 协议仓库的初始化和运行程序通过检测相应信息来履行相关功能。 协议仓库的初始化和运行程序如下:
      1) 物理层设备通过首先执行 EMBErrorCode EMBInit (EMBMode eMode, Uchar ucSlaveAddress, Uchar ucport, ULONG ulBaudRate, eMBPPeity ePeparity) 启动:
      BOOL xMB 港口航空(UCHAR ucport, ULONG ulBaudRate, UUHAR ucDataBit, eMBPeparity ePeparity) 启动并确定港口费率、数据位置计数和核实方法; BOOL xMB PortTimesInit (USHORT us Tim1 Tymrout50us) 启动T35 固定所需的定时器常数 。
      2) (可选择) eMBErrorCode emMBSetSlaveID (Uchar ucSlaveID, BOOL xIsRunning, Uchar Const * 出版物, USHORT us AllitiveLen) 指定设备代号 。
      3) 调用 EMBErrorCode eMBEnalable( 无效) 以使其能够, 主要是: 状态 pvMBFrameStart pvMBFrame StartCur( 函数指针), 启动 eRcv State 到STate_ RX_ INIT 状态, 使用无效 vMBP PportSealEnable (BOOL xRxEnable, BOOL xTxEable) 以使其能够接收和接收
      (4) 第一次超时是在T35小时后发生的,在此期间,EV_READY(启动完成)电文被发送到协议仓库,VMB PortTimes Disable () 将 eRcv State 更改为STATE_RX_IDLE.At此点时,协议仓库可以接受序列数据。请注意,这里先插入计时器是因为数据在启动时在序列端口可能已经可访问,所以这里首先插入了计时器。
      主函数现在调用 EMBErrorCode EMBPol( 避免) 来检测事件 。
      6) 如果发生序列接收中断,且 eRcvstate 设为STate_RX_IDLE (4 将 eRcvstate 设为STate_RX_IDLE), 接收的字符将存放在接收缓存中, 且 eRcvstate 设为STate_ RX_RCV 状态, 且无超时计。 当下一个数据出现时, 数据将保存在接收缓存中, 并清除计时器 。
      7) 如果接收尚未完成,则不允许超时。超时中断表明,T35期间没有收到新的序列数据,根据Modbus协议,这促使要求完成数据接收。在中断期间,EV_FRAME_RECEIVED(收到Frame的电文)发送到协议柜台,等待信件处理。
      8) 一旦主要功能通过使用eMBErrorCode eMBPol(撤销)检测事件EV_FRAME_RECEIVED,请国家pEMBramreRevived pMBFramereReceiveCur简单地判断请求框架数据,并将EV_EXECUTE(执行功能)信息发送到协议柜台。
      (9) 当 eMBErrorCode eMBPol( 避免) 检测主函数时, 函数通过查找根据相关请求代码处理该函数的功能指针来处理。 如果它不是广播新闻, 请调用国家 pMBFrameSend pMMFrameSend pMMFRAMESendCur 发送回复。 只需将要返回的数据以这种方法放入链条缓存, 而 eSnd State 设置为STate_ TX_ MIT( 转移者处于中转状态), 并通过使用无效的 vMBportSerio Enable (BOOL xRxEnable, BOL xTxEnable) 停止传输 。
      10) 链条缓存中的数据由电子Snd State发送到STate_TX_XMIT(电子Snd State设于9),传输字符的数量不断统计,EV_FRAME_SENT(发送Frame)信息发送到协议仓库。
      11) 主函数在检测事件 EV_FRAME_SENT 后,不会使用 EMBErrorCode eMBPolll (没有) 来处理此信件 。
      (12) 在序列条目收到数据时,协议柜台将重复6-11处理电文。

      资料来源:
      https://baike.baidu.com/item/freemodbus/7566841?fr=aladdin

      FreeModbus启动程序分析

      在这里插入图片描述
      资料来源:
      http://emb.hqyj.com/Column/7504.html

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/11782.html

          热门文章

          文章分类