同步操作将从 MageeLow/libiec10x 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
功能简述 : 支持 104 / 平衡101 /非平衡101 的主从站的基本功能
程序语言 : C 语言
语言版本 : C99 标准
应用平台 : linux / 嵌入式
字符编码 : UTF-8
应用概述 : 协议栈基于事件回调,有无操作系统下皆可运行,且为面向对象架构,
一个连接为一条总线,适用于中小型场合(连接数小于250)。协议栈支持 101/104 主从连接并存,
并且每个连接可带不同的链路参数。协议栈对硬件抽象,需要用户提供硬件发送相关函数。协议用标准
C99 编写,理论上可以移植到任何支持 C99 的嵌入式平台(尚未验证)。
下面以 101 规约总线使用为例:
0> 假设已实现硬件层相关的初始化,并编写硬件发送函数 void iec10x_puts(uint8_t * data, int len) ;
1> 初始化一次协议栈 iec10x_protocol_init();并提供 100ms 一次的 iec10x_periodic_handle() 轮询 ;
2> 新建全局/静态总线 iec10x_t bus ; 编写对应的初始化结构体 struct iec101cfg buscfg ;
3> iec10x_bus_init(&bus,101,&cfg,usrinit); 初始化总线,其中 usrinit 为用户层初始化函数
4> bus 接收到一包数据后,无论是否断包,交由 iec10x_recv(&bus,data,len) 处理
其中,60870-5 为 iec10x 协议栈的具体实现,内容大致如下
./60870-5/
|-- 10x
|-- type
|-- iec
|-- iec_file.c
|-- iec_file.h
|-- iec_list.h
|-- iec_sys.h
`-- iec10x.h
其中,
10x 文件夹是协议栈具体的流程实现;
iec 文件夹是协议栈组件,如内存管理等;
type 文件夹定义了规约中常用的数据结构,如 SIQ.h 即单点遥信相关头文件;
iec_list.h 为协议栈中链表的实现;
iec10x.h 是唯一对外提供的 api 头文件,所有供用户使用的接口都在此头文件;
在协议栈的使用上可不去改动以上的内容,除非是需要进行协议栈的拓展。具体的软件设计流程后文详述。
主要移植项为以下文件:
iec_file.c,iec_file.h 是规约文件传输所需要进行移植的相关接口;此处提供了在 linux 下的文件接口。
iec_sys.h 为协议栈基本的配置条目,如配置协议栈是否打印调试信息等;
另外,lesson 中存放了 linux 平台的协议栈具体示例,工程基于 CMake 构建,在对应的文件夹执行 ./build.sh 脚本进行编译。工程文件夹后缀序号代表示例应用程度由简至繁,可作为入门参考。还在更新...
目前 libiec10x 协议栈的所有应用 API 都集成在 iec10x.h 头文件中,在应用上只需要 include
这个头文件即可。
协议栈使用面向对象的设计方法,每一个主从站链接用一个 struct iec10x 表示,此处记为总线,一个 struct iec10x
包含了通讯过程中的中间参数、状态机和通讯参数等信息,在使用时可不关心里面的内容,只需知道协议栈所有的 api 主体
都为此结构体。
/**
* @brief 定时轮询,此函数需要用户实现周期调用一次,建议 100ms / 50ms / 25ms
* @note 此函数的轮询周期也决定了总线的发送频率,即每包的间隔
* @param localtime : 毫秒精度的系统时间戳
* @return don't care
*/
void iec10x_periodic_handle(size_t localtime);
/**
* @brief 总线接收数据并解析
* @param bus : 需要解析的总线结构体
* @param data : 包数据
* @param len : 包数据长度
* @return don't care
*/
void iec10x_recv(iec10x_t * bus , uint8_t * data , int len);
/**
* @brief 用户设备接口管理注册
* @param bus : 目标总线
* @param type : 当前数据接口的类型
* @param statfn : 信息结构体状态获取接口
* @param getfn : 信息体结构体内容获取接口
* @param profn : 信息体结构体内容处理接口
* @return 成功返回 0 ,否则返回其他
*/
int iec10x_devif_register(
iec10x_t * bus ,
unsigned char type ,
dev_statfn_t statfn ,
dev_getfn_t getfn ,
dev_profn_t profn ) ;
/// 下次更,下次一定
/// 有空再更,下次,下次一定
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。