智能家居系统方案设计大学论文Word格式.docx
- 文档编号:20636374
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:58
- 大小:391.86KB
智能家居系统方案设计大学论文Word格式.docx
《智能家居系统方案设计大学论文Word格式.docx》由会员分享,可在线阅读,更多相关《智能家居系统方案设计大学论文Word格式.docx(58页珍藏版)》请在冰豆网上搜索。
add_dev
添加入网设备
del_dev
删除链表中设备
init_dev_policy_table
按照设备类新初始化策略表
update_dev_policy_table
按照各个设备类型,更新链表中的各个设备策略表
get_dev_policy_table_size
按照设备节点的类型返回对应设备类型的策略表大小
策略管理(policy.c)
tempmon_policy_table_init
初始化温度计类型设备的策略表。
tempmon_policy_table_set_warn
根据参数传过来的状态设置设备报警状态。
tempmon_policy_table_update
调用底层设备控制取得当前设备状态更新对应设备的策略表。
设备底层操作接口(devctl.c)
tempmon_get_dev_stat
取得温度计设备状态
tempmon_get_cur_temp
取得温度计设备温度
tempmon_set_hi_level
设置温度计最高报警温度
tempmon_set_low_levl
设置温度计最低报警温度
用户认证(auth.c)
auth_user
根据传来的用户名和密码,返回验证结果
change_pass
根据传来的用户名和密码,更改密码文件里对应项目。
)
del_pass
根据传来的用户名,删除密码文件中的对应用户行
add_user
根据传来的参数,在密码文件中加入对应用户行
配置文件处理(parm.c)
load_parm
解析器的前端,根据解析器的结果,抛出对应得错误。
do_paser
根据传进来的文件描述符,将文件中相应的参数解析到参数结构体。
save_parm
将参数结构体按照对应格式写入配置文件。
getnline
从文件中取得最大长度为n一行,并将回车翻译为字符串结尾符
trim
刨去传入字符串开头和结尾的空格和tab
配置文件参数处理(parm_handler.c)
temp_hi_level
设置参数结构体的temp_hi_level参数
temp_low_level
设置参数结构体的temp_low_level参数
带头节点的双向链表(list.c)移植自linux内核
list_add_node
插入节点
list_del_node
删除节点
is_empty_list
判断链表是否为空
is_last_node
判断是否为最后一个节点
offsetof宏
取得结构体元素相对于结构体开始的偏移量
container_of宏
通过结构体元素的指针取得结构体的指针
循环缓冲区(loop_buf.c)移植自linux内核
min宏
返回两个数中的最小值
init_loop_buf
初始化循环缓冲区
release_loop_buf
释放循环缓冲区里的线程锁
get_loop_buf
从循环缓冲区中获取数据
put_loop_buf
向循环缓冲区中放置数据
lock_buf
循环缓冲区线程锁加锁
unlock_buf
循环缓冲区中线程锁解锁
loop_buf_reset
循环缓冲区指针复位
loop_buf_len
返回循环缓冲区剩余长度
串口设备层操作(uart.c)
init_uart
调用底层串口库初始化串口
com_monitor
串口监视线程,负责监视并接受串口上数据。
pre_frame_proces
对串口接受数据预处理,调用相应的操作函数
read_uart_one_frame
从串口读取完整一桢
read_uart_buf
从缓冲区读取数据,没有数据则休眠等待下次信号唤醒。
串口操作库(uart.c)
open_uart
打开相应串口设备文件
read_uart
读取串口数据。
write_uart
将数据写入串口
set_uart_speed
设置串口工作速度
set_uart_parity
设置串口的工作特性,例如停止位奇偶流控等。
read_uart_timeout
带有超时的串口读取操作处理。
UI通信(commui.c)
init_commui
初始化ui通信各个参数。
commui_monitor
套接字监视线程,监视套接字是否有命令数据到来。
get_cmd_line
从描述符中取得一行命令行
warn_ui
向ui发起报警
命令处理程序(cmd.c)
run_cmd
命令解析器,调用对应命令的处理程序。
error
根据错误码,将返回对应得错误信息。
命令处理程序handler(cmd_handler.c)
xxx_comand_handler
对应各个命令的处理程序。
门禁控制模块
ReadWiegand
读取用户卡信息
SendWiegand
发送用户卡信息
SendCmd
发送控制指令
家居控制系统和环境探测模块
GetTem
采集环境信息
SendTem
封包发送采集数据
RecTem
解析采集数据信息
SendLedData
发送led显示数据
GetTemFromCD
Led模块收取并解析温度数据
DisplayTem
发送并显示信息
OpenLamp
打开继电器
CloseLamp
关闭继电器
2.2模块关系图
3.设备管理系统的模块设计
功能描述
接口与属性
voidinit_dev(void);
数据结构
与算法
structdev{
pthread_mutex_lockmutex;
unsignedintnr_dev;
structlistlist;
};
补充说明
包含设备编号和链表的线程锁
向设备链表中添加设备节点
intadd_dev(chardev_type,chardev_no,char*ieee_addr);
structdev_node{
chardev_type;
chardev_no;
charieee_addr[8];
charalive;
charfailed;
void*policy_table;
根据传来的设备类型设备号及IEEE地址,分配新的设备节点,并填写相应的项目然后调用
从设备链表中删除设备节点
intdel_dev(chardev_type,chardev_no);
初始化设备策略表
voidinit_dev_policy_table(structdev_node*node);
同上
renew_dev_policy_table
将全局参数表的参数对应节点的参数刷新到设备的策略表里
voidrenew_dev_policy_table(structdev_node*node)
renew_all_dev_policy_table
将全局参数表的参数刷新到所有设备的策略表里
voidrenew_all_dev_policy_table(structdev_node*node)
通过调用设备控制层相关方法,取得设备对应状态,更新相应策略表
voidupdate_dev_policy_table(structdev_node*node)
update_all_dev_policy_table
更新所有设备策略表
voidupdate_all_dev_policy_table(structdev_node*node);
check_dev_type
检查设备类型是否合法
intcheck_dev_type(unsignedchardev_type)
is_dev_exist
检查设备是否存在
intis_dev_exist(unsignedchardev_type,unsignedchardev_no)
get_dev_node
根据设备类型和设备号返回设备节点指针
structdev_node*get_dev_node(unsignedchardev_type,unsignedchardev_no)
4.策略管理模块设计
温度计策略表初始化
voidtempmon_policy_table_init(structdev_node*node);
数据结构与算法
struct__dev_table{
unsignedchardev_type;
void(*policy_table_init)(structdev_node*);
void(*policy_table_load_parm)(structdev_node*);
void(*policy_table_update)(structdev_node*);
void(*policy_table_warn)(structdev_node*,char);
void(*parm_table_save)(structdev_parm*,FILE*fp);
structtempmon_policy{
charhi_level;
charlow_level;
charcur_temp;
chartemp_warn;
为设备节点钟的策略表指针分配内存,并使用参数表中的值初始化对应得设备。
调用设备层温度计操作函数,更新温度计温度策略表
voidtempmon_policy_table_update(structdev_node*node);
根据传来的参数,设置对应温度计设备的报警状态
voidtempmon_policy_table_set_warn(structdev_node*node,charstat);
tempmon_policy_table_load_parm
将温度计参数表中的值填入策略表里
voidtempmon_policy_table_load_parm(structdev_node*node)
tempmon_policy_table_load_default_parm
将温度计默认的参数填入策略表里
5.设备底层操作接口模块设计
chartempmon_get_dev_stat(structdev_node*node);
调用取得温度计温度判断是否有返回值,判断设备是否仍然有响应,如果设备没有响应,则将设备节点中的设备状态标记为设备已死并调用failed_dev_ctl使设备节点操作失败次数加1(考虑到网络延迟等情况,采用设备操作失败计数,当累计到操作失败到指定次数,则会调用del_dev将设备从设备链表中删除。
而任何一次成功的设备操作则判定设备再次有响应,失败计数被清零)。
取得温度计当前温度
chartempmon_get_cur_temp(structdev_node*node);
structgen_frame{
unsignedcharhead1;
unsignedcharhead2;
//always0x550xAA
unsignedchartype;
//frametypeWARN
unsignedcharlen;
//framelen
//devicetype
unsignedchardev_no;
//deviceno
charstatus;
按照协议,组装好设备的查询数据包,从串口发出,并等待串口回应。
设置当前温度计最高报警温度
chartempmon_set_hi_level(structdev_node*node,charhigh_level);
structcon_frame{
unsignedcharcon_cmd;
charcon_value;
按照协议,组装好设备的控制数据包,从串口发出,并调用取得设备温度,刷新设备状态。
tempmon_set_low_level
设置当前温度计最低报警温度
chartempmon_set_low_level(structdev_node*node,charhigh_level);
其他设备以此类类推。
5.用户认证模块设计
根据传来的用户名和密码返回验证结果
charauth_user(char*name,char*pass);
根据传来的用户名和密码将用户添加到密码文件中
charadd_user(char*name,char*pass);
del_user
根据传来的用户名将用户从密码文件中删除
chardel_user(char*name);
注意此处仅作用户存在性检查不做用户检查,用户检查应该由UI发命令使用auth_user检查通过后再来调用此函数。
功能性模块尽可能在自己被调用时提供方法而不是策略。
根据传来的用户名和密码将用户从密码文件中修改对应的记录
charchange_pass(char*name,char*pass);
注意事项同上。
用户配置文件格式为用户名和密码定长不足定长使用空格补足,分隔符为:
防止频繁修改文件大小,加剧NandFland的读写。
6.配置文件处理模块设计
Load_parm
解析器的前端,根据解析器的结果,抛出对应得错误
intload_parm(char*fname)
do_parser
解析器主体,根据传进来的文件指针,将文件中相应的参数解析到全局参数表。
intdo_parser(FILE*fp);
structtemp_parm{
inttemp_hi_level;
inttemp_low_level;
unionparm{
structtemp_parmtemp_parm;
structdev_parm{
unionparmparm;
structparm_table{
unsignedintnr_parm;
structdev_parmdev_parm[NR_MAX_PARM];
structparm_action{
charname[MAX_PARM_NAME_LEN];
void(*func)(structdev_parm*,char*);
示例:
structparm_actionparm_action[PARM_ACTION_LEN]={
{"
dev_type"
load_dev_type},
dev_no"
load_dev_no},
temp_hi_level"
load_temp_hi_level},
temp_low_level"
load_temp_low_level},
根据传进来的文件名,将全局参数表存储到配置文件中。
intsave_parm(char*fname);
get_dev_parm
根据传来的设备类型和设备号,返回对应设备的参数指针
structdev_parm*get_dev_parm(chardev_type,chardev_no);
根据传进来的文件指针,从中取得一行,此行最大长度为count。
size_tgetnline(char*buf,size_tcount,FILE*fp);
会将行尾的回车符替换为字符串结束的尾零,并且遇到EOF时停止。
返回值为实际取得的字符数(含尾零/回车)。
将传进来的字符串头尾的空格以及制表符砍去,然后将结果复制到dst。
char*trim(char*dst,constchar*src);
各个参数的handler:
load_dev_type
将设备类型填入到传入的dev_parm。
voidload_dev_type(structdev_parm*dev_parm,char*value);
load_dev_no
将设备号
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能家居 系统 方案设计 大学 论文