色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

說明

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

使用示例可查看 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 實現(xiàn)方式,需要 agile_modbus_slave_util_t 類型變量指針作為私有數(shù)據(jù)。

私有數(shù)據(jù)為 NULL,所有功能碼都能響應(yīng)且為成功,但寄存器數(shù)據(jù)依然為 0。

agile_modbus_slave_util_t 介紹

typedef struct agile_modbus_slave_util {
const agile_modbus_slave_util_map_t *tab_bits; / *< 線圈寄存器定義數(shù)組 /
int nb_bits; /
< 線圈寄存器定義數(shù)組數(shù)目 */
const agile_modbus_slave_util_map_t *tab_input_bits; / *< 離散量輸入寄存器定義數(shù)組 /
int nb_input_bits; /
< 離散量輸入寄存器定義數(shù)組數(shù)目 */
const agile_modbus_slave_util_map_t *tab_registers; / *< 保持寄存器定義數(shù)組 /
int nb_registers; /
< 保持寄存器定義數(shù)組數(shù)目 */
const agile_modbus_slave_util_map_t *tab_input_registers; / *< 輸入寄存器定義數(shù)組 /
int nb_input_registers; /
< 輸入寄存器定義數(shù)組數(shù)目 */
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); /
< 處理結(jié)束接口 */
} agile_modbus_slave_util_t;

寄存器相關(guān)

用戶需要實現(xiàn) bits、input_bits、registers、input_registers 定義。如果某個寄存器定義為 NULL,該寄存器對應(yīng)的功能碼能響應(yīng)且為成功,但寄存器數(shù)據(jù)都為 0。

接口調(diào)用過程

1.jpg

agile_modbus_slave_util_map 介紹

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

注意事項:

起始地址和結(jié)束地址決定的寄存器個數(shù)有限制。更改函數(shù)內(nèi)部 map_buf 數(shù)組大小可使其變大。

bit 寄存器 < 250

register 寄存器 < 125

接口函數(shù)為 NULL,寄存器對應(yīng)的功能碼能響應(yīng)且為成功。

get 接口

將地址域內(nèi)的數(shù)據(jù)全部拷貝到 buf 中。

set 接口

index: 地址域內(nèi)的偏移

len: 長度

根據(jù) index 和 len 修改數(shù)據(jù)。

示例
以 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}};

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5342

    瀏覽量

    120319
  • Agile
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    6805
  • ModBus通信
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    2558
收藏 人收藏

    評論

    相關(guān)推薦

    agile_modbus移植例程分享

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

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

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

    分享一種Agile Modbus簡易接入接口實現(xiàn)方式

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

    使用agile_modbus接收不到數(shù)據(jù)是怎么回事

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

    如何打開并且使用agile_telnet呢

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

    基于RT-Thread實現(xiàn)的Agile Modbus協(xié)議棧

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

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

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

    【HD-G2UL-EVM開發(fā)板體驗】Modbus通訊之Modbus實現(xiàn)

    說明在上一篇文章中已經(jīng)使用libmodbus庫實現(xiàn)了Modbus的主機并實現(xiàn)了與Modbus Slave)的通訊。詳見帖子:https
    發(fā)表于 01-16 17:12

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

    _rtu_init / agile_modbus_tcp_init 初始化 RTU/TCP 環(huán)境  * 2.agile_modbus_set_slave 設(shè)置地址  * 3.清空接
    發(fā)表于 02-10 16:46

    使用agile_modbus主機協(xié)議棧出現(xiàn)丟包是怎么回事?

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

    MODBUS轉(zhuǎn)profibus網(wǎng)關(guān)接入profibus的總線案例

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

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

    《單片實踐項目》之基于單片簡易數(shù)字秒表的設(shè)計(八十二)鏈接:添加鏈接描述
    發(fā)表于 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>數(shù)字秒表的設(shè)計(Proteus仿真與實物制作)

    agile_modbus例程分享

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

    【技術(shù)分享】如何實現(xiàn)建裝備接入基于Modbus的傳感信號

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

    如何實現(xiàn)建裝備接入基于Modbus的傳感信號

    重工機械車總線系統(tǒng)通常走CAN總線,作為綜合復(fù)雜的控制系統(tǒng),往往需要將Modbus傳感器信號接入系統(tǒng),今天就來分享如何將行業(yè)常見Modbus
    的頭像 發(fā)表于 08-05 08:28 ?683次閱讀
    如何實現(xiàn)建<b class='flag-5'>機</b>裝備<b class='flag-5'>接入</b>基于<b class='flag-5'>Modbus</b>的傳感信號
    主站蜘蛛池模板: 暖暖直播免费观看韩国| 曼谷av女郎| 精品久久久久久久久免费影院 | 打卡中国各地奋斗第一线| 国产对白精品刺激一区二区| 国产一区二区三区影院 | 欧美色图14p| 双腿打开揉弄高潮H苏安安秦慕深| 亚洲.欧美.中文字幕在线观看| 亚洲色图激情文学| 777午夜精品久久AV蜜臀| 成人国产在线看不卡| 国产午夜免费视频片夜色| 久久这里只有精品视频9| 欧美另类z0z000高清| 午夜在线观看免费完整直播网| 亚洲高清视频网站| 97人人看碰人免费公开视频| 观赏女性排尿| 久久草这在线观看免费| 日本夜夜夜| 一个人在线观看免费中文www| qvod 电影| 蝴蝶中文娱乐| 暖暖视频中国在线观看免费韩国| 污污内射在线观看一区二区少妇 | 9277高清在线观看视频| 国产成人h在线视频| 久久婷婷五月综合色情| 色即是空之甜性涩爱| 怡春院欧美一区二区三区免费| 大香网伊人久久综合观看| 久爱精品亚洲电影午夜| 日本男女动态图| 在线国产三级| 国产成人精品系列在线观看| 狼群资源网中文字幕| 玩两个少妇女邻居| 99久久久久精品国产免费麻豆| 国产麻豆精品人妻无码A片| 嫩草影院一区|