| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418 |
- /*******************************************************************************
- 版权所有:
- 版本号: 1.00
- 文件名: modify.c
- 生成日期: 2019.6.24
- 作者: 邓良基
- 功能说明:定值参数修改定制
- 修改日志:
- 日志1:
- 修改者:
- 修改日期:
- 修改内容:
- 修改原因:
- ****************************************************************************/
- #include "head.h"
- #define MODIFY_DIR "/tmp/"
- extern void get_set_value(char *str,const TSETTABLE *pTable,float value);
- #if 0
- void updateModifyFile(void)
- {
- }
- void creatModifyFile(void)
- {
- struct file * pfile;
- loff_t pos;
- char tmpstr[256];
- char valstr[24];
- char *p=tmpstr;
- int i;
- u8 setgroup[GROUP_NUM];
- // 创建描述文件
- pfile = rt_file_open("/tmp/setdata_file.csv",O_CREAT|O_RDWR|O_TRUNC,0);
- if(IS_ERR(pfile))
- {
- return ;
- }
- pos = 0;
- if(!ReadEppData(EEP_SETGROUP_ADDR,setgroup,GROUP_NUM))
- {
- GetDefSetGroup(setgroup);
- }
-
- #ifdef PUB_SET_SECTION
- if(!ReadPara((void*)&m_SetBuf,EEP_PUB_ADDR+(PUB_SETSIZE*m_runsection),PUB_SET_NUMBER,&tPubSetTable[0]))
- {
- GetDefPara((void*)&m_SetBuf,PUB_SET_NUMBER,&tPubSetTable[0]);
- }
- #else
- /*读取压板定值*/
- if(!ReadPara((void*)m_SetBuf,EEP_PUB_ADDR,PUB_SET_NUMBER,&tPubSetTable[0]))
- {
- GetDefPara((void*)m_SetBuf,PUB_SET_NUMBER,&tPubSetTable[0]);
- }
- #endif
-
- sprintf(p,"TYPE,ID, 定值名称 ,UI显示,当前值,单位,最大值,最小值,转发点表\r\n",tPubSetTable[i].szName);
- rt_file_write(pfile,p,strlen(p),&pos);
- for(i=0;i<PUB_SET_NUMBER;i++)
- {
- //if((tPubSetTable[i].group==0||setgroup[tPubSetTable[i].group-1])) // 定值分类组为0 或显示定制为1
- {
- if(tPubSetTable[i].wType==SETTYPE_LABEL)
- {
- sprintf(p,"%d,%d,%s,\r\n",tPubSetTable[i].wType,i+1,tPubSetTable[i].szName);
- }
- else
- {
- get_set_value(valstr,&tPubSetTable[i],m_SetBuf[i].ff);
- sprintf(p,"%d,%d,%s,1,%s,%s,%f,%f,0x%04X\r\n",tPubSetTable[i].wType,i+1,tPubSetTable[i].szName,valstr,
- SetUints[tPubSetTable[i].wUnit],
- tPubSetTable[i].fMax,
- tPubSetTable[i].fMin,
- tPubSetTable[i].ParId
- );
- }
- rt_file_write(pfile,p,strlen(p),&pos);
- }
- }
- if(!ReadPara((void*)m_SetBuf,EEP_SET_ADDR+SETSIZE*(m_runsection),SW_SET_NUMBER,&tSwSetTable[0]))
- {
- GetDefPara((void*)m_SetBuf,SW_SET_NUMBER,&tSwSetTable[0]);
- }
- for(i=0;i<SW_SET_NUMBER;i++)
- {
- //if((tSwSetTable[i].group==0||setgroup[tSwSetTable[i].group-1])) // 定值分类组为0 或显示定制为1
- {
- if(tSwSetTable[i].wType==SETTYPE_LABEL)
- {
- sprintf(p,"%d,%d,%s,\r\n",tSwSetTable[i].wType,i+PUB_SET_NUMBER+1,tSwSetTable[i].szName);
- }
- else
- {
- get_set_value(valstr,&tSwSetTable[i],m_SetBuf[i].ff);
- sprintf(p,"%d,%d,%s,1,%s,%s,%f,%f,0x%04X\r\n",tSwSetTable[i].wType,i+PUB_SET_NUMBER+1,tSwSetTable[i].szName,valstr,
- SetUints[tSwSetTable[i].wUnit],
- tSwSetTable[i].fMax,
- tSwSetTable[i].fMin,
- tSwSetTable[i].ParId
- );
- }
- rt_file_write(pfile,p,strlen(p),&pos);
- }
- }
-
- rt_file_close(pfile,0);
- }
- void initModify(void)
- {
-
- }
- #endif
- /************************************************************************
- 函数名称:getCstValRangeString
- 函数版本:V0.01
- 作 者:
- 创建日期:2021.08.05
- 形参说明:group_type:定值组类别
- index:定值的索引号
- *p_str:缓存生成的字符串首地址
- str_bytes_max:缓存buff最大长度
- 函数说明:获取定值范围字符串文本
- 返 回 值:生成的字符串文本长度
- ************************************************************************/
- static int getCstValRangeString(int group_type,int index,char *p_str,const int str_bytes_max)
- {
- int i;
- int tmp_len,str_len;
- char str[256]={0};
- u32 val_min,val_max;
- const TSETTABLE *p_tmp_val=NULL;
- if(p_str == NULL){
- rt_printf("getSetValueScope函数形参p_str地址为空\r\n");
- return 0;
- }
- switch(group_type){
- case SETGROUP_TYPE_BH:
- p_tmp_val = &tSwSetTable[index];
- break;
- case SETGROUP_TYPE_PUB:
- p_tmp_val = &tPubSetTable[index];
- break;
- case SETGROUP_TYPE_PARA:
- p_tmp_val = &tEquipParaTable[index];
- break;
- case SETGROUP_TYPE_CSTSET:
- p_tmp_val = &tCstSetTable[index];
- break;
- default:
- rt_printf("定值组类型错误!\r\n");
- break;
- }
- if(p_tmp_val == NULL)
- return 0;
- str_len = 0;
- switch(p_tmp_val->wType){
- case SETTYPE_LIST:
- for(i=0; i<p_tmp_val->listnum; i++){
- tmp_len = strlen(p_tmp_val->list[i].str);
- memcpy(&str[str_len],p_tmp_val->list[i].str,tmp_len);
- str_len += tmp_len;
-
- if(i==(p_tmp_val->listnum-1))
- break;
- sprintf(&str[str_len],"、");
- str_len += 2;
- }
- break;
- case SETTYPE_F:
- sprintf(str,"%.3f~%0.3f",p_tmp_val->fMin,p_tmp_val->fMax);
- str_len = strlen(str);
- break;
- case SETTYPE_IP:
- val_min = (u32)p_tmp_val->fMin;
- val_max = 0xffffffff;
- sprintf(str,"%d.%d.%d.%d~%d.%d.%d.%d",(u8)(val_min>>24),(u8)(val_min>>16),(u8)(val_min>>8),(u8)(val_min>>0),(u8)(val_max>>24),(u8)(val_max>>16),(u8)(val_max>>8),(u8)(val_max>>0));
- str_len = strlen(str);
- break;
- case SETTYPE_YMD:
- val_min = (u32)p_tmp_val->fMin;
- val_max = (u32)p_tmp_val->fMax;
- sprintf(str,"%d年%d月%d日~%d年%d月%d日",2000+(u8)(val_min>>16),(u8)(val_min>>8),(u8)(val_min>>0),2000+(u8)(val_max>>16),(u8)(val_max>>8),(u8)(val_max>>0));
- str_len = strlen(str);
- break;
- case SETTYPE_HMS:
- val_min = (u32)p_tmp_val->fMin;
- val_max = (u32)p_tmp_val->fMax;
- sprintf(str,"%d:%d:%d秒~%d:%d:%d秒",(u8)(val_min>>16),(u8)(val_min>>8),(u8)(val_min>>0),(u8)(val_max>>16),(u8)(val_max>>8),(u8)(val_max>>0));
- str_len = strlen(str);
- break;
- case SETTYPE_UINT:
- case SETTYPE_5INT:
- case SETTYPE_LINT:
- case SETTYPE_4INT:
- val_min = (u32)p_tmp_val->fMin;
- val_max = (u32)p_tmp_val->fMax;
- sprintf(str,"%d~%d",val_min,val_max);
- str_len = strlen(str);
- break;
- default:
- rt_printf("非法值数据类型!\r\n");
- return 0;
- }
- if(str_len > str_bytes_max){
- rt_printf("getCstValRangeString_生成的字符串长度超出了缓存buff长度 str_len=%d str_bytes_max=%d\r\n",str_len,str_bytes_max);
- return 0;
- }
- memcpy(p_str,str,str_len);
- return str_len;
- }
- /************************************************************************
- 函数名称:getCstValTypeString
- 函数版本:V0.01
- 作 者:
- 创建日期:2021.08.05
- 形参说明:val_type:定值类型
- *p_str:缓存生成的字符串首地址
- str_bytes_max:缓存buff最大长度
- 函数说明:获取定值类型字符串文本
- 返 回 值:生成的字符串文本长度
- ************************************************************************/
- static int getCstValTypeString(int val_type,char *p_str,const int str_bytes_max)
- {
- int str_len;
- char str[24]={0};
- if(p_str == NULL){
- rt_printf("getCstValTypeString函数形参p_str地址为空\r\n");
- return 0;
- }
-
- switch(val_type){
- case SETTYPE_KG:
- sprintf(str,"控制字");
- break;
- case SETTYPE_LIST:
- sprintf(str,"选择列表");
- break;
- case SETTYPE_F:
- sprintf(str,"浮点型");
- break;
- case SETTYPE_UINT:
- case SETTYPE_4INT:
- case SETTYPE_5INT:
- case SETTYPE_LINT:
- sprintf(str,"整型");
- break;
- case SETTYPE_IP:
- sprintf(str,"IP地址");
- break;
- case SETTYPE_YMD:
- sprintf(str,"年月日");
- break;
- case SETTYPE_HMS:
- sprintf(str,"时分秒");
- break;
- default:
- rt_printf("非法值类型!\r\n");
- return 0;
- }
- str_len = strlen(str);
- if(str_len > str_bytes_max){
- rt_printf("getCstValTypeString_生成的字符串长度超出了缓存buff长度! str_len=%d str_bytes_max=%d\r\n",str_len,str_bytes_max);
- return 0;
- }
- memcpy(p_str,str,str_len);
- return str_len;
- }
- static void makeCstValueTableFile(struct file *p_file,loff_t *p_pos,const TSETTABLE *p_val_table,const int val_total,const int group_type)
- {
- int i;
- char val_default[24];
- char val_type[24];
- char val_range[256];
- char tmpstr[300]={0};
- char *p=tmpstr;
- u32 group_last=0;
- u8 *p_menu_show = NULL;
- switch(group_type){
- case SETGROUP_TYPE_BH:
- p_menu_show = bSwSetMenuShow;
- break;
- case SETGROUP_TYPE_PUB:
- p_menu_show = bPubSetMenuShow;
- break;
- case SETGROUP_TYPE_PARA:
- p_menu_show = bParaSetMenuShow;
- break;
- case SETGROUP_TYPE_CSTSET:
- p_menu_show = bCstSetMenuShow;
- break;
- default:
- rt_printf("定值组类型错误!\r\n");
- return;
- }
-
- sprintf(p,"类别,定值名称,整定范围,单位,初始值,说明\r\n");
- rt_file_write(p_file,p,strlen(p),p_pos);
- for(i=0;i<val_total;i++)
- {
- memset(p, 0, sizeof(p));
- if(p_val_table[i].wType==SETTYPE_LABEL || !p_menu_show[i])
- continue;
- memset(val_type, 0, sizeof(val_type));
- memset(val_range, 0, sizeof(val_range));
- memset(val_default, 0, sizeof(val_default));
- get_set_value(val_default,&p_val_table[i],p_val_table[i].fDef);
- getCstValRangeString(group_type,i,val_range,sizeof(val_range));
- getCstValTypeString(p_val_table[i].wType,val_type,sizeof(val_type));
- if(group_last != p_val_table[i].group)
- {
- int len=0;
- group_last = p_val_table[i].group;
- len = strlen(SetGroups[p_val_table[i].group].item_name)+strlen(p_val_table[i].szName)+strlen(val_range)+strlen(SetUints[p_val_table[i].wUnit])+strlen(val_default)+strlen(val_type);
- if(len > (sizeof(tmpstr)-7)) //7:5个逗号+一个回车符+一个换行符
- {
- sprintf(p,"字符串长度越限,定值生成失败!\r\n");
- rt_printf("字符串长度%d>%d越限,定值生成失败!\r\n",len,(sizeof(tmpstr)-7));
- }
- else
- sprintf(p,"%s,%s,%s,%s,%s,%s\r\n",SetGroups[p_val_table[i].group].item_name,p_val_table[i].szName,val_range,SetUints[p_val_table[i].wUnit],val_default,val_type);
- }
- else
- {
- int len=0;
- len = strlen(p_val_table[i].szName)+strlen(val_range)+strlen(SetUints[p_val_table[i].wUnit])+strlen(val_default)+strlen(val_type);
- if(len > (sizeof(tmpstr)-7)) //7:5个逗号+一个回车符+一个换行符
- {
- sprintf(p,"字符串长度越限,定值生成失败!\r\n");
- rt_printf("字符串长度%d>%d越限,定值生成失败!\r\n",len,(sizeof(tmpstr)-7));
- }
- else
- sprintf(p," ,%s,%s,%s,%s,%s\r\n",p_val_table[i].szName,val_range,SetUints[p_val_table[i].wUnit],val_default,val_type);
- }
- rt_file_write(p_file,p,strlen(p),p_pos);
- }
- }
- void updateModifyFile(void)
- {
- }
- void creatModifyFile(void)
- {
- loff_t pos=0;
- struct file *p_file;
- char str[512];
- // 创建描述文件
- p_file = rt_file_open("/tmp/setdata_file.csv",O_CREAT|O_RDWR|O_TRUNC,0);
- if(IS_ERR(p_file))
- return;
- sprintf(str,"附录 定值表\r\n 注:1、装置出厂默认设置为保护功能全部退出。请根据实际项目需求及工程配置进行相关更改。\r\n \
- 2、由于技术资料更新问题,装置定值与定值列表不一致,请以装置定值为准。\r\n");
- rt_file_write(p_file,str,strlen(str),&pos);
- memset(str, 0, sizeof(str));
- sprintf(str,"附录1 装置参数定值表\r\n");
- rt_file_write(p_file,str,strlen(str),&pos);
- makeCstValueTableFile(p_file,&pos,tEquipParaTable,EQUIP_PARA_NUMBER,SETGROUP_TYPE_PARA);
- memset(str, 0, sizeof(str));
- sprintf(str,"备注:\r\n (a) 凡是标明是选择列表类的参数,都可以通过界面列表来选择合适的选项。\r\n \
- (b) 遥测自动上送参数平衡101规约、104规约有效,如果退出,遥测数据只有总召时才会上送。\r\n \
- (c) 遥测发送间隔参数平衡101规约及104规约有效,如果遥测自动上送投入,遥测值、遥测发送间隔、遥测死区相 \
- 互配合可有效控制通信数据流量。\r\n (d) 不同以太网卡的IP地址必须设置为不同的网段。\r\n (e) 网关地址 \
- 整定为0.0.0.0代表使用系统默认网关。\r\n");
- rt_file_write(p_file,str,strlen(str),&pos);
- memset(str, 0, sizeof(str));
- sprintf(str,"附录2 公共定值表\r\n");
- rt_file_write(p_file,str,strlen(str),&pos);
- makeCstValueTableFile(p_file,&pos,tPubSetTable,PUB_SET_NUMBER,SETGROUP_TYPE_PUB);
- memset(str, 0, sizeof(str));
- sprintf(str,"附录3 线路定值表\r\n");
- rt_file_write(p_file,str,strlen(str),&pos);
- makeCstValueTableFile(p_file,&pos,tSwSetTable,SW_SET_NUMBER,SETGROUP_TYPE_BH);
- memset(str, 0, sizeof(str));
- sprintf(str,"备注:\r\n (a) 过流加速段电流定值:按躲过本线路最大负荷整定。\r\n (b) 零序加速段定值:\
- 按最小运行方式下本线路末端接地故障最小零序电流,并考虑一定裕量整定。\r\n (c) 零序加速段时间:按躲过断 \
- 路器最大不同时合闸时间整定,避免断路器不同时合闸产生的零序电流使加速元件误动作。\r\n");
- rt_file_write(p_file,str,strlen(str),&pos);
- memset(str, 0, sizeof(str));
- sprintf(str,"附录4 内部定值表\r\n");
- rt_file_write(p_file,str,strlen(str),&pos);
- makeCstValueTableFile(p_file,&pos,tCstSetTable,CSTSET_NUMBER,SETGROUP_TYPE_CSTSET);
-
- rt_file_close(p_file,0);
- }
- //========================== 本文件结束 =============================
|