示例#1
0
SlaveConfig XmlToConfig::Convert(const APLXML_DNP::SlaveConfig_t& arCfg, const APLXML_DNP::AppLayer_t& arApp)
{
	SlaveConfig c;

	c.mAllowTimeSync = arCfg.TimeIINTask.DoTask;
	c.mTimeSyncPeriod = arCfg.TimeIINTask.PeriodMS;

	c.mUnsolPackDelay = arCfg.UnsolDefaults.PackDelayMS;
	c.mUnsolRetryDelay = arCfg.UnsolDefaults.RetryMS;
	c.mUnsolMask = ClassMask(arCfg.UnsolDefaults.DoClass1, arCfg.UnsolDefaults.DoClass2, arCfg.UnsolDefaults.DoClass3);

	c.mStaticBinary = Convert(arCfg.StaticRsp.BinaryGrpVar);
	c.mStaticAnalog = Convert(arCfg.StaticRsp.AnalogGrpVar);
	c.mStaticCounter =  Convert(arCfg.StaticRsp.CounterGrpVar);
	c.mStaticSetpointStatus =  Convert(arCfg.StaticRsp.SetpointStatusGrpVar);

	c.mEventBinary =  Convert(arCfg.EventRsp.BinaryGrpVar);
	c.mEventAnalog =  Convert(arCfg.EventRsp.AnalogGrpVar);
	c.mEventCounter =  Convert(arCfg.EventRsp.CounterGrpVar);

	c.mEventMaxConfig.mMaxBinaryEvents = arCfg.MaxBinaryEvents;
	c.mEventMaxConfig.mMaxAnalogEvents = arCfg.MaxAnalogEvents;
	c.mEventMaxConfig.mMaxCounterEvents = arCfg.MaxCounterEvents;

	c.mMaxControls = 1;

	c.mMaxFragSize = boost::numeric::converter<int, size_t>::convert(arApp.MaxFragSize);;

	return c;
}
示例#2
0
void AS_Idle::OnUnsolExpiration(AsyncSlave* c)
{
	if(c->mStartupNullUnsol) { 
		if(c->mRspContext.HasEvents(c->mConfig.mUnsolMask)) {
			ChangeState(c, AS_WaitForUnsolSuccess::Inst());
			c->mRspContext.LoadUnsol(c->mUnsol, c->mIIN, c->mConfig.mUnsolMask);
			c->SendUnsolicited(c->mUnsol);
		}
	}
	else { // do the startup null unsol task
		ChangeState(c, AS_WaitForUnsolSuccess::Inst());
		c->mRspContext.LoadUnsol(c->mUnsol, c->mIIN, ClassMask(false, false, false));
		c->SendUnsolicited(c->mUnsol);
	}
}