예제 #1
0
        /// <summary>
        /// Initialize this Component
        /// </summary>
        public override void Initialize()
        {
            base.Initialize();
            // Initialize Serial Port
            if (Simulate == eSimulate.SimulateDontAsk)
            {
                throw new ForceSimulateException("Always Simulate");
            }

            try
            {
                _daqInputs  = new DAQPilotEngine();
                _daqOutputs = new DAQPilotEngine();

                bool initializedInput = _daqInputs.LoadTask(_taskInput);
                if (!initializedInput || (_daqInputs.Status != (long)DAQPilotStatusID.DP_STATUS_NOERROR && _daqInputs.Status != 5))
                {
                    throw new ForceSimulateException("{0} initializing Inputs failed. Initialized={1}, Status={2}", Name, initializedInput, _daqInputs.Status);
                }
                bool initializedOutput = _daqOutputs.LoadTask(_taskOutput);
                if (!initializedOutput || (_daqOutputs.Status != (long)DAQPilotStatusID.DP_STATUS_NOERROR && _daqOutputs.Status != 5))
                {
                    throw new ForceSimulateException("{0} initializing Outputs failed. Initialized={1}, Status={2}", Name, initializedOutput, _daqOutputs.Status);
                }

                _inputs  = FilterByTypeSingle <Inputs>();
                _outputs = FilterByTypeSingle <Outputs>();
                if (_outputs != null)
                {
                    BoolOutput[] boolOutputs = _outputs.FilterByType <BoolOutput>();
                    int          maxChan     = 0;
                    foreach (BoolOutput boolOutput in boolOutputs)
                    {
                        maxChan = Math.Max(maxChan, boolOutput.Channel);
                    }
                    int numChans = maxChan + 1;
                    if ((numChans % 8) != 0)
                    {
                        numChans++;
                    }

                    int numPorts = numChans / 8;

                    for (int i = 0; i < numPorts; i++)
                    {
                        _outputValues.Add(0xff);
                    }

                    foreach (BoolOutput boolOutput in boolOutputs)
                    {
                        SetOutputPortValue(boolOutput);
                    }
                    if (_inputs != null)
                    {
                        _timer = new Timer(OnTimer, this, 1000, _timerPeriod.ToInt);
                        RegisterOnChanged(() => TimerPeriod, OnChangeTimerPeriod);
                    }
                }
            }
            catch (ForceSimulateException fsex)
            {
                throw fsex;
            }
            catch (Exception ex)
            {
                throw new ForceSimulateException(ex);
            }
            Simulate = eSimulate.None;
        }