portevent.c
#include "mb.h"
#include "mbport.h"
static EventGroupHandle_t xSlaveOsEvent; // 从机事件标志组
/*
******************************************
* @Func : 创建事件标志组 xSlaveOsEvent
******************************************
*/
BOOL xMBPortEventInit( void )
{
xSlaveOsEvent = xEventGroupCreate();
return TRUE;
}
/*
******************************************
* @Func : 为事件标志组置位指定事件
* @eEvent : 指定的事件标志位
******************************************
*/
BOOL xMBPortEventPost( eMBEventType eEvent )
{
xEventGroupSetBits(xSlaveOsEvent, eEvent);
return TRUE;
}
/*
******************************************
* @Func : 获取事件标志组指定事件
* @eEvent : 返回的事件类型
******************************************
*/
BOOL xMBPortEventGet( eMBEventType * eEvent )
{
EventBits_t recvedEvent;
/*
* 阻塞等待EV_READY\EV_FRAME_RECEIVED\EV_EXECUTE\EV_FRAME_SENT
* 任意一个,成功后清除标志位
*/
recvedEvent = xEventGroupWaitBits(xSlaveOsEvent,
EV_READY | EV_FRAME_RECEIVED | EV_EXECUTE | EV_FRAME_SENT,
pdTRUE,
pdFALSE,
portMAX_DELAY);
switch (recvedEvent)
{
case EV_READY:
//就绪
*eEvent = EV_READY;
break;
case EV_FRAME_RECEIVED:
//收到一帧数据
*eEvent = EV_FRAME_RECEIVED;
break;
case EV_EXECUTE:
//执行功能码函数处理数据
*eEvent = EV_EXECUTE;
break;
case EV_FRAME_SENT:
//发送一帧数据
*eEvent = EV_FRAME_SENT;
break;
}
return TRUE;
}
Modbus资料整理
笔者将Modbus 主机、从机协议完整资料整理如下:
文件 | 说明 |
---|---|
freemodbus-v1.6.zip | FreeModbusV1.6源码 |
FreeModbusMasterSlave(Rev1.0.0).zip | 笔者移植好测试通过STM32+FreeRTOS+FreeModbus Master Slave代码 |
ModbusSlave 7.0和ModbusPoll_7.0软件注册码.zip | FreeModbus Master Slave调试工具 |
FreeModbus V1.6 主机使用说明.md | FreeModbus 主机使用说明文档 |
FreeModbus 从机流程图.vsd | FreeModbus 从机流程图 |
FreeModbus 主机流程图.vsd | FreeModbus 主机流程图 |
Modbus应用协议.doc | 笔者整理的 FreeModbus 协议文档 |
FreeModbus Datasheet | 笔者搜集 FreeModbus 官方协议文档 |