2024-10-10 14:22
63 次阅读|
0 个评论
01 概述 空气开关,又名空气断路器,是断路器的一种。是一种只要电路中电流超过额定电流就会自动断开的开关。空气开关是低压配电网络和电力拖动系统中非常重要的一种电器,它集控制和多种保护功能于一身。除能完成接触和分断电路外,尚能对电路或电气设备发生的短路、严重过载及欠电压等进行保护,同时也可以用于不频繁地启动电动机。 4G网络无线空气开关是一种结合了现代通信技术的断路器,它通过4G网络实现了无线远程控制功能,使得用户可以通过手机或其他智能设备对电路进行控制,包括开启、关闭以及监控电路的状态。这种空气开关不仅提供了远程控制的便利,还增加了电路的安全性和管理的灵活性。 4G空气开关的主要特点包括: 远程控制:用户可以通过4G网络,随时随地通过手机APP或其他智能设备对电路进行控制,无需近距离操作。 实时监控:能够实时监控电路的状态,包括电流、电压等参数,确保电路安全运行。 故障诊断:通过4G网络传输的数据,可以及时发现电路故障,提前预警,避免事故发生。 多种保护功能:具备短路保护、过载保护、失压保护等多种保护功能,确保电路和设备的安全。 02 4G空气开关功能 当未来某个时刻需要空气开关进行分闸或者合闸,通过手动来控制可以达到目的,但是,可能会遇到操作不及时等问题。因此,空气开关都会提供定时功能,只需要设置好定时,到了时间,空气开关会响应相应的设置动作,合闸或者分闸。延时主要场景是,按照实际需求,需要合闸1小时,2小时等情况。 1 定时 设置一个定时器,定时器定时时间范围1分钟到24小时,超时后会合闸或者分闸 2 延时 设置一个定时器,超时后,会执行延时超时相应动作 03 组件的使用 1 Gitee链接地址 Demo位于amaziot_bloom_os_sdk\sample\libraries\8.4_timer_delay Gitee源码地址:https://gitee.com/ning./hongdou Github源码地址:https://github.com/ayumid/hongdou 编译指令:.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\8.4_timer_delay 2 组件功能介绍 本组件实现空开产品中的定时,和延时功能,并进行相应的后续操作。 定时和延时本质是一样的,服务器提供未来某个时刻或者延时到未来某个时刻,都涉及当前时刻,未来时刻,间隔三个参数,因此实现两种功能使用下面相同的api。服务器不同的参数可以转换后调用本组件的API。 3 代码讲解 1 lib_am_ty_sw_timer_delay_timer_init 功能:该函数用于,初始化定时,延时任务,和相关资源。 参数:无 返回值:无 示例: C lib_am_ty_sw_timer_delay_timer_init(); 2 lib_am_ty_sw_timer_delay_timer_task 功能:该函数用于,定时,延时任务 参数:无 返回值:无 示例: C ret = OSATaskCreate(&lib_am_ty_sw_timer_delay_timer_task_ref, lats_timer_delay_timer_task_stack, LATS_TASK_TIMER_TASK_STACK_SIZE, 120, "timer_delay_timer_task", lib_am_ty_sw_timer_delay_timer_task, NULL); 3 lib_am_ty_sw_timer_refresh 功能:该函数用于,检查数组中的定时,是否超时,需要动作。 参数:无 返回值:无 示例: C lib_am_ty_sw_timer_refresh(); 4 lib_am_ty_sw_timer_delay_timer_cbk 功能:该函数用于,定时器超时回调函数。 参数:无 返回值:无 示例: C OSATimerStart(lib_am_ty_sw_timer_delay_timer_ref, 200, 200, lib_am_ty_sw_timer_delay_timer_cbk, 0); 4 Demo实战 4.1 创建一个Demo 复制8.3_interlocking示例工程,到同一个文件夹下,修改文件名为8.4_timer_delay,如图: 4.2 修改makefile 增加文件组件所在目录头文件路径,和源文件路径,如图: 4.3 增加头文件 使用代码编辑器,将新建的工程文件加入代码编辑器中,打开main.c,修改main.c,加入am.h等头文件,如图: 4.4 修改代码 在Phase2Inits_exit 创建一个任务,如图: 4.5 宏定义介绍 sample_td_uart_printf 输出日志到DEBUG 串口,日志比较少,可以输出到这个串口,如果日志比较多,需要输出到usb口,以免不必要的问题出现 sample_td_catstudio_printf 输出日志到USB 串口,使用catstudio查看,catstudio查看日志需要更新对应版本mdb.txt文件,软件打开filtter过滤日志,只查看用户输出的日志 SAMPLE_TD_TASK_STACK_SIZE 栈空间宏定义 4.6 全局变量介绍 sample_td_task_stack 任务栈空间,本例使用数组实现,用户在做项目时,可以预先估算下当先任务需要的大致栈空间,OS没有提供可以查看栈空间使用情况的API sample_td_task_ref 任务指针 4.7 函数介绍 Phase1Inits_enter 底层初始化,本例空 Phase1Inits_exit 底层初始化,本例空 Phase2Inits_enter 底层初始化,本例空 Phase2Inits_exit 创建主任务,初始化消息队列,定时器,任务等。 代码片段: C int ret; ret = OSATaskCreate(&sample_td_task_ref, sample_td_task_stack, SAMPLE_TD_TASK_STACK_SIZE, 120, "sample_td_task", sample_td_task, NULL); ASSERT(ret == OS_SUCCESS); sample_td_uart_printf("Phase2Inits_exit\n"); td_wait_network_ready 驻网等待,定时器需要联网获取时间后才可以开始。 代码片段: C static void td_wait_network_ready(void) { int count = 0; int ready = 0; while (!ready) { if (getCeregReady(isMasterSim0() ? IND_REQ_HANDLE : IND_REQ_HANDLE_1)) { ready = 1; } sample_td_uart_printf("wait_network_ready: %d s", count++); 300) PM812_SW_RESET(); OSATaskSleep(200); } } td_open 打开某一路的输出。 代码片段: C static void td_open(UINT8 channel, UINT8 type) { sample_td_uart_printf("channel %d %d open", channel, type); } td_close 关闭某一路的输出。 代码片段: C static void td_close(UINT8 channel, UINT8 type) { sample_td_uart_printf("channel %d %d close", channel, type); } sample_td_task 延时测试主任务,定义了三个延时,10,30s,60s。 代码片段: C static void sample_td_task(void *ptr) { UINT32 timestamp = 0; //等待网络连接 td_wait_network_ready(); //根据当前时间,设置,10s,30s,1分钟三个定时器 //服务器下发未来的某个时刻,可以将下发的时刻改为时间戳赋值即可 timestamp = utils_utc8_2_timestamp(); sample_td_uart_printf("%s(%d) now:%ld", __FUNCTION__, __LINE__, timestamp); am_ty_sw_td .timestamp = timestamp + 10; am_ty_sw_td .id = 1; am_ty_sw_td .chl = 1; am_ty_sw_td .t = 1; am_ty_sw_td .open = &td_open; am_ty_sw_td .timestamp = timestamp + 30; am_ty_sw_td .id = 2; am_ty_sw_td .chl = 1; am_ty_sw_td .t = 0; am_ty_sw_td .open = &td_close; am_ty_sw_td .timestamp = timestamp + 60; am_ty_sw_td .id = 3; am_ty_sw_td .chl = 1; am_ty_sw_td .t = 1; am_ty_sw_td .open = &td_open; //初始化定时器任务和资源 lib_am_ty_sw_timer_delay_timer_init(); while(1) { sample_td_sleep(1); } } 4.8 编译 在SDK根目录打开命令行,输入命令.\build.bat -l .\amaziot_bloom_os_sdk\sample\libraries\8.4_timer_delay\ 4.9 生成固件 参考入门中开发工具,生成工具。 4.10 测试 测试步骤: 参考编译教程,和文档开头的编译指令,进行编译 按照编译教程选择对应的选项 烧录 4.11 固件 上电后,debug串口会打印出延时后对应响应,用户可以按照自己的业务逻辑处理; 本文章源自奇迹物联开源的物联网应用知识库Cellular IoT Wiki,更多技术干货欢迎关注收藏Wiki: Cellular IoT Wiki 知识库(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf) 注:本文部分内容来源于网络,如有侵权,请及时联系我们。