# MF_Modbus **Repository Path**: Actor_V/mf_modbus ## Basic Information - **Project Name**: MF_Modbus - **Description**: modbus库,当前仅主机模式 - **Primary Language**: C - **License**: MIT - **Default Branch**: V1.0 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2022-05-26 - **Last Updated**: 2024-10-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: modbus ## README # mf_modbus ## 1.modbus主机 **目前仅实现主机部分,从机部分有时间再做。** **实现功能:** 1. **03功能码发送。** > 03读寄存器功能码,使用周期事件查询方式,需要在初始化部分添加所有需要查询的寄存器。详细API先查看mf_mbevent.c文件。 2. **04功能码发送。** > 同03功能码。 3. **06功能码发送。** > 06写寄存器功能码,使用事件实时添加方式,发送完成后自动销毁,下次发送需要重新添加事件,发送优先级固定比查询事件的优先级高。 4. **应答接收** > 应答接收使用虚函数,需要用户重写,或者直接使用mf_mbport.c文件,建议重写。 ## 2.案例 1. **初始化,添加任务调度,添加时钟** ``` #include "mf_mb.h" //引用头文件 void main(void) { mf_mb_init(); //初始化 while(1) { mf_mb_handle(); //任务调度 } } void time_IRQhandler(void)//定时器1ms中断回调 { mf_time_tick_inc(); } ``` 2. **添加需要循环读取寄存器的事件** ``` #include "mf_mb.h" //初始化读取事件 void mf_mb_event_read_init(void) //虚函数重写 { //0x01:MODBUS从机ID; //MF_MB_EVENT_FUNC_03:03功能码(详情查看mf_mbevent.h); //Register:起始寄存器地址; //length:要查询的寄存器个数。 mf_mb_event_read_add(0x01,MF_MB_EVENT_FUNC_03,Register,length); //添加读取的寄存器事件 mf_mb_event_read_add(0x01,MF_MB_EVENT_FUNC_03,Register,length); mf_mb_event_read_add(0x01,MF_MB_EVENT_FUNC_03,Register,length); ... } ``` 3. **添加修改寄存器事件** ``` #include "mf_mb.h" void add_event(uint16_t *data) { //0x01:MODBUS从机ID; //MF_MB_EVENT_FUNC_06:06功能码(详情查看mf_mbevent.h); //Register:起始寄存器地址; //data:数据内容; //length:要查询的寄存器个数。 mf_mb_event_write_add(0x01,MF_MB_EVENT_FUNC_06,Register,data,length);//添加修改的寄存器事件,*成功发送后,自动销毁此事件* } ```