精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Agile Modbus簡易從機接入實踐說明

冬至子 ? 來源:Cfly ? 作者:Cfly ? 2023-07-22 11:52 ? 次閱讀

說明

Agile Modbus 提供了 agile_modbus_slave_callback_t 的一種實現方式,使用戶能夠簡單方便接入。

使用示例可查看 examples/slave。

使用方式:

#include "agile_modbus.h"
#include "agile_modbus_slave_util.h"
const agile_modbus_slave_util_t slave_util = {
/* User implementation */
};
agile_modbus_slave_handle(ctx, read_len, 0, agile_modbus_slave_util_callback, &slave_util, NULL);
agile_modbus_slave_util_callback 介紹

Agile Modbus 提供的一種 agile_modbus_slave_callback_t 實現方式,需要 agile_modbus_slave_util_t 類型變量指針作為私有數據。

私有數據為 NULL,所有功能碼都能響應且為成功,但寄存器數據依然為 0。

agile_modbus_slave_util_t 介紹

typedef struct agile_modbus_slave_util {
const agile_modbus_slave_util_map_t *tab_bits; / *< 線圈寄存器定義數組 /
int nb_bits; /
< 線圈寄存器定義數組數目 */
const agile_modbus_slave_util_map_t *tab_input_bits; / *< 離散量輸入寄存器定義數組 /
int nb_input_bits; /
< 離散量輸入寄存器定義數組數目 */
const agile_modbus_slave_util_map_t *tab_registers; / *< 保持寄存器定義數組 /
int nb_registers; /
< 保持寄存器定義數組數目 */
const agile_modbus_slave_util_map_t *tab_input_registers; / *< 輸入寄存器定義數組 /
int nb_input_registers; /
< 輸入寄存器定義數組數目 */
int (*addr_check)(agile_modbus_t *ctx, struct agile_modbus_slave_info *slave_info); / < 地址檢查接口 */
int (*special_function)(agile_modbus_t ctx, struct agile_modbus_slave_info slave_info); / < 特殊功能碼處理接口 */
int (*done)(agile_modbus_t *ctx, struct agile_modbus_slave_info *slave_info, int ret); /
< 處理結束接口 */
} agile_modbus_slave_util_t;

寄存器相關

用戶需要實現 bits、input_bits、registers、input_registers 定義。如果某個寄存器定義為 NULL,該寄存器對應的功能碼能響應且為成功,但寄存器數據都為 0。

接口調用過程

1.jpg

agile_modbus_slave_util_map 介紹

typedef struct agile_modbus_slave_util_map {
int start_addr; / *< 起始地址 /
int end_addr; /
< 結束地址 */
int (*get)(void *buf, int bufsz); / **< 獲取寄存器數據接口 */
int (set)(int index, int len, void buf, int bufsz); / < 設置寄存器數據接口 */
} agile_modbus_slave_util_map_t;

注意事項:

起始地址和結束地址決定的寄存器個數有限制。更改函數內部 map_buf 數組大小可使其變大。

bit 寄存器 < 250

register 寄存器 < 125

接口函數為 NULL,寄存器對應的功能碼能響應且為成功。

get 接口

將地址域內的數據全部拷貝到 buf 中。

set 接口

index: 地址域內的偏移

len: 長度

根據 index 和 len 修改數據。

示例
以 01 功能碼為例:

#include
#include
#include "agile_modbus.h"
#include "agile_modbus_slave_util.h"
static uint8_t _tab_bits[10] = {0, 1, 0, 1, 0, 1, 0, 1, 0, 1};
static int get_map_buf(void *buf, int bufsz)
{
uint8_t *ptr = (uint8_t *)buf;
pthread_mutex_lock(&slave_mtx);
for (int i = 0; i < sizeof(_tab_bits); i++) {
ptr[i] = _tab_bits[i];
}
pthread_mutex_unlock(&slave_mtx);
return 0;
}
static int set_map_buf(int index, int len, void *buf, int bufsz)
{
uint8_t *ptr = (uint8_t *)buf;
pthread_mutex_lock(&slave_mtx);
for (int i = 0; i < len; i++) {
_tab_bits[index + i] = ptr[index + i];
}
pthread_mutex_unlock(&slave_mtx);
return 0;
}
const agile_modbus_slave_util_map_t bit_maps[1] = {
{0x041A, 0x0423, get_map_buf, set_map_buf}};

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5325

    瀏覽量

    120036
  • Agile
    +關注

    關注

    0

    文章

    8

    瀏覽量

    6798
  • ModBus通信
    +關注

    關注

    0

    文章

    32

    瀏覽量

    2550
收藏 人收藏

    評論

    相關推薦

    agile_modbus移植例程分享

    最近項目使用了rtt,公司原有的modbus功能有些不完整,查了下發現agile_modbus挺適合現在的我,于是根據手冊和例程進行了移植,基本實現了需要的功能,我的控制器是f103的,串口2做主
    發表于 07-14 10:00

    agile_modbus遇到一個rtu主機要求crc16值要swap時如何處理呢

    agile_modbus是支持多主機的,但遇到一個rtu主機要求crc16值要swap時如何處理?遇到modbus的主機要求CRC16值要SWAP時該如何處理呢?
    發表于 08-02 10:40

    分享一種Agile Modbus簡易接入接口實現方式

    說明Agile Modbus 提供了 agile_modbus_slave_callback_t 的一種實現方式,使用戶能夠簡單方便接入。使
    發表于 08-03 10:47

    使用agile_modbus接收不到數據是怎么回事

    是這樣的,我使用RTT Studio基于STM32F407芯片開發。在使用agile_modbus時,發現數據可以定時發出。但是接收不到數據(使用串口調試助手定時發送數據過來(01 03 02 00
    發表于 08-22 12:17

    如何打開并且使用agile_telnet呢

    1、介紹2.0開始agile_telnet作為agile_console的插件使用。如果只想使用telnet作為console設備,請訪問v1.0.0。1.1 目錄結構名稱說明inc
    發表于 08-24 15:27

    基于RT-Thread實現的Agile Modbus協議棧

    直接使用。  由于其使用純 C 開發、不涉及硬件,完全可以在串口上跑 tcp 協議,在網絡上跑 rtu 協議。  支持符合 modbus 格式的自定義協議。  同時支持多主機和多。  使用簡單,只需要將 rtu 或 tcp
    發表于 10-08 15:04

    agile_modbus V1.1.2讀取48個寄存器時跑飛請問是我哪里沒有操作好嗎

    各位前輩好。使用agile_modbus V1.1.2版本。V1.1.1使用一直沒有問題。1.1.2的時候,修改registers.c,數量為128個。modbus——poll讀取47個時候沒有問題,48個的時候就跑飛了。請問是我哪里沒有操作好嗎?
    發表于 11-01 11:10

    RT-Thread中Agile Modbus軟件包的使用

    _rtu_init / agile_modbus_tcp_init 初始化 RTU/TCP 環境  * 2.agile_modbus_set_slave 設置地址  * 3.清空接
    發表于 02-10 16:46

    使用agile_modbus主機協議棧出現丟包是怎么回事?

    使用agile_modbus主機協議棧,接10個,測試發現從接的越多,丟包率越高。實際測試10個
    發表于 09-03 14:38

    MODBUS轉profibus網關接入profibus的總線案例

    一篇簡易Modbus轉Profibus網關 將ABB?ACS530變頻器接入Profibus總線案例 本案例控制的主要對象是污水處理廠控制抽水泵的變頻器參數的顯示與報警。系統主PLC選用西門子
    的頭像 發表于 10-29 10:14 ?1813次閱讀
    <b class='flag-5'>MODBUS</b>轉profibus網關<b class='flag-5'>接入</b>profibus的總線案例

    《電子DIY》之《單片實踐項目》之基于單片簡易數字秒表的設計(Proteus仿真與實物制作)

    《單片實踐項目》之基于單片簡易數字秒表的設計(八十二)鏈接:添加鏈接描述
    發表于 11-12 20:21 ?20次下載
    《電子DIY》之《單片<b class='flag-5'>機</b><b class='flag-5'>實踐</b>項目》之基于單片<b class='flag-5'>機</b>的<b class='flag-5'>簡易</b>數字秒表的設計(Proteus仿真與實物制作)

    MODBUS移植STM32,STM32做

    本文章實現MODBUS通信,并配置STM32做的功能。
    發表于 12-24 19:06 ?91次下載
    <b class='flag-5'>MODBUS</b>移植STM32,STM32做<b class='flag-5'>從</b><b class='flag-5'>機</b>

    agile_modbus例程分享

    最近項目使用了rtt,公司原有的modbus功能有些不完整,查了下發現agile_modbus挺適合現在的我,于是根據手冊和例程進行了移植,基本實現了需要的功能
    的頭像 發表于 07-19 15:10 ?1893次閱讀
    <b class='flag-5'>agile_modbus</b>例程分享

    【技術分享】如何實現建裝備接入基于Modbus的傳感信號

    重工機械車總線系統通常走CAN總線,作為綜合復雜的控制系統,往往需要將Modbus傳感器信號接入系統,今天就來分享如何將行業常見Modbus
    的頭像 發表于 08-04 11:55 ?492次閱讀
    【技術分享】如何實現建<b class='flag-5'>機</b>裝備<b class='flag-5'>接入</b>基于<b class='flag-5'>Modbus</b>的傳感信號

    如何實現建裝備接入基于Modbus的傳感信號

    重工機械車總線系統通常走CAN總線,作為綜合復雜的控制系統,往往需要將Modbus傳感器信號接入系統,今天就來分享如何將行業常見Modbus
    的頭像 發表于 08-05 08:28 ?663次閱讀
    如何實現建<b class='flag-5'>機</b>裝備<b class='flag-5'>接入</b>基于<b class='flag-5'>Modbus</b>的傳感信號