int jieshiqi___::switch__(qu___* qu,size_t& offi,size_t to,string& buf,deque<string>* eval_p){
	int err;
	size_t from2,to2,to4;
	string buf2;
	if((err=jieshi_buf__(qu,offi,to,buf,buf2,kwsm_jieheshi_|kwsm_bijiaoyunsuanfu_|kwsm_juhao_,
			keyword_switch_,false,&from2,&to2,&to4)))
		return err;
	zhi___ zuo;
	zuo=buf2;
	int kw2;
	try{
		for(;from2<to2;){
			size_t from3,to3;
			if((err=find__(qu,from2,to2,kwsm_juhao_,from3,to3,kw2,buf,false)))
				return err;
			bool luoji;
			if((err=if_then_else__(keyword_if_,qu,from3,to3,buf,zuo,luoji,eval_p)))
				return err;
			if(kw2>keyword_no_){
#ifdef debug_liucheng_
				out_kw__(syn_[kw2]);
#endif
				from2+=syn_[kw2].length();
			}
			if(kw2!=keyword_juhao_)
				break;
		}
	}catch(int ex){
		if(ex==keyword_break_){
		}else
			throw ex;
	}
	offi=to4;
	return 0;
}
Esempio n. 2
0
void 	Amt::DiagLImpl::s(CORBA::Long _l ){
        DiagLImplBase::s(_l);
	char *markup;
	GdkColor color;
    if (old_l != _l ) 
	switch (_l){
	    case 0:
		gdk_color_parse("red", &color);
		gtk_widget_modify_bg(_lMev, GTK_STATE_NORMAL, &color );
		if( crtc::ItemImpl* logger = find__("mony_logger") ){
		    char buff[80];
		    snprintf (buff, sizeof(buff), "Модуль: %s; %s", _in_modul.c_str(), _in_place.c_str() );
		    logger->setAttr__("type","Amt_modul_answ_fault" );
		    logger->setAttr__("title", buff );
		}
	    break;	
	    case 2:
		gdk_color_parse("#00aa00", &color);
		gtk_widget_modify_bg(_lMev, GTK_STATE_NORMAL, &color );
	    break;	
	    case 1:
		gdk_color_parse("#14BD68", &color);
		gtk_widget_modify_bg(_lMev, GTK_STATE_NORMAL, &color );
	    break;	
	}
    old_l = _l;

}
Esempio n. 3
0
/*---------------------------------- Циклические телеизмерения ИЗОЛЯЦИИ ---------------------------------*/
void	stdc::ControllerImpl::circleIsolIn(CORBA::Long _l){
	_in_circleIsolIn = _l;
	if(_l){
	    if (_in_debug) printf("Analog:: Циклические телеизмерения изоляции Включены.\n");
	    circleIn(0); //выключаем циклические измерения напряжений
	    circleIsolIter = _in_items.begin();
	    circleIsolOnItem();    
	}
	else{
	    if (_in_debug) printf("Analog:: Циклические телеизмерения изоляции ВЫключены.\n");
	    if ( crtc::ItemImpl *cid = find__("stdc_circleIsol") ){
		cid->setAttr__("stop",  "1");
		char ak[10];
		snprintf(ak, sizeof(ak),"ak%s", circleIsolIter->second->ak );	    
		uart->off(ak, atol(circleIsolIter->second->side) );
	    }
	}
}
Esempio n. 4
0
void	stdc::ControllerImpl::circleViewData(){
	if ( ( viewItem == _in_items.begin() ) && ( circleItem == _in_items.begin() ) )
	    return;
	char ak[10];
	snprintf(ak, sizeof(ak),"ak%s", viewItem->second->ak );	    
	int isch = 2 * uart->getChan4Ak( ak ) + atol(viewItem->second->side);
	const char* uns = uart->getUns4Ak( ak );
	char buff[10];
	snprintf(buff, sizeof(buff),"%s_%d", viewItem->second->source, isch );
	if( crtc::ItemImpl *ii = find__(uns) ){
	    CORBA::Any _a;
	    ii->getAttr__(std::string(buff), _a);
	    CORBA::Double _d;
	    _a>>=_d;
	    /*сохранили значение напряжения*/
	    viewItem->second->value[0] = _d;
	    saveData();
	    syncData();
	    /*Проверим пороги, и обновим их в ТЗК*/
	    if (limits)
		limits->checkLimit( viewItem->second->unit, _d, true );
	    
	}
Esempio n. 5
0
void	stdc::ControllerImpl::circleIsolOnItem(){
	if (!_in_circleIsolIn) 
	    return;
	CORBA::Any _a;
	circleIsolIter->second->sp->getAttr__("cond", _a);
	CORBA::Long _l=0; _a>>=_l;
	if (_l){
	    circleIsolNext();
	    return;
	}
	if (!circleIsolIter->second->isIsol){
	    circleIsolNext();
	return;
	}	
	    
	char ak[10];
	snprintf(ak, sizeof(ak),"ak%s", circleIsolIter->second->ak );	    
	uart->uns4i_Isol( uart->getUns4Ak(ak), 1 );
	uart->on(ak, atol(circleIsolIter->second->side), atol(circleIsolIter->second->key), atol(circleIsolIter->second->mode), 
		circleIsolIter->second->unit, (CORBA::Long)atol(circleIsolIter->second->fasa) );
	if ( crtc::ItemImpl *cid = find__("stdc_circleIsol") ){
	    int isch = 2 * uart->getChan4Ak( ak ) + atol(circleIsolIter->second->side);
	    char tmp[4];
	    snprintf(tmp, sizeof(tmp),"%d", isch);
	    cid->setAttr__("isch", tmp);
	    cid->setAttr__("side", circleIsolIter->second->side );
	    cid->setAttr__("uns",  uart->getUns4Ak( ak ));
	    cid->setAttr__("ion",  uart->getIon4Ak( ak ));
	    cid->setAttr__("mode",  circleIsolIter->second->mode);	    
	    cid->setAttr__("work",  "1");
	}
	char tit[150];
	snprintf(tit,sizeof(tit), "Объект %s подключен, измеряется изоляция.", circleIsolIter->second->label.c_str() );
	if (_in_debug) printf("Analog:: %s\n",tit);

}
int jieshiqi___::if_then_else__(int kw,qu___* qu,size_t& offi,size_t to,string& buf,zhi___& zuo,bool& result,deque<string>* eval_p){
	size_t from2,to2;
	int kw2;
	int err;
	string buf2;
	size_t to3=offi;
	//|kwsm_if_
	if((err=find__(qu,to3,to,kwsm_juhao_,from2,to2,kw2,buf2,false)))
		return err;
	if(kw==keyword_if_){
		if((err=find__(qu,offi,to3,kwsm_juhao_|kwsm_then_else_|kwsm_douhao_,from2,to2,kw2,buf2,false)))
			return err;
		result=true;
		if((err=and_or__(qu,from2,to2,result,zuo))){
			err_add__(qu,from2,to2);
			return err;
		}
		switch(kw2){
		case keyword_then_:
		case keyword_else_:
			break;
		default:
			offi=to3;
		case keyword_douhao_:
#ifdef debug_liucheng_
			out_kw__(syn_[kw2],out_clr_if_);
#endif
			return 0;
		}
	}else{
		kw2=kw;
		offi-=syn_[kw2].length();
	}
	for(;;){
		unsigned long kwsm;
		int kw3;
		if(result){
			if(kw2==keyword_then_){
				kwsm=kwsm_else_|kwsm_juhao_|kwsm_douhao_;
				kw3=keyword_no_;
			}else{
				kwsm=kwsm_then_|kwsm_juhao_;
				kw3=keyword_then_;
			}
		}else{
			if(kw2==keyword_else_){
				kwsm=kwsm_juhao_|kwsm_douhao_;
				kw3=keyword_no_;
			}else{
				kwsm=kwsm_else_|kwsm_juhao_;
				kw3=keyword_else_;
			}
		}
		if(kw2>keyword_no_){
#ifdef debug_liucheng_
			out_kw__(syn_[kw2],out_clr_if_);
#endif
			offi+=syn_[kw2].length();
		}
		if((err=find__(qu,offi,to3,kwsm,from2,to2,kw2,buf2,false)))
			return err;
		if(kw3==keyword_no_){
			for(;;){
				/*size_t from4,to4;
				int kw4;
				if((err=find__(qu,from2,to2,0,from4,to4,kw4,buf)))
					return err;
				if((err=jieshi__(qu,from4,to4,buf)))
					return err;*/
				if((err=jieshi__(qu,from2,to2,buf,NULL,NULL,keyword_no_,kwsm_1_,kwsm_1t_,NULL,eval_p)))
					return err;

				if(kw2>keyword_no_){
#ifdef debug_liucheng_
					out_kw__(syn_[kw2],out_clr_if_);
#endif
					offi+=syn_[kw2].length();
				}
				if(kw2!=keyword_douhao_)
					break;
				if((err=find__(qu,offi,to3,kwsm,from2,to2,kw2,buf2,false)))
					return err;
			}
			break;
		}else{
			if(kw2!=kw3)
				break;
		}
	}
	offi=to3;
	return 0;
}
int jieshiqi___::and_or__(qu___* qu,size_t from,size_t to,bool& result,zhi___& zuo){
#ifdef debug_liucheng_
	out_f_t__(qu->src_,from,to,out_clr_if_);
#endif
	const string& fei=syn_[keyword_fei_];
	int fei_len=fei.length();
	for(;from<to;){
		size_t from2,to2;
		int err;
		bool jiehe=false;
		err=syn_.jiehe__(qu->src_,from,to,from2,to2,&jiehe,err_);
		if(err)
			return err;
		if(jiehe){
			//这里还有先之前的一段的怎么处理
			if((err=and_or__(qu,from2,to2,result,zuo)))
				return err;
			from=to2+syn_[keyword_jiehezhong_].length();
			if(from>=to)
				break;
		}
		int kw2;
		string buf2;
		if((err=find__(qu,from,to,kwsm_and_or_,from2,to2,kw2,buf2)))
			return err;
		if(!jiehe){
			size_t from3,to3;
			int yunsuanfu;
			string buf3;
			int fei_cnt=0;
			if((err=find__(qu,from2,to2,kwsm_bijiaoyunsuanfu_,from3,to3,yunsuanfu,buf3)))
				return err;
			if(to3>from3){
				for(size_t i=from3;i<to3-fei_len;i+=fei_len){
					if(qu->src_.compare(i,fei_len,fei)==0){
						fei_cnt++;
					}else
						break;
				}
				if((err=jieshi__(qu,from3,to3,buf3,NULL,NULL,keyword_no_,kwsm_1_|kwsm_has_)))
					return err;
				zuo=buf3;
			}
#ifdef debug_liucheng_
			out_if__(zuo);
#endif
			switch(yunsuanfu){
			case keyword_dengyu_:
			case keyword_budengyu_:
			case keyword_xiaoyudengyu_:
			case keyword_xiaoyu_:
			case keyword_dayudengyu_:
			case keyword_dayu_:
				break;
			default:
				if(yunsuanfu>keyword_no_){
					to3+=syn_[yunsuanfu].length();
					yunsuanfu=keyword_no_;
				}
				break;
			}
			if(yunsuanfu>keyword_no_){
#ifdef debug_liucheng_
				out_kw__(syn_[yunsuanfu],out_clr_if_);
#endif
				to3+=syn_[yunsuanfu].length();
				string buf4;
				if((err=jieshi__(qu,to3,to2,buf4,NULL,NULL,keyword_no_,kwsm_1_|kwsm_has_)))
					return err;
				zhi___ you;
				you=buf4;
#ifdef debug_liucheng_
				out_if__(you);
#endif
				switch(yunsuanfu){
				case keyword_dengyu_:
					result = zuo==you;
					break;
				case keyword_budengyu_:
					result = zuo!=you;
					break;
				case keyword_xiaoyudengyu_:
					result = zuo<=you;
					break;
				case keyword_xiaoyu_:
					result = zuo<you;
					break;
				case keyword_dayudengyu_:
					result = zuo>=you;
					break;
				case keyword_dayu_:
					result = zuo>you;
					break;
				}
			}else
				result=zuo.bool__(syn_[keyword_null_],fei_cnt,fei_len);
		}
#ifdef debug_liucheng_
		out_if__(result?"正":"歪",out_clr_x_);
#endif
		if((!result&&kw2==keyword_and_)||(result&&kw2==keyword_or_))
			break;
		from=to2;
		if(kw2>keyword_no_){
#ifdef debug_liucheng_
			out_kw__(syn_[kw2],out_clr_if_);
#endif
			from+=syn_[kw2].length();
		}
	}
	return 0;
}
Esempio n. 8
0
void	Amt::ObjConnImpl::dataCells(const char* _id){
	_dataCells.push_back( find__(_id ) );
//	printf("Amt::ObjConnImpl::dataCells  new Id %s\n", _id);

}
Esempio n. 9
0
void    stdc::ControllerImpl::applyAttrs(){
	crtc::ItemNode::applyAttrs();
	// stage two activation ( after dom tree building done )
    //Находим УАРТ который рулит модулями
	if( uart = static_cast<stdc::UartImpl*>( find__("uart")) ){
	    ;
	}
	else{
	    crtcLog<<"stdc::Controller !! Ошибка адаптации не найден УАРТ (stdc:Uart)\n";
	    crtcEXIT("Критическая ошибка");
	}
    //Найдем объект с порогами на значения
	limits = dynamic_cast<stdc::Ilimits*>(find__("stdc_limits"));
	if (!limits)
	    crtcLog<<"stdc::Controller !! Не найден компонент с пороговыми значениями (<stdc:Limits id='stdc_limits' ... >)\n";
    //Создаем список объектов ТИ
    //Подписываем себя на события от SectionProxy
	std::list<crtc::ItemImpl*> iis;
	long rc = _cntx_->registry()->getItems( "*",  iis );
	std::list<crtc::ItemImpl*>::iterator beg = iis.begin();
	std::list<crtc::ItemImpl*>::iterator end = iis.end();
	while (beg != end ){
	    std::string _repo = static_cast<crtc::ItemImpl*>(*beg)->getRepo__();
	    if (_repo == "IDL:stdc/SectionProxy:1.0" ){
		crtc::ItemImpl *ss = 0;
		ss =find__( (*beg)->getId__() );	
		if (ss){
		    ss -> subs__("popup", this);
		    //Создаем список объектов телеизмерений
		    crtc::ItemNode* sectProxy = 0;
		    sectProxy = ss;
		    const char* _sectionId;
		    if (sectProxy->hasAttribute("sectionId"))
			_sectionId = sectProxy->getAttributeText("sectionId");
		    else{
			crtcLog<<"stdc::Controller::Error отсутствует аттрибут sectionId\n";
			crtcEXIT("Критическая ошибка");
		    }	
		    if (sectProxy){
			crtc::ItemNode *points = sectProxy->firstChild;
			while (points ){
			    const char *unit, *ak, *side, *key, *mode, *fasa, *subtitle, *label, *source;
			    if (points->hasAttribute("unit")){
				unit = points->getAttributeText("unit");

				if (points->hasAttribute("ak"))
				    ak = points->getAttributeText("ak");
				else{
			    	    crtcLog<<"stdc::SectionProxy::Error в потомке "<<_sectionId<<" отсутвует аттрибут ak="". Номер модуля АК\n";
				    crtcEXIT("Критическая ошибка");
				}	
				if (points->hasAttribute("side"))
				    side = points->getAttributeText("side");
				else{
				    crtcLog<<"stdc::SectionProxy::Error в потомке "<<_sectionId<<" отсутвует аттрибут side="". Сторона мадуля АК.\n";
				    crtcEXIT("Критическая ошибка");
				}	
				if (points->hasAttribute("key"))
				    key = points->getAttributeText("key");
				else{
				    crtcLog<<"stdc::SectionProxy::Error в потомке "<<_sectionId<<" отсутвует аттрибут key="". Номер ключа\n";
				    crtcEXIT("Критическая ошибка");
				}	
				if (points->hasAttribute("mode"))
				    mode = points->getAttributeText("mode");
				else{
				    crtcLog<<"stdc::SectionProxy::Error в потомке "<<_sectionId<<" отсутвует аттрибут mode="". Режим работы ключа\n";
				    crtcEXIT("Критическая ошибка");
				}	
				if (points->hasAttribute("subtitle"))
				    subtitle = points->getAttributeText("subtitle");
				else{
				    crtcLog<<"stdc::SectionProxy::Error в потомке "<<_sectionId<<" отсутвует аттрибут subtite="". Название точки подключения.\n";
				    crtcEXIT("Критическая ошибка");
				}	
			    //необязательные атрибуты
				if (points->hasAttribute("Phdop"))
				    fasa = points->getAttributeText("Phdop");
				else    
				    fasa ="";
				    
				if (points->hasAttribute("source"))
				    source = points->getAttributeText("source");
				else    
				    source ="VAC";
			    //создаем элемент в таблице объектов измерения
				char buff[200];
				if (std::string(ss->getId__()).find("Section") != std::string::npos )    
				    snprintf(buff, sizeof(buff), "%sСП %s", _sectionId, subtitle);
				else if (std::string(ss->getId__()).find("Way") != std::string::npos )    
				    snprintf(buff, sizeof(buff), "%sП %s", _sectionId, subtitle);
				else 
				    snprintf(buff, sizeof(buff), "%s %s", _sectionId, subtitle);
				//выясняем есть ли по этому объекту измерение изоляции
				bool isIsol=0;
				char ak_name[7];
			    	snprintf(ak_name, sizeof(ak_name),"ak%s", ak );	    
				if (strcmp("none", uart->getIon4Ak( ak_name )))
    				    isIsol = 1;
				_in_items[std::string(unit) ] = new stdItem(ak, side, key, mode, unit, fasa, buff, ss, isIsol, source );
			    }			    
			points = points->nextSibling;
			}
		    }
		}
	    }
	    beg++;
	}
//check...    
	if (_in_items.size() == 0 )
	    crtcEXIT ("Мега ошибка. Нету объектов измерения.\n Проверте: 1. Адаптацию 2. Собраны ли модули stdc::SectionProxy или stdc::IsolUnit");
//for test
	if (_in_debug){
	    std::cout<<"Известные объекты телеизмерений _in_items:\n";
	    StdItems::iterator begin = _in_items.begin();	
	    StdItems::iterator end1 = _in_items.end();
	    while(begin!=end1){
		std::cout<<begin->first.c_str();
		std::cout<<" ak="<<begin->second->ak<<" side="<<begin->second->side<<" key="<<begin->second->key<<" mode="<<begin->second->mode;
		std::cout<<" unit='"<<begin->second->unit<<"' fasa="<<begin->second->fasa<<" title='"<<begin->second->label.c_str()<<"' isIsol= '"<<begin->second->isIsol<<"'\n";
		begin++;
    	    }
	}
//Подготовка для циклических измерений.
	if (_in_voltMeasureDelay < 3)
	    _in_voltMeasureDelay == 3;
	registerForPoll__(_in_voltMeasureDelay);
	registerForStep__();    
	circleItem = _in_items.begin();
	viewItem = _in_items.begin();    
	circleIsolIter = _in_items.begin();
	createTZK();
	readData();
//for syncAnalogData
	if ( _in_syncPort ) prepareSync();
//start circle diment
	circleIn(1);

	
}