| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310 |
- /*************************************************************************
- * 版权所有:
- * 文件版本: V1.00
- * 文件名称:syc.c
- * 生成日期: 2010年4月20日
- * 作 者: xxxxxx
- * 功 能: 系统相关函数
- * 更新信息:
- * 更新日志1:
- * 日期:
- * 修改者:
- * 修改内容:
- * 修改原因:
- 修改遥控、手控标志:
- 原始需求(来自3100):
- 1、遥分、手分标志置位:
- (1)保护跳闸失败时,不释放分闸继电器 // TODO: XBTONG
- (2)重合闸放电
- 2、遥合、手合标志置位:
- (1)保护跳闸时,释放合闸继电器 (在继电器出口判断)
- (2)整组复归时,不释放合闸继电器 (在继电器出口判断)
- (3)重合闸返回时,不释放合闸继电器 (脉宽方式不需要)
- (4)电压时间逻辑分段、联络,解锁
- (5)电压时间逻辑返回时,不释放合闸继电器 (脉宽方式不需要)
- 整理后需求:
- 1、遥分、手分标志置位:
- (1)重合闸放电
- 2、遥合、手合标志置位:
- (1)电压时间逻辑分段、联络,解锁
- 3、以分闸为高优先级,有分闸时先关闭合闸,有合闸需求时需无分闸动作。
- 当前做法:
- 手合、手分标志
- 1、在5ms中断保护巡检入口,手合、手分标志,通过手合手分逻辑和同期逻辑,置位
- 2、置位后,在当前巡检过程中,各需使用的逻辑全部使用一次
- 3、在当前5ms中断出口,清除手合、手分标志
- 遥合、遥分标志
- 1、在规约遥控处理中,将遥合、遥分标志置位,并初始化10ms定时器
- 2、经过10ms等待,至少让5ms保护巡检中断执行一次,以保证各逻辑使用到该标志
- 3、在_yk_polling中,经10ms等待后,清除遥合、遥分标志
- 出口管理:以分闸为高优先级,有分闸时关闭合闸,有合闸需求时需无分闸动作
- */
- /*------------------------------- 头文件 --------------------------------------
- */
- #include "head.h"
- #ifdef __IEC61850_GOOSE_FUNC__
- #include "app_61850.h"
- #endif
- #include "goose.h"
- /*------------------------------- 宏定义 --------------------------------------
- */
- /*------------------------------ 类型结构 -------------------------------------
- */
- typedef struct YD_YXTABLE //控制字整定结构
- {
- BYTE type; //远动类型
- WORD no; //点号
- BYTE owner; //归属
- BYTE is_real; //是否为实
- BYTE indexno; //归属中的索引号
- WORD value; //遥信值
- }YD_YXTABLE;
- struct autorst
- {
- u8 xlyy; // 线路有压
- u8 xlwy; // 线路无压
- u8 swfw; // 开关分位
- u8 swhw; // 开关合位
- u8 xl_err; // 线路故障
- u8 tf; // 瞬时故障
- u8 pf; // 永久故障
- u8 stu; // 状态机
- u32 xl_ok_time; // 线路故障后恢复正常延时
- u32 xl_err_time;// 线路故障判定延时
- u32 tf_time; // 瞬时故障自动复归
- u32 pf_time; // 永久故障自动复归
- };
- /*------------------------------ 全局变量 -------------------------------------
- */
- volatile DWORD dTCounter; //系统定时器
- DWORD app_step=0;
- DWORD g_dw_led[2]; // 灯状态
- DWORD g_dw_ledsave[2]; // 灯状态
- bool bMaintain; //工具进入测试模式,避免被菜单周期检查而退出bHMIMode
- bool bMaintain_test;//测试模式,如开入开出测试,避免受应用影响,顺利完成测试
- unsigned short m_CodeCrc; // 程序校验码
- DWORD dwAppDT=0; // 应用程序计数器
- RMTYCTEST g_rmt_set_yc; // 远动遥测置数
- RMTYCTEST g_rmt_set_dd; // 远动电度置数
- DWORD dTRstTime;
- const char *ykownerstr[]=
- {
- "--",
- "1#485",
- "2#485",
- "3#485",
- "4#232",
- "5#232",
- "6#232",
- "7#232",
- "8#232",
- "9#232",
- "10#232",
- "11#232",
- #ifdef FUN_FUXI_ESAM
- "南网加密",
- #endif
- "1#网络",
- "2#网络",
- "3#网络",
- #if defined NET3_IP5 || defined NET4_IP5
- "4#网络",
- "5#网络",
- #endif
- "本地维护",
- };
- struct autorst g_autorst[SWITCH_NUM_MAX]; // 自动复归结构体
- #if defined FUNC_DRIVE || defined FUNC_DRIVE_JY
- YK_DRIVE gb_drive; //不停电传动功能
- #endif
- /*------------------------------ 函数声明 -------------------------------------
- */
- extern int pit_156us_main(int is_625us);
- extern int pit_5ms_main(int dummy);
- extern int net_if_test(void);
- static void _yk_polling(void);
- static void _equerr_check(void);
- static void _boarderr_check(void);
- static void _signrst_auto(void);
- int _yx_is_config(WORD owner ,WORD index);
- #ifdef FUN_ADD_CONFIG_DIR
- void config_remote_init(void)
- {
- int ret=0;
- u8 tmp[128];
-
- //创建目录。如果目录已经存在,就不会再创建
- rt_file_mkdir(HF_CONFIG_DIR);
- rt_file_mkdir(HF_CONFIG_ZF_DIR);
- rt_file_mkdir(HF_CONFIG_MAIN_DIR);
- rt_file_mkdir(HF_PROGRAM_DIR);
- rt_file_mkdir(HF_PROGRAM_MAIN_DIR);
- rt_file_mkdir(HF_PROGRAM_PROTOCOL_DIR);
- rt_file_mkdir(HF_PROGRAM_LCD_DIR);
- /*转发点表*/
- sprintf(tmp, "%s%s", HF_CONFIG_ZF_DIR, "iectable.bin");
- ret = rt_file_cp("/app/data/iectable.bin", tmp);
- if(ret != 0) rt_printf("%s 文件拷贝失败(ret=%d)!\r\n","iectable.bin",ret);
- /*基本配置表*/
- sprintf(tmp, "%s%s", HF_CONFIG_MAIN_DIR, "equ_cfg.bin");
- ret = rt_file_cp("/app/data/equ_cfg.bin", tmp);
- if(ret != 0) rt_printf("%s 文件拷贝失败(ret=%d)!\r\n","equ_cfg.bin",ret);
- /*主程序*/
- sprintf(tmp, "%s%s", HF_PROGRAM_MAIN_DIR, KO_FILE_NAME_1);
- ret = rt_file_cp(KO_FILE_NAME, tmp);
- if(ret != 0) rt_printf("%s 文件拷贝失败(ret=%d)!\r\n","dftu.ko",ret);
-
- /*规约程序*/
- sprintf(tmp, "%s%s", HF_PROGRAM_PROTOCOL_DIR, "pcolcfg.ini");
- ret = rt_file_cp("/app/data/pcolcfg.ini", tmp);
- if(ret != 0) rt_printf("%s 文件拷贝失败(ret=%d)!\r\n","pcolcfg.ini",ret);
-
- /*lcd交互文件*/
- sprintf(tmp, "%s%s", HF_PROGRAM_LCD_DIR, "lcd_menu.csv");
- ret = rt_file_cp("/app/data/lcd_menu.csv", tmp);
- if(ret != 0) rt_printf("%s 文件拷贝失败(ret=%d)!\r\n","lcd_menu.csv",ret);
- }
- #endif
- /*------------------------------ 外部函数 -------------------------------------
- 外部函数供其它实体文件引用,必须仔细检查传入参数的合法性.
- */
- /**************************************************************************
- 函数名称:SystemInit
- 函数版本:1.00
- 作者: WJJ
- 创建日期:2008.9.5
- 函数功能说明:应用系统初始化函数
- 输入参数:
- 输出参数:当前遥信的实时状态
- 返回值:
- 更新信息:
- 更新日志1:
- 日期:
- 修改者:
- 修改内容:
- 修改原因:
- ***************************************************************************/
- void SystemInit(void)
- {
- dTCounter=0;
-
- protect_init(); //保护相关参数初始化
- // sys_time_init(); //TODO by ygl
- m_runsection=0;
- MakeRunSet(true); // 将当前运行定值区转换为运行定值区
- //pw_quality_init();
- MakeRunPara(true, true); // 转换参数到运行参数区
- bRunSetModify=false;
- if(set_create_data_file()!=0) //重新初始化一下定值,防止工具软件召的数据由于定值区未初始化,是错误值
- {
- rt_err_set(ERR_CODE_SET_DATA,0);
- }
- sw_ext_init();//零序电压自产 重新初始化一下,
-
- soe_init(); // 使用了内部定值,放在定值参数之后
- soe_record_opt(EV_POWER,0);
-
- bMaintain=false;
- bMaintain_test = false;
- MainTain_Init();
- run_status_init();
- rmt_key_init();
- ProtectRelayInit(); // 保护定时器初始化
- net_debug_s_init();//网络发送任务初始化
-
- // 根据环境变量决定是否打开维护接口
- if(get_mt_port_proc() == 1||tRunPara.b104Client) // 104规约是客户端,直接打开维护工具
- {
- net_maintain_init();
- net_debug_init();
- }
- #ifdef ENCRYPT_X509
- x509_init(); //x509证书初始化
- x509_time_init();//x509时间初始化
- #endif
- net_104_init();
- net_104link_init();
- #ifdef FUN_FUXI_ESAM
- spi_fuxi_init();
- s1_status_file_init();
- read_certification_init();
- s1_net_init();
- #endif
- led_init();
- PDA_Comm_Init();
- #ifdef FUN_GPRS // modfiy for xxxxxx 20220706 GPRS没有使用。
- gprs_aux_init();
- #endif
- filelist_createfile();
- //esam_init();
- #ifndef GW_AREA_MAIN_2021
- FA_Init();
- #endif
- InitLcdComm();
- ReadUqua();
- #ifndef GW_AREA_MAIN_2021
- fa_g_init();
- #endif
- #ifdef METERING_ENERGY
- DLInit();
- get_eep_dd_data();
- energy_curve_init();
- #endif
- #ifdef FUN_ADD_CONFIG_DIR
- config_remote_init();
- #endif
- #ifdef FUN_JSON_FILE
- tbl_json_file_init();
- #endif
- #ifndef CPU_FUXI
- pit_regester_callback(156,pit_156us_main); //挂入采样中断
- pit_regester_callback(5000,pit_5ms_main); //挂入保护中断
- #endif
- xdl_i0_argument_init_by_scale();
- }
- void app_yb_refresh(void)
- {
- int sw;
- for(sw=0;sw<g_sw_num;sw++)
- {
- #ifndef GW_AREA_MAIN_2021
- #if defined GD_AREA_JIEYANG_2021 || defined GD_AREA_ECZD_CHAOZHOU_2021 || defined GD_AREA_ECZD_JIEYANG_2022
- if(pRunSet->bTT_SOFT_BH_YB && !FA_ALL_EN(sw))
- {
- fresh_set_soe(EV_TYPE_S,0,0,sw);
- fresh_set_soe(EV_TYPE_L,0,0,sw);
- }
- else
- #endif
- {
- if(FA_ALL_EN(sw))
- {
- fresh_set_soe(EV_TYPE_S, !g_tRelay[sw].run_stu.fa_ls,0,sw);//分段模式
- fresh_set_soe(EV_TYPE_L, g_tRelay[sw].run_stu.fa_ls,0,sw);//联络模式
- }
- }
- #endif
- //自供电功能投入
- #ifndef GW_AREA_MAIN_2021
- {
- bool bll;
- bll=(g_tRelay[sw].tgoc.tllcd.sta.bFlag.bCD&&BH_GOOSE_EN(sw));
- if(BH_GOOSE_EN(sw))
- fresh_set_soe(EV_FA_LL_EN,bll,false,sw);
- else if(!g_tRelay[sw].run_stu.fa_ls||BH_ALL_EN(sw))//分段或者保护模式退出自转电SOE
- fresh_set_soe(EV_FA_LL_EN,0,false,sw);
- }
- //soft_yb
- //只关联软压板: EV_KZ_YB/EV_EDIT_YB (出口/远方)
- fresh_set_soe(EV_KZ_YB, pRunSet->bTT_KZ_YB, 0,sw);
- fresh_set_soe(EV_EDIT_YB, pRunSet->bTT_EDIT_YB, 0,sw);
- #endif
- //关联硬压板
- // EV_CHZ_YB (重合闸)
- //#ifdef GD_AREA_FOS
- #if defined GD_AREA_FOS || defined GD_AREA_MAIN_2020 || defined GD_AREA_ECZD_2020
- fresh_set_soe(EV_CHZ_YB,CHZ_ALL_EN(sw) , 0,sw);//重合闸投入
- #elif defined GD_AREA_HEYUAN_KL
- fresh_set_soe(EV_CHZ_YB,!pRunSet->bTT_CHZ_YB, 0,sw);//重合闸投入
- #else
- #ifndef GW_AREA_MAIN_2021
- fresh_set_soe(EV_CHZ_YB,!CHZ_ALL_EN(sw) , 0,sw);//停用重合闸
- #endif
- #endif
- // EV_BH_YB (功能总)
- #ifdef GD_AREA_MAIN_2020
- fresh_set_soe(EV_BH_YB, !FUN_ALL_EN(sw), 0,sw); //停用保护和FA
- #else
- #ifndef GW_AREA_MAIN_2021
- fresh_set_soe(EV_BH_YB, FUN_ALL_EN(sw), 0,sw);
- #endif
- #endif
- #if defined BHFAGS_YB_YK || defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020 || defined GD_AREA_ZHUHAI_V2 || defined GD_AREA_SHAOGUAN || defined GD_AREA_ECZD_2020 || defined BH_FA_INONE_PUBLIC
- // EV_GOOSE_YBTT/EV_FA_YBTT/EV_BH_YBTT (goose/fa/bh)
- fresh_set_soe(EV_BH_YBTT, BH_ALL_EN(sw), 0,sw);
- fresh_set_soe(EV_FA_YBTT, FA_ALL_EN(sw), 0,sw);
- fresh_set_soe(EV_GOOSE_YBTT, BH_GOOSE_EN(sw), 0,sw);
- #endif
- #ifdef GD_AREA_JIEYANG
- //EV_TQHZ_YBTT(同期)
- fresh_set_soe(EV_TQHZ_YBTT, TQ_ALL_EN(sw), 0,sw);
- #endif
- #ifdef TQ_SOFT_YB
- fresh_set_soe(EV_TQ_YBTT,TYTQ_ALL_EN(sw),0,sw);
- #endif
- #ifdef JL_SOFT_YB
- fresh_set_soe(EV_JL_YBTT,!JL_ALL_EN(sw),0,sw);//停用自动解列
- #endif
- #ifdef YB_STHD_CHECK
- //功能总
- if((((short)g_sw_pub.di_cfg_index[PUB_DI_BHALL] != INDEX_INVALLID)&&(pRunSet->bTT_BH_YB != g_run_stu.bhall))||
- (((short)g_sw[sw].di_cfg_index[SW_DI_BHZTT] != INDEX_INVALLID)&&(pRunSet->bTT_BH_YB != g_tRelay[sw].run_stu.bhztt))||
- (((short)g_sw_pub.di_cfg_index[PUB_DI_BHALL] != INDEX_INVALLID)&&((short)g_sw[sw].di_cfg_index[SW_DI_BHZTT] != INDEX_INVALLID)&&(g_run_stu.bhall != g_tRelay[sw].run_stu.bhztt)))
- {
- if(soe_check(EV_FUNALL_CHECK+sw*EV_SW_NUM)==false) //
- {
- soe_record_ev(EV_FUNALL_CHECK+sw*EV_SW_NUM, 1, 0,0,0 );
- }
- }
- else
- {
- if(soe_check(EV_FUNALL_CHECK+sw*EV_SW_NUM)==true) //
- {
- soe_record_ev(EV_FUNALL_CHECK+sw*EV_SW_NUM, 0, 0,0,0 );
- }
- }
- //CHZ
- if((((short)g_sw[sw].di_cfg_index[SW_DI_CHZ] != INDEX_INVALLID)&&(pRunSet->bTT_CHZ_YB != g_tRelay[sw].run_stu.chzyb))||
- (((short)g_sw[sw].di_cfg_index[SW_DI_BSCH] != INDEX_INVALLID)&&(pRunSet->bTT_CHZ_YB == g_tRelay[sw].run_stu.bsch))||
- (((short)g_sw[sw].di_cfg_index[SW_DI_CHZ] != INDEX_INVALLID)&&((short)g_sw[sw].di_cfg_index[SW_DI_BSCH] != INDEX_INVALLID)&&(g_tRelay[sw].run_stu.chzyb == g_tRelay[sw].run_stu.bsch)))
- {
- if(soe_check(EV_CHZ_CHECK+sw*EV_SW_NUM)==false) //
- {
- soe_record_ev(EV_CHZ_CHECK+sw*EV_SW_NUM, 1, 0,0,0);
- }
- }
- else
- {
- if(soe_check(EV_CHZ_CHECK+sw*EV_SW_NUM)==true) //
- {
- soe_record_ev(EV_CHZ_CHECK+sw*EV_SW_NUM, 0, 0,0,0);
- }
- }
- #if defined BHFAGS_YB_YK || defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020 || defined GD_AREA_ZHUHAI_V2 || defined GD_AREA_SHAOGUAN || defined BH_FA_INONE_PUBLIC
- //GOOSE
- if(((short)g_sw[sw].di_cfg_index[SW_DI_FA_GOOSE] != INDEX_INVALLID)&&(pRunSet->bTT_SOFT_GOOSE_YB != g_tRelay[sw].run_stu.fa_g_tt))
- {
- if(soe_check(EV_GOOSE_CHECK+sw*EV_SW_NUM)==false) //
- {
- soe_record_ev(EV_GOOSE_CHECK+sw*EV_SW_NUM, 1, 0,0,0);
- }
- }
- else
- {
- if(soe_check(EV_GOOSE_CHECK+sw*EV_SW_NUM)==true) //
- {
- soe_record_ev(EV_GOOSE_CHECK+sw*EV_SW_NUM, 0, 0,0,0);
- }
- }
- //FA
- if(((short)g_sw[sw].di_cfg_index[SW_DI_FA_TT] != INDEX_INVALLID)&&(pRunSet->bTT_SOFT_FA_YB != g_tRelay[sw].run_stu.fatt))
- {
- if(soe_check(EV_FA_CHECK+sw*EV_SW_NUM)==false) //
- {
- soe_record_ev(EV_FA_CHECK+sw*EV_SW_NUM, 1, 0,0,0);
- }
- }
- else
- {
- if(soe_check(EV_FA_CHECK+sw*EV_SW_NUM)==true) //
- {
- soe_record_ev(EV_FA_CHECK+sw*EV_SW_NUM, 0, 0,0,0);
- }
- }
- //BH
- if(((short)g_sw[sw].di_cfg_index[SW_DI_BHTT] != INDEX_INVALLID)&&(pRunSet->bTT_SOFT_BH_YB != g_tRelay[sw].run_stu.bhtt))
- {
- if(soe_check(EV_BH_CHECK+sw*EV_SW_NUM)==false) //
- {
- soe_record_ev(EV_BH_CHECK+sw*EV_SW_NUM, 1, 0,0,0);
- }
- }
- else
- {
- if(soe_check(EV_BH_CHECK+sw*EV_SW_NUM)==true) //
- {
- soe_record_ev(EV_BH_CHECK+sw*EV_SW_NUM, 0, 0,0,0);
- }
- }
- #endif
- #endif
- }
- }
- bool system_check_proc(void)
- {
- static SYSTEM_DATA st;
- static u32 sysDataSavetick;
- if((g_tick_secs - sysDataSavetick) >= 5||tRunPara.sysData.bWriteFlag)
- {
- sysDataSavetick=g_tick_secs;
- //系统数据保存检测
- if (memcmp (((char *)&st)+2, ((char *)&tRunPara.sysData)+2, EEP_SYSTEM_DATA_SIZE-4) != 0)
- {
- memcpy(((char *)&st)+2, ((char *)&tRunPara.sysData)+2, EEP_SYSTEM_DATA_SIZE-4);
- st.bWriteFlag=TRUE;
- WriteSysData(&st);
- sprintf(m_TzCount,"%d",tRunPara.sysData.wSwTzCount);
- sprintf(m_HzCount,"%d",tRunPara.sysData.wSwHzCount);
- return TRUE;
- }
- tRunPara.sysData.bWriteFlag=FALSE;
- }
- return TRUE;
- }
- /**************************************************************************
- 函数名称:AppPolling
- 函数版本:1.00
- 作者: WJJ
- 创建日期:2008.9.5
- 函数功能说明:应用系统巡检
- 输入参数:
- 输出参数:
- 返回值:
- 更新信息:
- 更新日志1:
- 日期:
- 修改者:
- 修改内容:
- 修改原因:
- ***************************************************************************/
- void AppPolling(void)
- {
- if(dTCounter-dwAppDT<T_100ms) // 100 毫秒处理一次
- {
- return;
- }
- dwAppDT=dTCounter;
- app_step++;
- app_action_result();
- led_polling_app();
- _equerr_check();
- app_yb_refresh();
- if((app_step%5)==0)_boarderr_check();
- if((app_step%5)==1)_signrst_auto();
- if((app_step%5)==2)_yk_polling();
- if((app_step%5)==3)bat_proc();
- if((app_step%5)==4)system_check_proc();
- #ifndef GW_AREA_MAIN_2021
- if((app_step%10)==0)fa_g_app_time(0);
- #endif
- }
- /**************************************************************************
- 函数名称:Get_Code_CRC
- 函数版本:1.00
- 作者:
- 创建日期:2008.9.24
- 函数功能说明:计算flash的crc
-
- 输入参数:
- 其他输入:
- 输出参数:
- 返回值: 无
- ***************************************************************************/
- int Get_Code_CRC(void)
- {
- struct file * pfile;
- loff_t file_pos,file_length;
- unsigned char * file_data;
- unsigned short crc;
- // 打开文件
- pfile = rt_file_open(KO_FILE_NAME,O_RDONLY,0);
- if(IS_ERR(pfile))
- {
- printk("check_file:内核模块文件不能打开(%s)!\n",KO_FILE_NAME);
- m_CodeCrc=0;
- return -1;
- }
- // 得到文件长度
- file_length = rt_file_getfile_size(pfile);
- if(file_length <= 0)
- {
- rt_file_close(pfile,0);
- return -11;
- }
- // 分配内存
- file_data = rt_malloc(file_length);
- if(file_data == NULL)
- {
- rt_file_close(pfile,NULL);
- m_CodeCrc=0;
- return -2;
- }
-
- // 读出整个文件
- file_pos = 0;
- rt_file_read(pfile,file_data,file_length,&file_pos);
- //关闭文件
- rt_file_close(pfile,NULL);
- //得到CRC
- crc = CrcStr(file_data,(int)(file_length - 2));
- m_CodeCrc=crc;
- //释放内存
- rt_free(file_data);
- return 0;
- }
- /**************************************************************************
- 函数名称:Delayms
- 函数版本:1.00
- 作者:
- 创建日期:2008.9.24
- 函数功能说明:延时函数
-
- 输入参数:
- 其他输入:
- 输出参数:
- 返回值: 无
- ***************************************************************************/
- void Delayms(DWORD dT,DWORD count)
- {
- while(dTCounter-dT<count)
- {
- }
- }
- //复归合位状态下允许点亮的LED灯,eg:重合灯动作灯、告警灯
- void ResetHzLed(int rstsw)
- {
- int i,sw;
- rt_printf("复归动作灯\r\n");
- //TODO
- #ifndef GW_AREA_MAIN_2021
- for(sw=0;sw<g_sw_num;sw++)
- {
- TRELAY_T *pR=&g_tRelay[sw];
- RUN_STU_SW *prun=&pR->run_stu;
- pR->run_stu.dz = RY_DZ_NULL;
- prun->gl = false;
- prun->jd = false;
- pR->tCHZ.sta.bFlag.bCHZLed = false;
- pR->tOVER_U0TZ.bU0GjLed = false;
- if(rstsw>0&&((sw+1)!=rstsw))continue;
- for(i=BH_GL1;i<=FA_DLBS;i++)
- {
- TOC_T *poc = &g_tRelay[sw].tOC[i];
- poc->sta.bFlag.bDzLed = false;
- poc->sta.bFlag.bGjLed = false;
- poc->sta.bFlag.bGj = false;
- poc->sta.bFlag.bTz = false;
- #ifdef YX_RESET_TIME
- poc->sta.bFlag.bTzEvent=false;
- #endif
- }
- // 灭过流灯
- led_set_sw(sw,SW_LED_GL, LED_OFF);
- // 灭接地灯
- led_set_sw(sw,SW_LED_JD, LED_OFF);
- // 灭重合动作灯
- led_set_sw(sw,SW_LED_CHZ, LED_OFF);
- //chz reset
- if(pR->tCHZ.sta.bFlag.bQDFG == false)
- {
- pR->tCHZ.sta.wfFlag=0;
- pR->tCHZ.wAR_ActTimes=0;
- ResetTR(&pR->tCHZ.tTCHJD_HJS);
- }
- #if defined GD_AREA_GUANGZHOU_FTU || defined GD_AREA_TEST_2020 || defined GD_AREA_ZHUHAI_V2
- // 灭故障告警灯
- led_set_sw(sw,SW_LED_FAULT_GJ, LED_OFF);
- #endif
- #ifdef GD_AREA_ZHUHAI_V2
- led_set_sw(sw,SW_LED_DZ, LED_OFF);
- #endif
- #ifdef TZ_STATE_LED
- led_set_sw(sw,SW_LED_TZ, LED_OFF);
- #endif
- }
- #endif
- }
- /**************************************************************************
- 函数名称:SignalReset
- 函数版本:1.00
- 作者:
- 创建日期:2008.9.24
- 函数功能说明:信号复归函数
-
- 输入参数:
- 其他输入:
- 输出参数:
- 返回值: 无
- ***************************************************************************/
- void SignalReset(int rstsw,bool blnk)
- {
- int i,sw;
- bool bRst ;
- bool bBSRst ;
- bool bGLRst ;
- bool bJDRst ;
- bool bCHRst ;
- bool bGJRst ;
- if(blnk) //级联复归报文
- {
- lnk_rst_set();
- }
- if(run_status_dz_all()&&rstsw==0) // 若有告警灯点亮,记录操作信息
- {
- soe_record_opt(EV_SIG_RESET, 0);
- }
- //收保护动作灯
- #ifdef GW_AREA_MAIN_2021
- for(sw=0;sw<g_sw_num;sw++)
- {
- TRELAY_T *pR=&g_tRelay[sw];
- bRst=true;
- bBSRst = true;
- bGLRst = true;
- bJDRst = true;
- bCHRst = true;
- if(rstsw>0&&((sw+1)!=rstsw))continue;
- for(i=0;i<=OC_GLBS;i++)
- {
- TOC_T *poc = &g_tRelay[sw].tOC[i];
- if(poc->sta.bFlag.bGj||poc->sta.bFlag.bTz)
- {
- bRst=false;
- if(i==OC_GL1||i==OC_GL2||i==OC_GL3||i==OC_DL||i==OC_GLJS||i==OC_GLBS)
- {
- bGLRst = false;
- }
- // if(i==OC_LX1||i==OC_LX2||i==OC_LX3||i==OC_GLJS)
- if(i==OC_LX1||i==OC_LX2||i==OC_LX3||i==OC_LL||i==OC_LXJS)
- {
- bJDRst = false;
- }
- }
- else
- {
- poc->sta.bFlag.bDzLed=false;
- poc->sta.bFlag.bTzsbLed=false;
- }
- }
-
- if (pR->tU0TZ.uZOV.bFlag.bTz||pR->tXXTZ.uZOV.bFlag.bTz) // 零序过压跳闸
- {
- bRst = false;
- bJDRst = false;
- }
- else
- {
- pR->tU0TZ.bU0Led = false;
- }
-
- if (pR->tLostVot.uLostVot.bFlag.bTz) //失压跳闸
- {
- bRst = false;
- }
- else
- {
- pR->tLostVot.bLostVotLed = false;
- }
- // TODO 小电流重合闸标志合并 EWen
- if (pR->tCHZ.sta.bFlag.bHz/* || pR->tXDLCHZ.sta.bFlag.bHz*/) // 重合闸
- {
- bRst = false;
- bCHRst = false;
- }
- else
- {
- pR->tCHZ.sta.bFlag.bCHZLed = false;
- }
-
- if (pR->tSDHZ.bL_BSLed) // 联络闭锁
- {
- bRst = false;
- bBSRst = false;
- }
-
- if (pR->tSDHZ.bS_BSLed) // 分段闭锁
- {
- bRst = false;
- bBSRst = false;
- }
- // 灭过流灯
- if (bGLRst)
- {
- int soeno;
- led_set_sw(sw,SW_LED_GL, LED_OFF);
- led_set_sw(sw,SW_LED_XLGZ, LED_OFF);
- soeno = EV_SW_FAULT_LED + sw*EV_SW_NUM;
- if(soe_check(soeno)==true)
- {
- soe_record_ev(soeno, 0, 0,0,0);
- }
- }
- // 灭接地灯
- if (bJDRst)
- {
- led_set_sw(sw,SW_LED_JD, LED_OFF);
- }
- // 灭重合灯
- if (bCHRst)
- {
- led_set_sw(sw,SW_LED_CHZ, LED_OFF);
- }
- // 灭闭锁灯
- if (bBSRst)
- {
- //led_set_sw(sw,SW_LED_LOCK, LED_OFF); // 闭锁灯程序自动处理,不需要人工干预
- }
- // 灭动作灯
- if(bRst)
- {
- led_set_sw(sw,SW_LED_DZ, LED_OFF);
- pR->run_stu.dz = 0;
- if(rstsw>0)soe_record_opt(EV_SIG_RESET, 0);
- }
- // 置位短路电流
- // TODO 故障电流处理 EWen
- // g_sw[sw].ac_in[SW_AC_IN_IAS] = 0;
- // g_sw[sw].ac_in[SW_AC_IN_IBS] = 0;
- // g_sw[sw].ac_in[SW_AC_IN_ICS] = 0;
- // 复位多次分闸闭锁合闸标志
- pR->FRES_FZ = 0;
- pR->uFREFZ.bFlag.BS_HZ = 0;
- pR->uFREFZ.bFlag.HW_JY = 0;
- pR->uFREFZ.bFlag.JS_QD = 0;
- pR->RUN_BSHZ = 0;
-
- //间歇性接地
- //TODO 待对接 EWen
- // jxjd_sw_reset(sw);
- }
- #else
- for(sw=0;sw<g_sw_num;sw++)
- {
- TRELAY_T *pR=&g_tRelay[sw];
- bRst=true;
- bBSRst = true;
- bGLRst = true;
- bJDRst = true;
- bCHRst = true;
- bGJRst = true;
- if(rstsw>0&&((sw+1)!=rstsw))continue;
- for(i=BH_GL1;i<=FA_DLBS;i++)
- {
- TOC_T *poc = &g_tRelay[sw].tOC[i];
- if(poc->sta.bFlag.bGj||poc->sta.bFlag.bTz)
- {
- #ifdef GD_TEST_2021
- if(poc->sta.bFlag.bGj)
- bGJRst = false;
- #endif
- bRst=false;
- if(i==BH_GL1||i==BH_GL2||i==BH_GL3||i==BH_GLJS||i==FA_GL||i==FA_GL2||i==FA_DLBS||i==FA_GL_II
- #ifdef SET_GL_GJ2
- || (i==FA_GL2_II)
- #endif
- )
- {
- bGLRst = false;
- }
- #ifdef DISP_SET_LX3
- if(i==BH_LX1||i==BH_LX2||i==BH_LX3||i==BH_GLJS||i==FA_LX||i==FA_LX2)
- #else
- if(i==BH_LX1||i==BH_LX2||i==BH_GLJS||i==FA_LX||i==FA_LX2)
- #endif
- {
- bJDRst = false;
- }
- }
- else
- {
- poc->sta.bFlag.bDzLed=false;
- }
- }
- #ifdef GD_AREA_ZHONGSHAN_2020
- for(i=FAG_GL1;i<=FAG_LX;i++)
- {
- TOC_T *poc = &g_tRelay[sw].tgoc.tOc[i];
- if(poc->sta.bFlag.bGj||poc->sta.bFlag.bTz)
- {
- bRst=false;
- if(i==FAG_GL1||i==FAG_GL2)
- {
- bGLRst = false;
- }
- if(i==FAG_LX)
- {
- bJDRst = false;
- }
- }
- else
- {
- poc->sta.bFlag.bDzLed=false;
- }
- }
- #endif
-
- if (pR->tU0TZ.uZOV.bFlag.bTz||pR->tXXTZ.uZOV.bFlag.bTz ||pR->tOVER_U0TZ.uZOV.bFlag.bTz || pR->tU0TZ.bU0Led ) // 零序过压跳闸
- {
- bRst = false;
- bJDRst = false;
- }
- else
- {
- pR->tU0TZ.bU0Led = false;
- pR->tOVER_U0TZ.bU0Led = false;
- }
-
- if (pR->tLostVot.uLostVot.bFlag.bTz) //失压跳闸
- {
- bRst = false;
- }
- else
- {
- pR->tLostVot.bLostVotLed = false;
- }
- #if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020
- if (pR->tgoc.sta.bFlag.bglTz||pR->tgoc.sta.bFlag.bgl2Tz) // goose 过流跳闸
- #else
- if (pR->tgoc.sta.bFlag.bglTz) // goose 过流跳闸
- #endif
- {
- bRst = false;
- }
- else
- {
- pR->tgoc.bglTzLed = false;
- }
- if (pR->uGLFSX.bFlag.bFXDZ) //反时限跳闸
- {
- bRst = false;
- }
- else
- {
- pR->uGLFSX.bFlag.bDzLed = false;
- }
- if (pR->tgoc.sta.bFlag.blxTz) // goose 过流跳闸
- {
- bRst = false;
- }
- else
- {
- pR->tgoc.blxTzLed = false;
- }
- if (pR->tgoc.sta.bFlag.bsdTz) // goose 过流跳闸
- {
- bRst = false;
- }
- else
- {
- pR->tgoc.bsdTzLed = false;
- }
- if (pR->tgoc.sta.bFlag.berrTz) // goose 过流跳闸
- {
- bRst = false;
- }
- else
- {
- pR->tgoc.berrTzLed = false;
- }
- if (pR->tgoc.sta.bFlag.bgzglTz) // goose 过流跳闸
- {
- bRst = false;
- }
- else
- {
- pR->tgoc.bgzglTzLed = false;
- }
-
- if (pR->tgoc.sta.bFlag.bextTz) // 失灵跳闸
- {
- bRst = false;
- }
- else
- {
- pR->tgoc.bextTzLed = false;
- }
-
- if (pR->tDYJL.sta.bFlag.bTz) //失压跳闸
- {
- bRst = false;
- }
- else
- {
- pR->tDYJL.bLed= false;
- }
- if (pR->tPLJL.sta.bFlag.bTz) //失压跳闸
- {
- bRst = false;
- }
- else
- {
- pR->tPLJL.bLed= false;
- }
- if (pR->tCHZ.sta.bFlag.bHz) // 重合闸
- {
- bRst = false;
- bCHRst = false;
- }
- else
- {
- ;//pR->tCHZ.sta.bFlag.bCHZLed = false;
- #ifdef GD_AREA_ZHAOQING_FENGKAI
- pR->tCHZ.sta.bFlag.bCHZLed = false;
- #endif
- }
-
- if (pR->tSDHZ.bL_BSLed) // 联络闭锁
- {
- bRst = false;
- bBSRst = false;
- }
-
- if (pR->tSDHZ.bS_BSLed) // 分段闭锁
- {
- bRst = false;
- bBSRst = false;
- }
- #ifdef FUN_JDXX
- if(pR->tJD.sta.bFlag.bTz||pR->tJD.sta.bFlag.bGj) //(jdxx_is_dz(sw))
- {
- //jdxx_rst_dz(sw);
- bRst = false;
- bJDRst = false;
- }
- else
- {
- pR->tJD.sta.bFlag.bTZLed=false;
- pR->tJD.sta.bFlag.bGJLed=false;
- }
- #endif
- // 灭过流灯
- if (bGLRst)
- {
- #ifndef GD_AREA_GUANGZHOU_FTU
- led_set_sw(sw,SW_LED_GL, LED_OFF);
- #endif
- }
- // 灭接地灯
- if (bJDRst)
- {
- #ifndef GD_AREA_GUANGZHOU_FTU
- led_set_sw(sw,SW_LED_JD, LED_OFF);
- #endif
- }
- // 灭重合灯
- if (bCHRst)
- {
- //led_set_sw(sw,SW_LED_CHZ, LED_OFF);
- }
- // 灭闭锁灯
- if (bBSRst)
- {
- //led_set_sw(sw,SW_LED_LOCK, LED_OFF); // 闭锁灯程序自动处理,不需要人工干预
- }
- // 灭动作灯
- if(bRst)
- {
- sw_do(sw,SW_DO_BHDZ,SW_DO_TYPE_OFF);
- #ifndef GD_AREA_ZHUHAI_V2
- led_set_sw(sw,SW_LED_DZ, LED_OFF);
- #endif
- #ifdef TZ_STATE_LED
- #ifndef GD_AREA_GUANGZHOU_FTU
- led_set_sw(sw,SW_LED_TZ, LED_OFF);
- #endif
- #endif
- pR->run_stu.dz = RY_DZ_NULL;
- if(rstsw>0)soe_record_opt(EV_SIG_RESET, 0);
-
- if(soe_check(EV_ARBS+sw*EV_SW_NUM)==true)
- {
- g_tRelay[sw].run_stu.chzbs=false;
- soe_record_ev(EV_ARBS+sw*EV_SW_NUM, 0, 0,0,0); // 重合闸闭锁
- led_set_sw(sw,SW_LED_CHZBS, LED_OFF);
- ResetTR(&g_tRelay[sw].tCHZ.tTCHJBSTime);
- //chzbs reset
- pR->tCHZ.sta.wfFlag=0;
- pR->tCHZ.wAR_ActTimes=0;
- ResetTR(&pR->tCHZ.tTCHJD_HJS);
- led_set_sw(sw,SW_LED_CHZ, LED_OFF);
- }
- #ifdef FUNC_LARGECURRENT_BS_CHZ
- if(soe_check(EV_HI_CHZ_LOCK+sw*EV_SW_NUM)==true)
- {
- soe_record_ev(EV_HI_CHZ_LOCK+sw*EV_SW_NUM, 0, 0,0,0); // 大电流闭锁重合闸
- led_set_sw(sw,SW_LED_CHZBS, LED_OFF);
- }
- #endif
- }
- #ifdef GD_TEST_2021
- if(bGJRst)
- led_set_sw(sw,SW_LED_FAULT_GJ, LED_OFF);
- #endif
- pR->run_stu.fgbs=0;
- }
- #endif
- // 灭公共动作灯
- if(rstsw==0)g_run_stu.pubdz = 0;
-
- #if defined(BSP_DTU3) || defined(BSP_DTU2) || defined(BSP_DTU5)
- if(g_led_aux_test_st&&rstsw==0)
- {
- g_led_aux_test_st = 0;
- // TODO EWen 待合并
- // led_aux_test(0);
- }
- #endif
- }
- //遥控处理
- char * const g_RmtCtrl_ErrCode[]=
- {
- "遥控成功!", // 0
- "非远方状态!", // 1
- "无遥控信息,请检查遥控点表!", // 2
- "不同主站遥控,拒绝!", // 3
- "没有实际对应点,请检查遥控点表!", // 4
- "重复选择!", // 5
- "选择公共开出超范围!", // 6
- "选择必须总软压板投入!", // 7
- "选择公共开出失败!", // 8
- "选择线路开出超范围!", // 9
- "选择总软压板或线路软压板必须投入!",// 10
- "选择线路开出失败!", // 11
- "遥控执行和遥控选择不对应!", // 12
- "执行必须总软压板投入!", // 13
- "执行总软压板或线路软压板必须投入!",// 14
- "线路保护出口,禁止动作!", // 15
- "合环闭锁或出口,禁止动作!", // 16
- "重合闸出口,禁止动作!", // 17
- "执行开出失败!", // 18
- "非选择状态下撤销!", // 19
- "遥控类型错误!", // 20
- "遥控超时错误!", // 21
- "级联遥控错误!", // 22
- "遥控未知错误!", // 23
- "遮断,禁止分闸!", // 24
- "FA闭锁操作", // 25
- "遥控压板退出", // 26
- "开关未储能,禁止合闸", // 27
- "检修状态!", // 28
- #ifdef GD_AREA_ECZD_SHAOGUAN_2021
- "非电压电流模式下,不允许遥控预置分段/联络开关", // 29
- #endif
- };
- #define ERRCODE_NUM (sizeof(g_RmtCtrl_ErrCode)/sizeof(g_RmtCtrl_ErrCode[0]))
- char *RmtCtrl_Err(int err_code)
- {
- err_code = abs(err_code);
- if(err_code < ERRCODE_NUM)
- {
- return
- g_RmtCtrl_ErrCode[err_code];
- }
- return g_RmtCtrl_ErrCode[ERRCODE_NUM - 1];
- }
- //遥控修改软压板判断
- bool ykEditYb(BYTE ykTypeNo)
- {
- #ifdef GW_AREA_MAIN_2021
- return false;
- #else
- switch(ykTypeNo-1)
- {
- case PUB_CHYB_HZ:
- case PUB_CHYB_FZ:
- case PUB_BHYB_HZ:
- case PUB_BHYB_FZ:
- case PUB_KZYB_HZ:
- case PUB_KZYB_FZ:
-
- #if (defined BHFA_YB_YK || defined BHFAGS_YB_YK) && !defined BH_FA_INONE_SW
- case PUB_BHYBTT_HZ: // 虚遥控,常规保护投退合闸压板(线路保护投停&&保护投入软压板)
- case PUB_BHYBTT_FZ: // 虚遥控,常规保护投退分闸压板(线路保护投停&&保护投入软压板)
- case PUB_FAYBTT_HZ: // 虚遥控,FA保护投退合闸压板(线路保护投停&&保护投入软压板)
- case PUB_FAYBTT_FZ: // 虚遥控,FA保护投退分闸压板(线路保护投停&&保护投入软压板)
- #ifdef BHFAGS_YB_YK
- case PUB_GOOSEYBTT_HZ: // 虚遥控,goose保护投退合闸压板(线路保护投停&&保护投入软压板)
- case PUB_GOOSEYBTT_FZ: // 虚遥控,goose保护投退分闸压板(线路保护投停&&保护投入软压板)
- #endif
- #endif
- #ifdef TQ_SOFT_YB
- case PUB_TQ_YB_HZ: //虚遥控,检同期软压板
- case PUB_TQ_YB_FZ: //虚遥控,检同期软压板
- #endif
- #ifdef JZS_FUNCTION
- case PUB_JZS_YB_HZ:
- case PUB_JZS_YB_FZ:
- #endif
-
- #ifdef YK_SOFT_YB
- case PUB_YK_YB_HZ: //虚遥控,遥控软压板
- case PUB_YK_YB_FZ: //虚遥控,遥控软压板
- #endif
- #ifdef YK_FA_ENBLE
- case PUB_YK_BS_FA_HZ: // "FA遥控闭锁-合",
- case PUB_YK_BS_FA_FZ:
- #endif
- #ifdef YK_FA_S_L_ENBLE
- case PUB_YK_FA_S_L_HZ: // "分段/联络-合",
- case PUB_YK_FA_S_L_FZ: // "分段/联络-分",
- #endif
- #ifdef JL_SOFT_YB
- case PUB_JL_YB_HZ: //虚遥控,停用自动解列软压板
- case PUB_JL_YB_FZ: //虚遥控,停用自动解列软压板
- #endif
- #ifdef FUNC_DRIVE
- case PUB_DRIVE_YB_ON: //虚遥控,不停电传动软压板投入
- case PUB_DRIVE_YB_OFF: //虚遥控,不停电传动软压板退出
- #endif
- return TRUE; //当前遥控修改软压板
- default:
- return FALSE;
- }
- #endif
- }
- static bool yk_pub_yb(int no)
- {
- switch (no-1)
- {
- #if defined GD_AREA_ECZD_2020 || defined CN_AREA_NANWANG_2022//二次指导意见开始将公共软压板放到公共定值
- case PUB_BHYB_HZ:
- case PUB_BHYB_FZ:
- case PUB_KZYB_HZ:
- case PUB_KZYB_FZ:
- #if defined BHFAGS_YB_YK && !defined BH_FA_INONE_SW
- case PUB_BHYBTT_HZ:
- case PUB_BHYBTT_FZ:
- case PUB_FAYBTT_HZ:
- case PUB_FAYBTT_FZ:
- case PUB_GOOSEYBTT_HZ:
- case PUB_GOOSEYBTT_FZ:
- #endif
- #ifdef JL_SOFT_YB
- case PUB_JL_YB_HZ:
- case PUB_JL_YB_FZ:
- #endif
- #ifdef TQ_SOFT_YB
- case PUB_TQ_YB_HZ:
- case PUB_TQ_YB_FZ:
- #endif
- #endif
- #ifdef FUNC_DRIVE
- case PUB_DRIVE_YB_ON:
- case PUB_DRIVE_YB_OFF:
- #endif
- #ifdef CN_AREA_NANWANG_2022
- case PUB_CHYB_HZ: // 虚遥控,重合闸压板
- case PUB_CHYB_FZ: // 虚遥控,分闸压板
- #endif
- return true;
- default:
- return false;
- }
- }
- int _RemoteCtrl(BYTE yktype,BYTE index,BYTE ykval,WORD wID)
- {
- static SET_VALUE tmpSetBuf[MAX_SET_NUMBER];// 定义定值查看及整定时的buf
-
- BYTE no,owner;
- int ret;
- WORD soeno;
- TRELAY_T *pR;
- // 无遥控信息空间
- if(g_yk_info == NULL)
- {
- return -2;
- }
- // 遥控前,先检查是否需要先复归。
- // 经过10ms等待,至少让5ms保护巡检中断执行一次,以保证各逻辑使用到遥分、遥合标志
- if(g_yk_info[index].yk_st == YK_STATUS_EXE && (dTCounter- g_yk_info[index].dTStart>=T_10ms))//遥控执行完成
- {
- // TODO: xbtong
- if (g_yk_info[index].owner >0)
- {
- owner=g_yk_info[index].owner-1;
- if (g_yk_info[index].no == (SW_DO_HZ+1)||g_yk_info[index].no == (SW_DO_YKH+1)||g_yk_info[index].no == (SW_DO_BHH+1))
- {
- g_tRelay[owner].uRmtSW.bYHExecute = false;
- g_tRelay[owner].uRmtSW.bYHExecute_fa = false;
- }
- if (g_yk_info[index].no == (SW_DO_FZ+1)||g_yk_info[index].no == (SW_DO_YKT+1)||g_yk_info[index].no == (SW_DO_BHT+1))
- {
- g_tRelay[owner].uRmtSW.bYTExecute = false;
- g_tRelay[owner].uRmtSW.bYTExecute_fa = false;
- }
- }
- memset(&g_yk_info[index],0,sizeof(REMOTEYKSTATUS));
- }
- // 不同主站遥控时,要拒绝
- if(!(g_yk_info[index].wMaster==0||g_yk_info[index].wMaster==wID))
- {
- return -3;
- }
- if(ykval==YK_VAL_HZ)
- {
- no=g_do_table[index].indexno[0];
- owner=g_do_table[index].owner;
- }
- else
- {
- no=g_do_table[index].indexno[1];
- owner=g_do_table[index].owner;
- }
- // 没有实际对应点
- if(no==0)
- {
- return -4;
- }
- #if defined IEC_JXYB_DEAL || defined FORBID_YK
- if(g_run_stu.bjx)
- return -28;
- #endif
-
- g_yk_info[index].wMaster=wID;
- pR=&g_tRelay[owner-1];
- //是遥控选择
- if(yktype == YK_TYPE_SEL)
- {
- #if !defined GD_AREA_FOS_2020 && !defined FOS_2021 //支持多次预置,每次预置重新计时
- // 国网最新要求:同一点不接受多次预置,就是说连续预置的情况下,
- // 第一次预置成功,第二次预置失败,第3次预置成功。
- if(g_yk_info[index].yk_st!= YK_STATUS_NONE && g_yk_info[index].yk_st!= YK_STATUS_TIMEOUT)
- {
- //已经有遥控命令选择或在执行
- memset(&g_yk_info[index],0,sizeof(REMOTEYKSTATUS));
- return -5;
- }
- else
- #endif
- {
- // 公共开出选择
- if(owner==0)
- {
- if(no > PUB_DO_NUM)
- {
- // 超范围
- return -6;
- }
- #ifdef GD_AREA_ECZD_SHAOGUAN_2021
- else if( (!(FA_ALL_EN(owner))) && (no ==PUB_YK_FA_S_L_HZ+1||no ==PUB_YK_FA_S_L_FZ+1))
- { //非电压电流型模式下,不允许遥控预置分段/联络开关
- return -29;
- }
- #endif
- else if(no==PUB_DO_RST+1)
- {
- // 远方复归
- }
- else if(no==PUB_DO_JS+1)
- {
- // 解除闭锁
- }
- #ifdef YK_FG_FAJS
- else if(no==PUB_DO_RST_FAJS+1)
- {
- // 远方复归+FA解锁
- }
- #endif
- else if(no==PUB_DO_RESTART+1)
- {
- // 远方重启
- }
- /*
- #ifdef BHFA_YB_YK
- else if((no==PUB_CHYB_HZ+1)||(no==PUB_CHYB_FZ+1)||(no == PUB_BHYB_HZ+1) || (no ==PUB_BHYB_FZ+1)||(no == PUB_KZYB_HZ+1) || (no ==PUB_KZYB_FZ+1)||
- (no==PUB_BHYBTT_HZ+1)||(no==PUB_BHYBTT_FZ+1)||(no == PUB_FAYBTT_HZ+1) || (no ==PUB_FAYBTT_FZ+1)) //压板定值操作
- #elif defined BHFAGS_YB_YK
- else if((no==PUB_CHYB_HZ+1)||(no==PUB_CHYB_FZ+1)||(no == PUB_BHYB_HZ+1) || (no ==PUB_BHYB_FZ+1)||(no == PUB_KZYB_HZ+1) || (no ==PUB_KZYB_FZ+1)||
- (no==PUB_BHYBTT_HZ+1)||(no==PUB_BHYBTT_FZ+1)||(no == PUB_FAYBTT_HZ+1) || (no ==PUB_FAYBTT_FZ+1)||(no == PUB_GOOSEYBTT_HZ+1) || (no ==PUB_GOOSEYBTT_FZ+1)) //压板定值操作
- #else
- else if((no==PUB_CHYB_HZ+1)||(no==PUB_CHYB_FZ+1)||(no == PUB_BHYB_HZ+1) || (no ==PUB_BHYB_FZ+1)||(no == PUB_KZYB_HZ+1) || (no ==PUB_KZYB_FZ+1))//压板定值操作
- #endif
- */
- #ifdef METERING_ENERGY
- else if(no==PUB_DD_CLR+1)
- {
-
- }
- else if(no==PUB_LLSOE_CLR+1)
- {
- }
- #endif
- #ifdef FUNC_DRIVE
- else if(no==PUB_DRIVE_HZ+1)
- {
- ;
- }
- #endif
- #ifdef FUNC_DRIVE_JY
- else if(no==PUB_UNSTOP_V_DRI_HZ+1)
- {
- ;
- }
- #endif
- #ifdef FUNC_RESET_EQU
- else if(no==PUB_RESET_EQU+1)
- {
- ;
- }
- #endif
- else if(ykEditYb(no))
- {
- //压板定值操作
- if(!g_run_stu.yf)
- {
- return -1;
- }
- }
- #ifdef BATTERY_WITH_COMM
- else if(no == (PUB_DO_DCHH+1))
- {
- // 电池启动活化
- }
- else if(no == (PUB_DO_HHTC+1))
- {
- // 电池退出活化
- }
- #endif
- else
- {
- if(sw_do_pub(no-1,SW_DO_TYPE_SELECT_ON) != 0)
- {
- return -8;
- }
- }
- }
- // 线路开出选择
- else
- {
- if(owner > g_sw_num||no > SW_DO_NUM)
- {
- // 超范围
- return -9;
- }
- else if((no == SW_DO_BHH+1) || (no == SW_DO_BHT+1))
- {
- return -9;
- }
- #ifdef YK_SOFT_YB
- else if(!pRunSet->bTT_SOFT_YK_YB && ykval==YK_VAL_TZ && (no ==SW_DO_YKT+1||no ==SW_DO_FZ+1))
- {
- return -26;
- }
- else if(!pRunSet->bTT_SOFT_YK_YB && ykval==YK_VAL_HZ && (no ==SW_DO_YKH+1||no ==SW_DO_HZ+1))
- {
- return -26;
- }
- #endif
- #ifndef GW_AREA_MAIN_2021
- else if((fa_bs_fz( owner-1)||pR->bBSTZ) && ykval==YK_VAL_TZ && (no ==SW_DO_YKT+1||no ==SW_DO_FZ+1))
- #else
- else if(pR->bBSTZ && ykval==YK_VAL_TZ && (no ==SW_DO_YKT+1||no ==SW_DO_FZ+1))
- #endif
- {
- //rt_printf("遮断闭锁,禁止分闸操作\r\n");
- return -24;
- }
- #ifndef GW_AREA_MAIN_2021
- else if(fa_bs_hz( owner-1)&& ykval==YK_VAL_HZ && (no ==SW_DO_YKH+1||no ==SW_DO_HZ+1))
- {
- return -25;
- }
- #endif
- else if(pR->run_stu.wcn && pRunSet->tSwSet[owner-1].bTT_WCN && ykval==YK_VAL_HZ && (no ==SW_DO_YKH+1||no ==SW_DO_HZ+1))
- {
- return -27;
- }
- else//不是压板操作,判断软压板状态
- {
- // 必须是总软压板投入和对应的线路软压板投入才允许动作。
- //if(pRunSet->tSwSet[owner-1].bTT_yf_YB==0)
- //{
- // return -10;
- //}
- //非远方状态 ,不允许遥控
- if(!g_run_stu.yf)
- {
- return -1;
- }
- if(sw_do(owner-1,no-1,SW_DO_TYPE_SELECT_ON) != 0)
- {
- return -11;
- }
- }
- }
- // 记录选择动作
- g_yk_info[index].yk_st=YK_STATUS_SEL;
- g_yk_info[index].no=no;
- g_yk_info[index].owner=owner;
- g_yk_info[index].val=ykval;
- g_yk_info[index].dTStart=dTCounter;
- soeno = (ykval==YK_VAL_HZ) ? EV_YH_SELECT : EV_YT_SELECT;
- soe_record_opt(soeno,((owner<<8)|no|(wID<<16)));
-
- return 0;
- }
- }
- else if(yktype == YK_TYPE_EXE)//是遥控执行
- {
- if((g_yk_info[index].yk_st!= YK_STATUS_SEL) // 和遥控选择的数据不对应
- ||(ykval != g_yk_info[index].val)
- ||(owner!= g_yk_info[index].owner)
- ||(no != g_yk_info[index].no))
-
- {
- if(g_yk_info[index].yk_st == YK_STATUS_TIMEOUT)
- {
- // 遥控超时
- ret = -21;
- }
- else
- { // 遥控不对应
- ret = -12;
- }
- memset(&g_yk_info[index],0,sizeof(REMOTEYKSTATUS));
- return ret;
- }
-
- g_yk_info[index].yk_st=YK_STATUS_EXE;
- g_yk_info[index].dTStart=dTCounter;
- // 公共开出执行
- if(owner==0)
- {
- if(no==PUB_DO_RST+1) //远方复归
- {
- ResetHzLed(0);
- SignalReset(0,true);
- //SignalReset(0,false);
- ret = 0;
- }
- else if(no==PUB_DO_JS+1) //远方解锁
- {
- ResetHzLed(0);
- g_run_stu.rmtjs= true;
- ret = 0;
- }
- #ifdef YK_FG_FAJS
- else if(no==PUB_DO_RST_FAJS+1)// 远方复归+FA解锁
- {
- ResetHzLed(0);
- SignalReset(0,true);
- g_run_stu.rmtjs= true;
- ret = 0;
- }
- #endif
- else if(no==PUB_DO_RESTART+1) //远方重启
- {
- rt_printf("遥控装置重启\r\n");
- g_restart_count = 3; // 3秒后重启
-
- ret = 0;
- }
- #ifdef BATTERY_WITH_COMM
- else if(no == (PUB_DO_DCHH+1))
- {
- bat_active(1); // 电池启动活化
- ret = 0;
- }
- else if(no == (PUB_DO_HHTC+1))
- {
- bat_act_off(1); // 电池退出活化
- ret = 0;
- }
- #endif
- #ifdef METERING_ENERGY
- else if(no==PUB_DD_CLR+1) //电度清零
- {
- u8 sw = 0;
- DWORD dd_val;
- dd_val = g_sw[0].dd[SW_DD_NOW1].fv*65536.0f;
- soe_record_ev(EV_DD_CLR+sw*EV_SW_NUM, 1, dd_val,0,0 );
- if(pRunSet->dd_calc_mode == 0)
- can_app_energy_clear(0, get_can_slot(0));
- soft_dd_val_clr();
- rt_printf("遥控电度清零\r\n");
- ret = 0;
- }
- #if 1
- else if(no==PUB_LLSOE_CLR+1)
- {
- bool b_ll_err=false;
- int ret2;
- ret2 = DelAllListDataFile(&eventd_pnaList);
-
- if(!ret2)
- {
- init_ll_db_file(&eventd_pnaList,"eventd_pna.dat",10,1+8+4+4*8+8+4*8);
- }
- else
- {
- b_ll_err = true;
- }
- rt_printf("%s(1):ret2=%d\r\n",__func__,ret2);
- ret2 = DelAllListDataFile(&eventd_pnbList);
- if(!ret2)
- {
- init_ll_db_file(&eventd_pnbList,"eventd_pnb.dat",10,1+8+4+4*8+8+4*8);
- }
- else
- {
- b_ll_err = true;
- }
- rt_printf("%s(2):ret2=%d\r\n",__func__,ret2);
-
- ret2 = DelAllListDataFile(&eventd_pncList);
- if(!ret2)
- {
- init_ll_db_file(&eventd_pncList,"eventd_pnc.dat",10,1+8+4+4*8+8+4*8);
- }
- else
- {
- b_ll_err = true;
- }
- rt_printf("%s(3):ret2=%d\r\n",__func__,ret2);
- ret2 = DelAllListDataFile(&eventd_flownList);
- if(!ret2)
- {
- init_ll_db_file(&eventd_flownList,"eventd_flown.dat",10,1+8+4+4*8);
- }
- else
- {
- b_ll_err = true;
- }
- rt_printf("%s(4):ret2=%d\r\n",__func__,ret2);
-
- ret2 = DelAllListDataFile(&eventd_llclrList);
- if(!ret2)
- {
- init_ll_db_file(&eventd_llclrList,"eventd_llclr.dat",10,1+8+4+4*8);
- }
- else
- {
- b_ll_err = true;
- }
- rt_printf("%s(5):ret2=%d\r\n",__func__,ret2);
- ret2 = DelAllListDataFile(&eventd_syntList);
- if(!ret2)
- {
- init_ll_db_file(&eventd_syntList,"eventd_synt.dat",10,1+8+4);
- }
- else
- {
- b_ll_err = true;
- }
- rt_printf("%s(6):ret2=%d\r\n",__func__,ret2);
- if(line_loss_event_start(METERING_EVT_CLEAR,EventNumData.sSOEClr_Num+1)>=1)
- {
- EventNumData.sSOEClr_Num++; //本地保存潮流方向总次数
- rt_printf("%s:SOEClr_Num=%d\r\n",__func__,EventNumData.sSOEClr_Num);
- }
- if(b_ll_err)
- ret = -30;
- else
- ret = 0;
- }
- #endif
- #endif
- /*#ifdef BHFA_YB_YK
- else if((no==PUB_CHYB_HZ+1)||(no==PUB_CHYB_FZ+1)||(no == PUB_BHYB_HZ+1) || (no ==PUB_BHYB_FZ+1)||(no == PUB_KZYB_HZ+1) || (no ==PUB_KZYB_FZ+1)||
- (no==PUB_BHYBTT_HZ+1)||(no==PUB_BHYBTT_FZ+1)||(no == PUB_FAYBTT_HZ+1) || (no ==PUB_FAYBTT_FZ+1)) //压板定值操作
- #elif defined BHFAGS_YB_YK
- else if((no==PUB_CHYB_HZ+1)||(no==PUB_CHYB_FZ+1)||(no == PUB_BHYB_HZ+1) || (no ==PUB_BHYB_FZ+1)||(no == PUB_KZYB_HZ+1) || (no ==PUB_KZYB_FZ+1)||
- (no==PUB_BHYBTT_HZ+1)||(no==PUB_BHYBTT_FZ+1)||(no == PUB_FAYBTT_HZ+1) || (no ==PUB_FAYBTT_FZ+1)||(no == PUB_GOOSEYBTT_HZ+1) || (no ==PUB_GOOSEYBTT_FZ+1)) //压板定值操作
- #else
- else if((no==PUB_CHYB_HZ+1)||(no==PUB_CHYB_FZ+1)||(no == PUB_BHYB_HZ+1) || (no ==PUB_BHYB_FZ+1)||(no == PUB_KZYB_HZ+1) || (no ==PUB_KZYB_FZ+1))//压板定值操作
- #endif*/
- #ifdef FUNC_DRIVE
- else if(no==PUB_DRIVE_HZ+1)
- {
- int sw=0;
- if(pRunSet->bTT_DRIVE
- && !gb_drive.b_err
- && !gb_drive.b_warning
- && !g_tRelay[sw].run_stu.chzbs
- && (!g_tRelay[sw].run_stu.bs || soe_check(EV_SH_BSFZ+sw*EV_SW_NUM) || soe_check(EV_BS_HA+sw*EV_SW_NUM))
- && !g_tRelay[sw].uBHQD.bFlag.bFZQD
- && !g_tRelay[sw].uBHQD.bFlag.bBHQD)
- {
- gb_drive.b_drive_on = true;
- gb_drive.b_drive_soe = true;
- gb_drive.b_drive_process = true;
- if(soe_check(EV_DRIVE_BEGIN+sw*EV_SW_NUM)==false)
- {
- soe_record_ev(EV_DRIVE_BEGIN+sw*EV_SW_NUM, 1, 0,0,0 );
- }
- ret = 0;
- }
- else
- {
- return -23;
- }
- }
- #endif
- #ifdef FUNC_DRIVE_JY
- else if(no==(PUB_UNSTOP_V_DRI_HZ+1))
- {
- int sw = 0;
- bool sb_mode_drive=false; //常规模式投入重合闸或就地FA模式投入得电合闸时为true
- if(FA_ALL_EN(sw))
- {
- if(g_tRelay[sw].tSWST.uSWST.bFlag.bDIHW && (pRunSet->tSwSet[sw].bTT_fa_poweron || pRunSet->tSwSet[sw].bTT_fa_lineon)) //电源侧得电合/负荷侧得电合
- {
- sb_mode_drive = true;
- }
- }
- else if(BH_ALL_EN(sw))
- {
- if(g_tRelay[sw].tCHZ.sta.bFlag.bCDWC) //重合闸充电完成
- {
- sb_mode_drive = true;
- }
- }
- if(pRunSet->tSwSet[sw].bTT_drive
- && !gb_drive.b_err
- && !gb_drive.b_warning
- && !g_tRelay[sw].run_stu.chzbs
- && !g_tRelay[sw].tSWST.uSWST.bFlag.bKZHL
- && (!g_tRelay[sw].run_stu.bs || soe_check(EV_SH_BSFZ+sw*EV_SW_NUM) || soe_check(EV_BS_HA+sw*EV_SW_NUM))
- && !g_tRelay[sw].uBHQD.bFlag.bFZQD
- && !g_tRelay[sw].uBHQD.bFlag.bBHQD
- && sb_mode_drive)
- {
- gb_drive.b_drive_on = true;
- gb_drive.b_drive_on_check = true;
- gb_drive.b_drive_success = true;
-
- if(soe_check(EV_DRIVE_TT_ERR+sw*EV_SW_NUM)==true) //定值投退异常返回
- {
- soe_record_ev(EV_DRIVE_TT_ERR+sw*EV_SW_NUM, 0, 0,0,0 );
- }
- rt_printf_time("遥控执行传动功能\r\n");
-
- ret = 0;
- }
- else
- {
- rt_printf("遥控执行传动功能失败,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n",pRunSet->tSwSet[sw].bTT_drive,gb_drive.b_err,gb_drive.b_warning,\
- g_tRelay[sw].run_stu.chzbs,g_tRelay[sw].tSWST.uSWST.bFlag.bKZHL,g_tRelay[sw].run_stu.bs,\
- soe_check(EV_SH_BSFZ+sw*EV_SW_NUM),soe_check(EV_BS_HA+sw*EV_SW_NUM),g_tRelay[sw].uBHQD.bFlag.bFZQD,g_tRelay[sw].uBHQD.bFlag.bBHQD);
- gb_drive.b_drive_on = false;
- gb_drive.b_drive_on_check = false;
- gb_drive.b_drive_success = false;
- if(soe_check(EV_DRIVE_FAIL+sw*EV_SW_NUM)==false) //传动启动失败
- {
- soe_record_ev(EV_DRIVE_FAIL+sw*EV_SW_NUM, 1, 0,0,0 );
- }
- if(soe_check(EV_DRIVE_FAIL+sw*EV_SW_NUM)==true) //传动启动失败返回
- {
- soe_record_ev(EV_DRIVE_FAIL+sw*EV_SW_NUM, 0, 0,0,0 );
- }
- if(!pRunSet->tSwSet[sw].bTT_drive) //定值投退异常
- {
- if(soe_check(EV_DRIVE_TT_ERR+sw*EV_SW_NUM)==false)
- {
- soe_record_ev(EV_DRIVE_TT_ERR+sw*EV_SW_NUM, 1, 0,0,0 );
- }
- }
- else //定值投退异常返回
- {
- if(soe_check(EV_DRIVE_TT_ERR+sw*EV_SW_NUM)==true)
- {
- soe_record_ev(EV_DRIVE_TT_ERR+sw*EV_SW_NUM, 0, 0,0,0 );
- }
- }
-
- if(soe_check(EV_DRIVE_END+sw*EV_SW_NUM)==false) //传动结束
- {
- soe_record_ev(EV_DRIVE_END+sw*EV_SW_NUM, 1, 0,0,0 );
- }
- if(soe_check(EV_DRIVE_END+sw*EV_SW_NUM)==true) //传动结束返回
- {
- soe_record_ev(EV_DRIVE_END+sw*EV_SW_NUM, 0, 0,0,0 );
- }
- return -23;
- }
- }
- #endif
- #ifdef FUNC_RESET_EQU
- else if(no==PUB_RESET_EQU+1)
- {
- gb_ResetEqu = true;
- rt_printf_time("遥控装置硬重启..\r\n");
- ret = 0;
- }
- #endif
- else if(ykEditYb(no))
- {
- int setno=0;
- int val=0;
- if(!g_run_stu.yf)
- {
- return -1;
- }
- #ifdef YK_SOFT_YB
- else if(!pRunSet->bTT_SOFT_YK_YB && ykval==YK_VAL_HZ && (no ==SW_DO_YKH+1||no ==SW_DO_HZ+1))
- {
- return -26;
- }
- #endif
- else if(fa_bs_hz( owner-1)&& ykval==YK_VAL_HZ && (no ==SW_DO_YKH+1||no ==SW_DO_HZ+1))
- {
- return -25;
- }
- else if(pR->run_stu.wcn && pRunSet->tSwSet[owner-1].bTT_WCN && ykval==YK_VAL_HZ && (no ==SW_DO_YKH+1||no ==SW_DO_HZ+1))
- {
- return -27;
- }
- #ifndef GW_AREA_MAIN_2021
- if(no==PUB_BHYB_HZ+1)
- {
- setno=SET_BH_YB;
- val=1;
- }
- else if(no==PUB_BHYB_FZ+1)
- {
- setno=SET_BH_YB;
- val=0;
- }
- else if(no==PUB_CHYB_HZ+1)
- {
- setno=SET_CHZ_YB;
- val=1;
- }
- else if(no==PUB_CHYB_FZ+1)
- {
- setno=SET_CHZ_YB;
- val=0;
- }
- else if(no==PUB_KZYB_FZ+1)
- {
- setno=SET_KZ_OUT_YB;
- val=0;
- }
- else if(no==PUB_KZYB_HZ+1)
- {
- setno=SET_KZ_OUT_YB;
- val=1;
- }
- #endif
- #if (defined BHFA_YB_YK || defined BHFAGS_YB_YK) && !defined BH_FA_INONE_SW
- else if(no==PUB_BHYBTT_FZ+1)
- {
- setno=SET_BH_YBTT;
- val=0;
- }
- else if(no==PUB_BHYBTT_HZ+1)
- {
- setno=SET_BH_YBTT;
- val=1;
- }
- else if(no==PUB_FAYBTT_FZ+1)
- {
- setno=SET_FA_YBTT;
- val=0;
- }
- else if(no==PUB_FAYBTT_HZ+1)
- {
- setno=SET_FA_YBTT;
- val=1;
- }
- #ifdef BHFAGS_YB_YK
- else if(no==PUB_GOOSEYBTT_FZ+1)
- {
- setno=SET_GOOSE_YBTT;
- val=0;
- }
- else if(no==PUB_GOOSEYBTT_HZ+1)
- {
- setno=SET_GOOSE_YBTT;
- val=1;
- }
- #endif
- #endif
- #ifdef TQ_SOFT_YB
- else if(no==PUB_TQ_YB_FZ+1)
- {
- setno=SET_TQ_YB;
- val=0;
- }
- else if(no==PUB_TQ_YB_HZ+1)
- {
- setno=SET_TQ_YB;
- val=1;
- }
- #endif
- #ifdef JZS_FUNCTION
- else if(no==PUB_JZS_YB_FZ+1)
- {
- setno=SET_MODE_JZS_TT;
- val=0;
- }
- else if(no==PUB_JZS_YB_HZ+1)
- {
- setno=SET_MODE_JZS_TT;
- val=1;
- }
- #endif
- #ifdef YK_SOFT_YB
- else if(no==PUB_YK_YB_FZ+1)
- {
- setno=SET_YK_YBTT;
- val=0;
- }
- else if(no==PUB_YK_YB_HZ+1)
- {
- setno=SET_YK_YBTT;
- val=1;
- }
- #endif
- #ifdef YK_FA_ENBLE
- else if(no==PUB_YK_BS_FA_HZ+1)// "FA遥控闭锁-合",
- {
- if(soe_check(EV_YK_BS_FA+0*EV_SW_NUM)==false) //
- soe_record_ev(EV_YK_BS_FA+0*EV_SW_NUM, 1, 0,0,0 );
- ret=-1;//不需要保存
- }
- else if(no==PUB_YK_BS_FA_FZ+1)// "FA遥控闭锁-分",
- {
- if(soe_check(EV_YK_BS_FA+0*EV_SW_NUM)==true) //
- soe_record_ev(EV_YK_BS_FA+0*EV_SW_NUM, 0, 0,0,0 );
- ret=-1;//不需要保存
- }
- #endif
- #ifdef YK_FA_S_L_ENBLE
- else if(no==PUB_YK_FA_S_L_HZ+1)
- {
- setno=SET_SL_TT;
-
- #if defined GD_AREA_ECZD_2020 || defined GD_AREA_HUIZHOU_2021
- val=0;
- #else
- val=2;
- #endif
- }
- else if(no==PUB_YK_FA_S_L_FZ+1)
- {
- setno=SET_SL_TT;
- val=1;
- }
- #endif
- #ifdef JL_SOFT_YB
- else if(no==PUB_JL_YB_FZ+1)
- {
- setno=SET_JL_YB;
- val=0;
- }
- else if(no==PUB_JL_YB_HZ+1)
- {
- setno=SET_JL_YB;
- val=1;
- }
- #endif
-
- #ifdef FUNC_DRIVE
- else if(no==PUB_DRIVE_YB_ON+1)
- {
- setno=SET_DRIVE;
- val=1;
- }
- else if(no==PUB_DRIVE_YB_OFF+1)
- {
- setno=SET_DRIVE;
- val=0;
- }
- #endif
- else
- {
- ret=-1;
- }
- #ifdef GD_AREA_ECZD_2020//二次指导意见开始将公共软压板放到公共定值
- /*if((no == PUB_BHYB_HZ+1) || (no ==PUB_BHYB_FZ+1)||(no == PUB_KZYB_HZ+1) || (no ==PUB_KZYB_FZ+1)
- #if defined BHFAGS_YB_YK && !defined BH_FA_INONE_SW
- ||(no==PUB_BHYBTT_HZ+1)||(no==PUB_BHYBTT_FZ+1)||(no == PUB_FAYBTT_HZ+1) || (no ==PUB_FAYBTT_FZ+1)||(no == PUB_GOOSEYBTT_HZ+1) || (no ==PUB_GOOSEYBTT_FZ+1)
- #endif
- #ifdef JL_SOFT_YB
- ||(no == PUB_JL_YB_HZ+1) || (no ==PUB_JL_YB_FZ+1)
- #endif
- #ifdef TQ_SOFT_YB
- ||(no == PUB_TQ_YB_HZ+1) || (no ==PUB_TQ_YB_FZ+1)
- #endif
- ) //公共定值*/
- if(yk_pub_yb(no))//公共定值
- {
- if(!ReadPara((void*)tmpSetBuf,EEP_PUB_ADDR+m_runsection*PUB_SETSIZE,PUB_SET_NUMBER,&tPubSetTable[0]))
- {
- rt_err_set(ERR_CODE_SET,0);
- GetDefPara((void*)tmpSetBuf,PUB_SET_NUMBER,&tPubSetTable[0]);
- }
- tmpSetBuf[setno].ff=val;
- if(SavePara((void*)tmpSetBuf,EEP_PUB_ADDR+m_runsection*PUB_SETSIZE,PUB_SET_NUMBER,&tPubSetTable[0]))
- {
- soe_record_opt(EV_YBSET_OK,0);
- MakeRunSet(false);
- rt_err_clr(ERR_CODE_SET,0);
- ret=0;
- }
- else
- {
- ret=-1;
- }
- }
- else//开关定值
- {
- if(!ReadPara((void*)tmpSetBuf,EEP_SET_ADDR+m_runsection*SETSIZE,SW_SET_NUMBER,&tSwSetTable[0]))
- {
- rt_err_set(ERR_CODE_SET,0);
- GetDefPara((void*)tmpSetBuf,SW_SET_NUMBER,&tSwSetTable[0]);
- }
- tmpSetBuf[setno].ff=val;
- if(SavePara((void*)tmpSetBuf,EEP_SET_ADDR+m_runsection*SETSIZE,SW_SET_NUMBER,&tSwSetTable[0]))
- {
- soe_record_opt(EV_YBSET_OK,0);
- MakeRunSet(false);
- rt_err_clr(ERR_CODE_SET,0);
- ret=0;
- }
- else
- {
- ret=-1;
- }
- }
- #else
- if(!ReadPara((void*)tmpSetBuf,EEP_SET_ADDR+m_runsection*SETSIZE,SW_SET_NUMBER,&tSwSetTable[0]))
- {
- rt_err_set(ERR_CODE_SET,0);
- GetDefPara((void*)tmpSetBuf,SW_SET_NUMBER,&tSwSetTable[0]);
- }
- tmpSetBuf[setno].ff=val;
- if(SavePara((void*)tmpSetBuf,EEP_SET_ADDR+m_runsection*SETSIZE,SW_SET_NUMBER,&tSwSetTable[0]))
- {
- soe_record_opt(EV_YBSET_OK,0);
- MakeRunSet(false);
- rt_err_clr(ERR_CODE_SET,0);
- ret=0;
- }
- else
- {
- ret=-1;
- }
- #endif
- }
- else
- {
- ret=sw_do_pub(no-1,SW_DO_TYPE_ON);
- }
- }
- // 线路开出执行
- else
- {
- {
- // 必须是总软压板投入和对应的线路软压板投入才允许动作。
- //if(pRunSet->tSwSet[owner-1].bTT_YB == 0 ||pRunSet->bTT_ZYB == 0 )
- //{
- // return -14;
- //}
- //非远方状态 ,不允许遥控
- if(!g_run_stu.yf)
- {
- return -1;
- }
- if( (no==SW_DO_HZ+1)|| (no==SW_DO_YKH+1))
- {
- if(g_tRelay[owner-1].uBHDZ.bFlag.bBHT) //正在保护出口,退出
- {
- return -15;
- }
- #ifdef TQ_SOFT_YB
- else if(pRunSet->tSwSet[owner-1].bTT_TQ&&g_tRelay[owner-1].run_stu.bTQ && g_tRelay[owner-1].run_stu.safe_auto && !g_tRelay[owner-1].run_stu.tytq &&pRunSet->bTT_TQ_YB )
- #else
- else if(pRunSet->tSwSet[owner-1].bTT_TQ&&g_tRelay[owner-1].run_stu.bTQ && g_tRelay[owner-1].run_stu.safe_auto )
- #endif
- {
- g_tRelay[owner-1].uRmtSW.bTQHz = true;
- return 0;
- }
- }
- if( (no==SW_DO_FZ+1)|| (no==SW_DO_YKT+1))
- {
- if(g_tRelay[owner-1].tCHZ.sta.bFlag.bHz) //正在重合闸出口,退出
- {
- return -17;
- }
- #ifdef YK_SOFT_YB
- else if(!pRunSet->bTT_SOFT_YK_YB && ykval==YK_VAL_TZ && (no ==SW_DO_YKT+1||no ==SW_DO_FZ+1))
- {
- return -26;
- }
- #endif
- #ifndef GW_AREA_MAIN_2021
- if((fa_bs_fz( owner-1)||pR->bBSTZ)&&ykval==YK_VAL_TZ)
- #else
- if(pR->bBSTZ&&ykval==YK_VAL_TZ)
- #endif
- {
- //rt_printf("遮断闭锁,禁止分闸操作\r\n");
- return -24;
- }
-
- sw_do(owner-1,SW_DO_BHDZ,SW_DO_TYPE_ON);
- }
- #ifdef CUSTOMIZE_BZT //备自投
- if( ((no-1) != SW_DO_DL1_HZ) && ((no-1) != SW_DO_DL2_HZ) && ((no-1) != SW_DO_FD_HZ)
- && ((no-1) != SW_DO_DL1_FZ) && ((no-1) != SW_DO_DL2_FZ) && ((no-1) != SW_DO_FD_FZ) )
- ret = sw_do(owner-1,no-1,SW_DO_TYPE_ON);
- else
- {
- rt_printf("\r\n 备自投遥控执行...");
- ret = BZT_ManualOnOffHandle(owner-1, no-1);
- }
- #else
- ret = sw_do(owner-1,no-1,SW_DO_TYPE_ON);
- #endif
- if(ret==0)
- {
- if(ykval==YK_VAL_HZ)
- {
- g_tRelay[owner-1].uRmtSW.bYHExecute = true;
- g_tRelay[owner-1].uRmtSW.bYHExecute_fa = true;
- }
- else
- {
- g_tRelay[owner-1].uRmtSW.bYTExecute = true;
- g_tRelay[owner-1].uRmtSW.bYTExecute_fa = true;
-
- }
- }
- }
- }
-
- if(ret==0)
- {
- if(ykval==YK_VAL_HZ)
- {
- soeno=EV_YH_EXECT;
- }
- else
- {
- soeno=EV_YT_EXECT;
-
- }
- soe_record_opt(soeno,((owner<<8)|no|(wID<<16)));
- return 0;
- }
- return -18;
- }
- else if(yktype == YK_TYPE_CANCEL)
- {
- if(g_yk_info[index].yk_st!= YK_STATUS_SEL)
- {
- return -19;
- }
- else
- {
- owner = g_yk_info[index].owner;
- no = g_yk_info[index].no;
-
- if(owner==0) // 公共开出
- {
- sw_do_pub(no-1,SW_DO_TYPE_SELECT_OFF);
- }
- else
- {
- sw_do(owner-1,no-1,SW_DO_TYPE_SELECT_OFF);
- }
-
- {
- char buf[64];
- sprintf(buf,"遥控取消成功--%s:开关%02d开出%02d",get_yk_owner(wID), owner,no);
- log_str_time(LOG_OPERATE,buf,0,0);
- }
- #ifdef SOE_YK_OPT
- soeno = (ykval==YK_VAL_HZ) ? EV_YH_EXCANCEL: EV_YT_EXCANCEL;
- soe_record_opt(soeno,((owner<<8)|no|(wID<<16)));
- #endif
- memset(&g_yk_info[index],0,sizeof(REMOTEYKSTATUS));
- return 0;
- }
- }
- return -20;
- }
- int RemoteCtrl(BYTE yktype,BYTE index,BYTE ykval,WORD wID)
- {
- int ret;
- char buf[128];
- ret = _RemoteCtrl(yktype,index,ykval,wID);
- if(ret != 0)
- {
- #ifdef SOE_YK_OPT
- BYTE no,owner;
- WORD soeno;
-
- if(ykval==YK_VAL_HZ)
- {
- no=g_do_table[index].indexno[0];
- owner=g_do_table[index].owner;
- }
- else
- {
- if(g_do_table[index].indexno[1])
- {
- no=g_do_table[index].indexno[1];
- }
- else
- {
- no=g_do_table[index].indexno[0];
- }
- owner=g_do_table[index].owner;
- }
- //soe
- if(yktype==YK_TYPE_SEL)
- {
- soeno = (ykval==YK_VAL_HZ) ? EV_YH_SELFAIL: EV_YT_SELFAIL;
- soe_record_opt(soeno,((owner<<8)|no|(wID<<16)));
- }
- else if(yktype==YK_TYPE_EXE)
- {
- soeno = (ykval==YK_VAL_HZ) ? EV_YH_EXFAIL: EV_YT_EXFAIL;
- soe_record_opt(soeno,((owner<<8)|no|(wID<<16)));
- }
- #endif
- sprintf(buf,"遥控失败--%s:%s(ykno=0x%04x,yktype=%d,ykThz=%d)",get_yk_owner(wID),RmtCtrl_Err(ret),g_do_table[index].cp,yktype,ykval);
- log_str_time(LOG_OPERATE,buf,0,0);
- rt_printf_time("%s\r\n",buf);
- }
- return ret;
- }
- /**************************************************************************
- 函数名称:ResetRctrl
- 函数版本:1.00
- 作者:
- 创建日期:2005.6.14
- 函数功能说明:复归遥控信息表,在通道通信异常时调用,清相关标志
-
- 修改原因:
- ***************************************************************************/
- void ResetRctrl(WORD wID)
- {
- int i;
- for(i=0;i<g_table_head->do_num;i++)
- {
- if(g_yk_info[i].wMaster==wID) //对应通道的遥控主站标示清零
- {
- memset(&g_yk_info[i],0,sizeof(REMOTEYKSTATUS));
- }
- }
- }
- char *get_comm_name(int index)
- {
- return (char *)ykownerstr[index];
- }
- char *get_yk_owner(u8 owner)
- {
- // BYTE owner=(lv>>16)&0xff; // 遥控来源
- int index=0;
- // 101遥控来源
- if(owner>=MASTER_101&&(owner<(MASTER_101+CFG_UART_NUM_MAX)))
- {
- index=owner-MASTER_101+1;
- }
- // 104遥控来源
- else if(owner>=MASTER_104&&(owner<(MASTER_104+CFG_UART_NUM_MAX+IEC104_TOTAL_SOCKETS)))
- {
- index=owner-MASTER_104+1;
- }
- // 维护工具
- else if(owner>=MASTER_MAINTAIN&&(owner<(MASTER_MAINTAIN+1)))
- {
- index=owner-MASTER_MAINTAIN+CFG_UART_NUM_MAX+IEC104_TOTAL_SOCKETS+1;
- }
- return (char *)ykownerstr[index];
- }
- /******************************************************************************
- 函数名称: send_rmt_yc
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2014-12-16
- 函数说明: 远动测试--遥测
- 参数说明: buf
- 返回值: 成功返回0.
- 修改记录:
- */
- int send_rmt_yc(u8 *buf)
- {
- g_rmt_set_yc.owner = buf[5];
- g_rmt_set_yc.indexno = buf[7];
- g_rmt_set_yc.val = (buf[8] | buf[9]<<8 | buf[10]<<16 | buf[11]<<24);
-
- return 0;
- }
- int send_rmt_dd(u8 *buf)
- {
- g_rmt_set_dd.owner = buf[5];
- g_rmt_set_dd.indexno = buf[7];
- g_rmt_set_dd.val = (buf[8] | buf[9]<<8 | buf[10]<<16 | buf[11]<<24);
-
- return 0;
- }
- /******************************************************************************
- 函数名称: send_rmt_yx
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2014-12-16
- 函数说明: 远动测试--遥信
- 参数说明: buf
- 返回值: 成功返回0.
- 修改记录:
- */
- int send_rmt_yx(u8 *buf)
- {
- bool bY1,bY2;
- struct timespec ts;
- YD_YXTABLE yd_yxtable;
- u8 stu=0;
- // 取当前时间
- clk_time_get(&ts);
- // 点表类型
- yd_yxtable.type = buf[2];
- // 点号
- yd_yxtable.no = buf[3] | buf[4]<<8;
- // 归属
- yd_yxtable.owner = buf[5];
- // 实点、虚点
- yd_yxtable.is_real = buf[6];
- // 资源表中索引
- yd_yxtable.indexno = buf[7];
- // 值
- yd_yxtable.value = (buf[8] | buf[9]<<8 | buf[10]<<16 | buf[11]<<24);
- // 双点
- if(yd_yxtable.type == 0x03)
- {
- int m;
- for(m=0; m<g_table_head->di_db_num; m++)
- {
- if(yd_yxtable.no == g_di_db_table[m].cp)
- {
- // 检索双点是否有效
- bY1=_yx_is_config(((g_di_db_table[m].no[0]>>8)&0xff),(g_di_db_table[m].no[0]&0xff));
- bY2=_yx_is_config(((g_di_db_table[m].no[1]>>8)&0xff),(g_di_db_table[m].no[1]&0xff));
- if(bY1&&bY2)
- {
- stu = yd_yxtable.value;
- break;
- }
- else
- {
- return 0;
- }
- }
- }
- }
- // 合并点
- else if(yd_yxtable.type == 0x04)
- {
- int m;
- for(m=0; m<g_table_head->dimerge_num; m++)
- {
- if(yd_yxtable.no==g_di_merge_table[m].cp)
- {
- // 检索合并点是否有效
- bY1=_yx_is_config(((g_di_merge_table[m].no[0]>>8)&0xff),(g_di_merge_table[m].no[0]&0xff));
- if(bY1)
- {
- stu = g_di_merge_table[m].is_inv_all ? !yd_yxtable.value : yd_yxtable.value;
- break;
- }
- else
- {
- return 0;
- }
- }
- }
- }
- // 单点
- else
- {
- int m;
- for(m=0; m<g_table_head->di_num; m++)
- {
- if(yd_yxtable.no==g_di_table[m].cp)
- {
- bY1 =_yx_is_config(yd_yxtable.owner,yd_yxtable.indexno);
- if(bY1)
- {
- stu = g_di_table[m].is_inverse ? !yd_yxtable.value : yd_yxtable.value;
- break;
- }
- else
- {
- return 0;
- }
- }
- }
- }
- // TODO:值需要确认
- soe_record_tst(yd_yxtable.no,stu);
-
- return 0;
- }
- /******************************************************************************
- 函数名称: send_rmt_yk
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2014-12-16
- 函数说明: 远动测试--遥控
- 参数说明: buf
- 返回值: 成功返回0.
- 修改记录:
- */
- int send_rmt_yk(u8 *buf)
- {
- u32 value, i;
- u16 indexno;
- u8 ykThz,v;
- int ret;
-
- indexno = buf[3] | buf[4]<<8;
- value = (buf[8] | buf[9]<<8 | buf[10]<<16 | buf[11]<<24);
- if (value == 0)
- {
- ykThz = YK_VAL_TZ;
- }
- else
- {
- ykThz = YK_VAL_HZ;
- }
-
- for(i=0;i<g_table_head->do_num;i++) //查找遥控转发表,看是否有有效的遥控点
- {
- if(indexno != g_do_table[i].cp) // 遥控点号对应
- {
- continue;
- }
-
- // 如果配置了级联通道,转发
- if(g_do_table[i].link_ch)
- {
- v = (ykThz == YK_VAL_HZ) ? 1 : 0;
- if(lnk_master_yk(&g_do_table[i] ,0xff,6,v) == 0)
- {
- return 0;
- }
- {
- return -22;
- }
- }
- else
- {
- ret = RemoteCtrl(YK_TYPE_SEL,i,ykThz,MASTER_MAINTAIN);
- if(ret != 0)
- {
- return ret;
- }
-
- ret = RemoteCtrl(YK_TYPE_EXE,i,ykThz,MASTER_MAINTAIN);
- if(ret != 0)
- {
- return ret;
- }
-
- return 0;
- }
- }
- // 返回"没有实际对应点,请检查遥控点表"
- return -4;
- }
- /*------------------------------ 内部函数 -------------------------------------
- 内部函数以下划线‘_’开头,不需要检查参数的合法性.
- */
- bool check_fault(void)
- {
- #ifdef GW_AREA_MAIN_2021
- int sw;
- int soeno;
- for(sw=0;sw<g_sw_num;sw++) //保护动作
- {
- int i;
- bool bY1=false;
- TRELAY_T *pR=&g_tRelay[sw];
- soeno = EV_SW_FAULT_ALL + sw*EV_SW_NUM;
- for(i=0;i<=OC_GLBS;i++)
- {
- bY1|=(pR->tOC[i].sta.bFlag.bTz||pR->tOC[i].sta.bFlag.bGj);
- // TODO 过流关失压录波,跑台体 EWen
- // if(i<=OC_LL)
- // g_ban_waverec.bban_losevolt_waverec |=bY1;
- }
- bY1|= (pR->tCHZ.sta.bFlag.bHz
- // || pR->tXDLCHZ.sta.bFlag.bHz // TODO EWen
- || pR->tU0TZ.uZOV.bFlag.bTz
- || pR->tXXTZ.uZOV.bFlag.bTz
- || pR->tLostVot.uLostVot.bFlag.bTz
- // || pR->tJXJD.uJxjdFlag.bFlag.bTz // TODO EWen
- );
- // 增加小电流接地
- if (pRunSet->tSwSet[sw].bTT_xdlsg)
- {
- bY1|= xdl_is_dz(sw) ;
- }
-
- if(bY1)
- {
- if(soe_check(soeno)==false)
- {
- soe_record_ev(soeno, 1, 0,0,0);
- }
- return true;
- }
- else
- {
- if(soe_check(soeno)==true)
- {
- soe_record_ev(soeno, 0, 0,0,0);
- }
- }
- }
- #else
- int sw;
- bool bY=false;
- for(sw=0;sw<g_sw_num;sw++) //保护动作
- {
- TRELAY_T *pR=&g_tRelay[sw];
- int i;
- bool bY1=false;
- for(i=0;i<=FA_DLBS;i++)
- {
- bY1|=(pR->tOC[i].sta.bFlag.bTz||pR->tOC[i].sta.bFlag.bGj);
- }
- bY1|=pR->tgoc.sta.bFlag.bglTz
- #if defined GD_AREA_ZHONGSHAN || defined GD_AREA_ZHONGSHAN_2020 || defined GD_AREA_MAIN_2020
- ||pR->tgoc.sta.bFlag.bgl2Tz
- #endif
- ||pR->tgoc.sta.bFlag.blxTz
- ||pR->tgoc.sta.bFlag.bgzglTz
- ||pR->tgoc.sta.bFlag.bsdTz
- ||pR->tgoc.sta.bFlag.bextTz
- ||pR->tgoc.sta.bFlag.berrTz
- ||pR->tgoc.sta.bFlag.bllhz;
-
- bY1|=pR->uGLFSX.bFlag.bFXDZ;
-
- bY1|= (pR->tCHZ.sta.bFlag.bHz
- || pR->tU0TZ.uZOV.bFlag.bTz
- || pR->tDYJL.sta.bFlag.bTz
- || pR->tPLJL.sta.bFlag.bTz
- ||pR->tXXTZ.uZOV.bFlag.bTz
- || pR->tLostVot.uLostVot.bFlag.bTz
- );
- pR->bARSTFLT=bY1;//sw sgz
- bY |=bY1;//sgz
- }
- //sgz 标志
- if(bY)
- {
- g_protect.bARSTFLT=true;
- return true;
- }
- #endif
- return false;
- }
- void clear_tfd_fault(void)
- {
- int sw;
- for(sw=0;sw<g_sw_num;sw++)
- {
- TRELAY_T *pR=&g_tRelay[sw];
-
- // 复归停复电逻辑
- pR->uTFDDZ.bFlag.RE_Power = 0;
- pR->uTFDDZ.bFlag.JH_PowerCut = 0;
- pR->uTFDDZ.bFlag.GZ_PowerCut = 0;
- pR->uTFDDZ.bFlag.JY_Fault = 0;
- pR->uTFDDZ.bFlag.IS_Run= 0;
- ResetTR(&pR->tGZ_Powercut_30s);
- ResetTR(&pR->tJH_Powercut_30s);
- ResetTR(&pR->tFDU_Powerrestore_30s);
- ResetTR(&pR->tFDI_Powerrestore_30s);
- ResetTR(&pR->tFDU_Charge_30s);
- ResetTR(&pR->tFDI_Charge_30s);
- ResetTR(&pR->tCharge_30s);
- }
-
- }
- /******************************************************************************
- 函数名称: _yk_polling
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2014-12-16
- 函数说明: 遥控巡检
- 参数说明: 无
- 修改记录:
- */
- static void _yk_polling(void)
- {
- int i;
- if(g_yk_info == NULL)
- {
- return;
- }
-
- for(i=0;i<g_table_head->do_num;i++)
- {
- switch(g_yk_info[i].yk_st)
- {
- case YK_STATUS_SEL:
- if(dTCounter- g_yk_info[i].dTStart>=tRunPara.dYKTime)//遥控选择超时
- {
- WORD soeno;
- if(g_yk_info[i].val==YK_VAL_HZ)
- {
- soeno=EV_YH_SELTOUT;
- }
- else
- {
- soeno=EV_YT_SELTOUT;
- }
- soe_record_opt(soeno,((g_yk_info[i].owner<<8)|g_yk_info[i].no|(g_yk_info[i].wMaster<<16)));
- memset(&g_yk_info[i],0,sizeof(REMOTEYKSTATUS));
- // 置遥控超时状态,方便用户查看
- g_yk_info[i].yk_st = YK_STATUS_TIMEOUT;
- }
- break;
- case YK_STATUS_EXE:
- //经过10ms等待,至少让5ms保护巡检中断执行一次,以保证各逻辑使用到遥分、遥合标志
- if(dTCounter- g_yk_info[i].dTStart>=T_10ms)//遥控执行完成
- {
- // TODO: xbtong
- if (g_yk_info[i].owner >0)
- {
- int owner=g_yk_info[i].owner-1;
- if( (g_yk_info[i].no == (SW_DO_HZ+1))||(g_yk_info[i].no == (SW_DO_YKH+1))||(g_yk_info[i].no == (SW_DO_BHH+1)))
- {
- g_tRelay[owner].uRmtSW.bYHExecute = false;
- g_tRelay[owner].uRmtSW.bYHExecute_fa = false;
- }
- if ((g_yk_info[i].no == (SW_DO_FZ+1))||(g_yk_info[i].no == (SW_DO_YKT+1))||(g_yk_info[i].no == (SW_DO_BHT+1)))
- {
- g_tRelay[owner].uRmtSW.bYTExecute = false;
- g_tRelay[owner].uRmtSW.bYTExecute_fa = false;
- }
- }
- memset(&g_yk_info[i],0,sizeof(REMOTEYKSTATUS));
- }
- break;
-
- default:
- break;
- }
- }
- }
- /**************************************************************************
- 函数名称:_equerr_check
- 函数版本:1.00
- 作者:
- 创建日期:2008.9.24
- 函数功能说明:装置故障判断
-
- 输入参数:
- 其他输入:
- 输出参数:
- 返回值: 无
- */
- static void _equerr_check(void)
- {
- #ifdef GD_AREA_PROTECTOR
- u32 sw=0;
- #endif
-
- //装置硬件故障
- if(rt_err_count_hw()==0)
- {
- if(soe_check(EV_EQU_ERR_HW))
- {
- soe_record_ev(EV_EQU_ERR_HW, 0, 0,0,0 );
- }
- }
- else
- {
- if(!soe_check(EV_EQU_ERR_HW))
- {
- soe_record_ev(EV_EQU_ERR_HW, 1, 0,0,0 );
- }
- #ifdef GD_AREA_PROTECTOR
- sw_do(sw,SW_EQU_ERR,SW_DO_TYPE_ON);
- #endif
- }
- //装置软件故障
- if(rt_err_count_sw()==0)
- {
- if(soe_check(EV_EQU_ERR_SW))
- {
- soe_record_ev(EV_EQU_ERR_SW, 0, 0,0,0 );
- }
- }
- else
- {
- if(!soe_check(EV_EQU_ERR_SW))
- {
- soe_record_ev(EV_EQU_ERR_SW, 1, 0,0,0 );
- }
- #ifdef GD_AREA_PROTECTOR
- sw_do(sw,SW_EQU_ERR,SW_DO_TYPE_ON);
- #endif
- }
- #ifdef __IEC61850_GOOSE_FUNC__
- if(goose_get_init_flag() >0)
- {
- if(gi_platelib_state != IEC61850_LIB_INIT_SUCCESS&&BH_GOOSE_EN(0)) // 智能FA投入,61850库初始化失败
- {
- if(soe_check(EV_61850_ERR)==false)
- {
- soe_record_ev(EV_61850_ERR,1, 0,0,0 );
- }
- }
- else
- {
- if(soe_check(EV_61850_ERR)==true)
- {
- soe_record_ev(EV_61850_ERR,0, 0,0,0 );
- }
- }
- }
- #endif
- }
- /**************************************************************************
- 函数名称:_boarderr_check
- 函数版本:1.00
- 作者:
- 创建日期:2008.9.24
- 函数功能说明:子板故障判断
-
- 输入参数:
- 其他输入:
- 输出参数:
- 返回值: 无
- */
- static void _boarderr_check(void)
- {
- int i;
- for(i=0; i<EQU_SLOT_NUM_MAX; i++)// 分板故障判断
- {
- if(g_board_info[i].is_check == 0) // 不需要检查的子板,直接跳过
- {
- continue;
- }
- if(g_board_info[i].errcode==0) //板卡正常
- {
- if(rt_err_clr(ERR_CODE_SB_FAULT,i) == 2)
- {
- soe_record_ev(EV_BOARDERR, 0, 0,0,0 );
- }
- }
- else
- {
- if(rt_err_set(ERR_CODE_SB_FAULT,i) == 2)
- {
- soe_record_ev(EV_BOARDERR, 1, 0,0,0 );
- }
- }
- }
- }
- /**************************************************************************
- 函数名称:_signrst_auto
- 函数版本:1.00
- 作者:
- 创建日期:2008.9.24
- 函数功能说明:告警信号自动复归
-
- 输入参数:
- 其他输入:
- 输出参数:
- 返回值: 无
- */
- static void _signrst_auto(void)
- {
- if(tRunPara.dTRstT>0&&tRunPara.bAutoRst) // 自动复归投入,且复归时间不为零,故障消失后,启动定时自动复归
- {
- bool bY1;
- bool bFault=g_protect.bARSTFLT;//check_fault();
- g_protect.bARSTFLT=false;
-
- bY1 = ((!bFault) && (run_status_dz_all()||g_tRelay[0].run_stu.chzdz)); //计时启动条件,有告警信号,故障已消失
- if(bFault) //计时启动条件,有告警信号
- {
- dTRstTime=dTCounter;
- }
- if(bY1)
- {
- //if((dTCounter-dTRstTime)<T_1s) rt_printf_time("自动复归启动...\r\n");
- if((dTCounter-dTRstTime)>tRunPara.dTRstT)
- {
- rt_printf_time("自动复归时间到...\r\n");
- ResetHzLed(0);
- SignalReset(0,false);
- dTRstTime=dTCounter;
- }
- }
- else
- {
- dTRstTime=dTCounter;
- }
-
- }
- else
- {
- dTRstTime=dTCounter;
- }
- if(tRunPara.dTRstT>=0&&tRunPara.bAutoRst) // 自动复归投入,且复归时间为0 ,装置正常运行后自动复归
- {
- int sw;
- for(sw=0;sw<g_sw_num;sw++) // 按开关复归,复归条件为无故障、故障产生过,开关在合位
- {
- TRELAY_T *pR=&g_tRelay[sw];
- RUN_STU_SW *prun=&g_tRelay[sw].run_stu;
-
- bool bY1=pR->bARSTFLT;
- pR->bARSTFLT=0;
- #ifdef GD_AREA_ZHAOQING_FENGKAI
- if((!bY1)&&(prun->dz==RY_DZ_XYBS || prun->dz==RY_DZ_BHT)&& pR->run_stu.sw==2)//((!bY1)&&(!pR->tCHZ.sta.bFlag.bCHDZ)&&(prun->dz==RY_DZ_XYBS || prun->dz==RY_DZ_BHT)&& pR->run_stu.sw==2) // 开关在合位,并且本开关无故障()
- {
- //rt_printf("合位复归...\r\n");
- //SignalReset(sw+1,false);
- if(!pR->tCHZ.sta.bFlag.bCHDZ)
- {
- rt_printf("合位复归...\r\n");
- SignalReset(sw+1,false);
- }
- else
- {
- led_set_sw(sw,SW_LED_CHZ, LED_OFF);
- }
- }
- #else
- if((!bY1)&&(prun->dz==RY_DZ_XYBS || prun->dz==RY_DZ_BHT)&& pR->run_stu.sw==2) // 开关在合位,并且本开关无故障()(!pR->tCHZ.sta.bFlag.bCHDZ)&&
- {
- //rt_printf("合位复归...\r\n");
- rt_printf(".");
- #ifndef GD_AREA_GUANGZHOU_FTU //广州FTU不进入下面函数,否则相关故障灯点亮后合闸不会自动复归
- SignalReset(sw+1,false);
- #endif
- }
- #endif
- }
- }
- }
- #if 0
- void _tf_pf_rst_auto(void)
- {
- int sw;
- struct timespec ts;
- struct rtc_time_t tm;
- static u8 stu_bk=0,uSDTz=0,uSDGj=0;
- if((stu_bk!=g_autorst[0].stu)
- ||(uSDTz!=tOC[0].uSDTz.bFlag.bTz)
- ||(uSDGj!=tOC[0].uSDGj.bFlag.bGj))
- {
- clk_time_get(&ts);
- timespec_to_rtc(ts,&tm, 1);
-
- rt_printf("stu=%d,uSDTz=%d,uSDGj=%d:%04d-%02d-%02d %02d:%02d:%02d:%09d\r\n",
- g_autorst[0].stu,tOC[0].uSDTz.bFlag.bTz,tOC[0].uSDGj.bFlag.bGj,
- tm.year + 2000,
- tm.month,
- tm.day,
- tm.hour,
- tm.min,
- tm.ms/1000,
- ts.tv_nsec);
- stu_bk = g_autorst[0].stu;
- uSDTz=tOC[0].uSDTz.bFlag.bTz;
- uSDGj=tOC[0].uSDGj.bFlag.bGj;
- }
- if (!pRunSet->dT_TF)
- {
- memset (&g_autorst, 0, sizeof(g_autorst));
- return;
- }
- for(sw=0; sw<SWITCH_NUM_MAX; sw++)
- {
- // 线路有压、无压
- g_autorst[sw].xlyy = (g_run_stu.pt1yy || g_run_stu.pt2yy);
- g_autorst[sw].xlwy = !g_autorst[sw].xlyy;
-
- // 开关位置
- g_autorst[sw].swfw = tSWST[sw].uSWST.bFlag.bTZWZ;
- g_autorst[sw].swhw = tSWST[sw].uSWST.bFlag.bHZWZ;
- // 线路故障
- g_autorst[sw].xl_err = (tOC[sw].uSDTz.bFlag.bTzBk||tOC[sw].uSDGj.bFlag.bGjBk
- ||tOC[sw].uGLTz.bFlag.bTzBk||tOC[sw].uGLGj.bFlag.bGjBk
- ||tOC[sw].uGFHTz.bFlag.bTzBk||tOC[sw].uGFHGj.bFlag.bGjBk
- ||tOC[sw].uLX1Tz.bFlag.bTzBk||tOC[sw].uLX1Gj.bFlag.bGjBk
- ||tOC[sw].uLX2Tz.bFlag.bTzBk||tOC[sw].uLX2Gj.bFlag.bGjBk);
- // 空闲态
- if (g_autorst[sw].stu == 0)
- {
- // 线路正常,进入正常态
- if (g_autorst[sw].xlyy && g_autorst[sw].swhw)
- {
- g_autorst[sw].stu = 1;
- }
- }
- // 正常态
- if (g_autorst[sw].stu == 1)
- {
- // 检测到故障,进入故障态
- if (g_autorst[sw].xl_err)
- {
- g_autorst[sw].stu = 2;
- }
- }
- // 故障态
- if (g_autorst[sw].stu == 2)
- {
- // 检测到无压或分位,初始化线路故障后恢复正常定时器,进入故障解除态
- if (g_autorst[sw].xlwy || g_autorst[sw].swfw)
- {
- g_autorst[sw].xl_ok_time = dTCounter;
- g_autorst[sw].stu = 3;
- }
- // 故障自动消失,线路正常,返回正常态
- if ((!g_autorst[sw].xl_err)
- && (g_autorst[sw].xlyy && g_autorst[sw].swhw))
- {
- g_autorst[sw].stu = 1;
- }
- }
- // 故障解除态
- if (g_autorst[sw].stu == 3)
- {
- // 延时时间内,线路正常,初始化线路故障判定定时器,进入线路恢复态
- if ((dTCounter - g_autorst[sw].xl_ok_time) <= pRunSet->dT_XL_OK)
- {
- if (g_autorst[sw].xlyy && g_autorst[sw].swhw)
- {
- g_autorst[sw].xl_err_time = dTCounter;
- g_autorst[sw].stu = 4;
- }
- }
- // 否则判定为永久故障,复归历史的瞬时故障,并返回空闲态
- else
- {
- g_autorst[sw].pf = 1;
- g_autorst[sw].tf = 0;
- g_autorst[sw].stu = 0;
- }
- }
-
- // 线路恢复态
- if (g_autorst[sw].stu == 4)
- {
- // 延时时间内,有故障,返回故障态
- if ((dTCounter - g_autorst[sw].xl_err_time) <= pRunSet->dT_XL_ERR)
- {
- if (g_autorst[sw].xl_err)
- {
- g_autorst[sw].stu = 2;
- }
- }
- // 否则判定为瞬时故障,复归历史的永久故障,并返回正常态
- else
- {
- g_autorst[sw].tf = 1;
- g_autorst[sw].pf = 0;
- g_autorst[sw].tf_time = dTCounter;
- g_autorst[sw].stu = 1;
- }
- }
- // 瞬时故障自动复归
- if (g_autorst[sw].tf)
- {
- // 瞬时故障延时到,复归瞬时故障
- if ((dTCounter - g_autorst[sw].tf_time) > pRunSet->dT_TF)
- {
- g_autorst[sw].tf = 0;
- _sw_signal_reset(sw);
- }
- }
- // 瞬时故障SOE记录
- if(g_autorst[sw].tf)
- {
- if(!soe_check(EV_TF_ERR+sw*EV_SW_NUM))
- {
- clk_time_get(&ts);
- timespec_to_rtc(ts,&tm, 1);
- rt_printf("瞬时故障发生:%04d-%02d-%02d %02d:%02d:%02d:%09d\r\n",
- tm.year + 2000,
- tm.month,
- tm.day,
- tm.hour,
- tm.min,
- tm.ms/1000,
- ts.tv_nsec);
-
- soe_record_ev(EV_TF_ERR+sw*EV_SW_NUM,1,0,0,0);
- }
- }
- else
- {
- if(soe_check(EV_TF_ERR+sw*EV_SW_NUM))
- {
- rt_printf("瞬时故障返回\r\n");
- soe_record_ev(EV_TF_ERR+sw*EV_SW_NUM,0,0,0,0);
- }
- }
- // 永久故障SOE记录
- if(g_autorst[sw].pf)
- {
- if(!soe_check(EV_PF_ERR+sw*EV_SW_NUM))
- {
- rt_printf("永久故障发生\r\n");
-
- soe_record_ev(EV_PF_ERR+sw*EV_SW_NUM,1,0,0,0);
- }
- }
- else
- {
- if(soe_check(EV_PF_ERR+sw*EV_SW_NUM))
- {
- rt_printf("永久故障返回\r\n");
- soe_record_ev(EV_PF_ERR+sw*EV_SW_NUM,0,0,0,0);
- }
- }
- tOC[sw].uSDTz.bFlag.bTzBk = tOC[sw].uSDTz.bFlag.bTz;
- tOC[sw].uGLTz.bFlag.bTzBk = tOC[sw].uGLTz.bFlag.bTz;
- tOC[sw].uGFHTz.bFlag.bTzBk = tOC[sw].uGFHTz.bFlag.bTz;
- tOC[sw].uLX1Tz.bFlag.bTzBk = tOC[sw].uLX1Tz.bFlag.bTz;
- tOC[sw].uLX2Tz.bFlag.bTzBk = tOC[sw].uLX2Tz.bFlag.bTz;
- tOC[sw].uSDGj.bFlag.bGjBk = tOC[sw].uSDGj.bFlag.bGj;
- tOC[sw].uGLGj.bFlag.bGjBk = tOC[sw].uGLGj.bFlag.bGj;
- tOC[sw].uGFHGj.bFlag.bGjBk = tOC[sw].uGFHGj.bFlag.bGj;
- tOC[sw].uLX1Gj.bFlag.bGjBk = tOC[sw].uLX1Gj.bFlag.bGj;
- tOC[sw].uLX2Gj.bFlag.bGjBk = tOC[sw].uLX2Gj.bFlag.bGj;
-
- }
- }
- static void _sw_signal_reset(int sw)
- {
- int bRst=0;
- bool lx_rst,gl_rst=0;
- //收保护动作灯
- if(!(tOC[sw].uSDTz.bFlag.bTz||tOC[sw].uSDGj.bFlag.bGj))
- {
- tOC[sw].bSDLed=false;
- }
- if(!(tOC[sw].uGLTz.bFlag.bTz||tOC[sw].uGLGj.bFlag.bGj))
- {
- tOC[sw].bGLLed=false;
- }
- if(!(tOC[sw].uGFHTz.bFlag.bTz||tOC[sw].uGFHGj.bFlag.bGj))
- {
- tOC[sw].bGFHLed=false;
- }
- if(!(tOC[sw].uLX1Tz.bFlag.bTz||tOC[sw].uLX1Gj.bFlag.bGj))
- {
- tOC[sw].bLX1Led=false;
- }
- if(!(tOC[sw].uLX2Tz.bFlag.bTz||tOC[sw].uLX2Gj.bFlag.bGj))
- {
- tOC[sw].bLX2Led=false;
- }
- if (tOC[sw].bSDLed || tOC[sw].bGLLed || tOC[sw].bGFHLed || tOC[sw].bLX1Led || tOC[sw].bLX2Led)
- {
- bRst = 1;
- }
- if(tOC[sw].bSDLed || tOC[sw].bGLLed || tOC[sw].bGFHLed)
- {
- gl_rst = 1;
- }
- if(tOC[sw].bLX1Led || tOC[sw].bLX2Led)
- {
- lx_rst = 1;
- }
- if (tJS[sw].uGLJS.bFlag.bTz||tJS[sw].uLXJS.bFlag.bTz
- || tSW_CH[sw].uCHJD.bFlag.bHz
- || tU0TZ[sw].uZOV.bFlag.bTz
- || tOC[sw].uBSTZ.bFlag.bBSTZ
- || tLostVot[sw].uLostVot.bFlag.bTz
- || tSDHZ[sw].bL_BSLed
- || tSDHZ[sw].bS_BSLed)
- {
- bRst = 1;
- }
-
- if(!gl_rst)
- {
- led_set_sw(sw,SW_LED_GL, LED_OFF);
- }
- if(!lx_rst)
- {
- led_set_sw(sw ,SW_LED_JD, LED_OFF);
- }
- if(!bRst)
- {
- led_set_sw(sw ,SW_LED_DZ, LED_OFF);
- g_run_stu.dz[sw] = 0;
- }
- }
- #endif
- /******************************************************************************
- 函数名称: _yx_is_config
- 函数版本: 01.01
- 创建作者: xxxxxx
- 创建日期: 2014-12-16
- 函数说明: 检索遥信的板卡和硬件编号
- 参数说明: buf
- 返回值: 成功返回0.
- 修改记录:
- */
- int _yx_is_config(WORD owner,WORD index)
- {
- if(index == 0)
- {
- return false;
- }
- index--;
-
- if(owner==0) //公共开入
- {
- if(index < PUB_DI_NUM)
- {
- if((short)g_sw_pub.di_cfg_index[index] == INDEX_INVALLID)
- {
- return false;
- }
- }
- }
- else
- {
- if(index < SW_DI_NUM)
- {
- if((short)g_sw[owner-1].di_cfg_index[index] == INDEX_INVALLID)
- {
- return false;
- }
- }
- }
-
- return true;
- }
- #ifdef FUNC_RESET_EQU
- bool gb_ResetEqu = false;
- void equ_PowerRest(void)
- {
- static DWORD s_dT_3s=0;
- static bool b_FirstIn = true;
- if(gb_ResetEqu)
- {
- if(b_FirstIn)
- {
- s_dT_3s = dTCounter;
- b_FirstIn = false;
- }
- if((dTCounter-s_dT_3s) >= 3*T_1s)
- {
- s_dT_3s = 0;
- b_FirstIn = true;
- gb_ResetEqu =false;
- rt_printf_time("3S延时到,断开常闭继电器重启装置\r\n");
- if(sw_do_pub(PUB_RESET_EQU,SW_DO_TYPE_ON) != 0)
- {
- rt_printf("硬重启失败,检查通道配置!!!\r\n");
- }
- }
- }
- }
- #endif
- /*------------------------------ 测试函数 -------------------------------------
- 一个实体文件必须带一个本模块的测试函数来进行单元测试,如果的确不方便在本模块中
- 进行单元测试,必须在此注明实际的测试位置(例如在哪个实体文件中使用哪个测试函数).
- */
- /*------------------------------ 文件结束 -------------------------------------
- */
|