Beispiel #1
0
        public Relay(IJournal journal, RelayName name, ISignalsFactory signals)
        {
            mJournal = journal;
            mOutput  = signals.GetSignal(SensorName.Relay(name));

            // TODO: uncomment
            mFeedback = signals.GetSignal(SensorName.Relay(name, SignalName.Feedback));

            if (mFeedback != null)
            {
                mFeedback.OnChange += FeedbackOnChange;
            }

            if (mOnTimeout == null)
            {
                mOnTimeout = signals.GetSignal("relay.feedback.on.timeout");
            }

            if (mFeedback != null)
            {
                mOnTimeout.OnUpdate += signal =>
                {
                    var rv = signal.ValueAsInt < 1500 ? 1500 : signal.ValueAsInt > 6000 ? 6000 : signal.ValueAsInt;
                    mJournal.Debug(string.Format("Таймер реле (ОС) установлен в {0} мс для {1}", rv, mOutput.Specification.Id), MessageLevel.System);
                    mTask.SetTimeout(rv);
                };
            }

            // задержка на контроль обратной связи по контактору по умолчанию
            mTask            = new DelayedTask(mOnTimeout == null ? 3000 : mOnTimeout.ValueAsInt < 1500 ? 1500 : mOnTimeout.ValueAsInt > 6000 ? 6000 : mOnTimeout.ValueAsInt);
            mTask.OnTimeout += Checkout;
        }
        public static void Initwago750494(Coupler wago, ISignalsFactory signals)
        {
            {
                W750493.Add(wago, 0, new List <ISignal>
                {
                    signals.GetSignal(SensorName.Phase(1, SignalName.Voltage))
                });

                W750514.Add(wago, 518, new List <ISignal>
                {
                    signals.GetSignal(SensorName.Relay(RelayName.Kv4)),                                         // sound alarm
                    signals.GetSignal(SensorName.Relay(RelayName.Kv11)),                                        // pump on

                    signals.GetSignal(SensorName.Relay(RelayName.Kv10)),                                        //
                    signals.GetSignal(SensorName.Relay(RelayName.Kv9)),                                         //

                    signals.GetSignal(SensorName.Relay(RelayName.RectifierReset)),                              // rectifier reset//null,//new Signal(SensorName.Relay(RelayName.Kv10)),//mode mix,
                    signals.GetSignal(SensorName.Relay(RelayName.Kv1)),                                         // rectifier active mode
                });


                W7501405.Add(wago, 6, new List <ISignal>
                {
                    signals.GetSignal(SensorName.Drive(SignalName.Forward)),                  // SignalType.Ushort),
                    signals.GetSignal(SensorName.Drive(SignalName.Reverse)),                  // SignalType.Ushort),
                    signals.GetSignal(SensorName.Cord(1)),                                    //SignalType.Ushort), // F1
                    signals.GetSignal(SensorName.Cord(2)),                                    //SignalType.Ushort), // F2
                    signals.GetSignal(SensorName.Cord(3)),                                    //SignalType.Ushort), // F3
                    signals.GetSignal(SensorName.Cord(4)),                                    //SignalType.Ushort), // F4
                    signals.GetSignal(SensorName.Cord(5)),                                    //SignalType.Ushort), // F5
                    signals.GetSignal(SensorName.Cord(6)),                                    //SignalType.Ushort), // F6
                    null,                                                                     //new Signal(SensorName.Empty()),
                    signals.GetSignal(SensorName.Relay(RelayName.Kv11, SignalName.Feedback)), //SignalType.Ushort),// K1
                    signals.GetSignal(SensorName.Relay(RelayName.Kv2, SignalName.Feedback)),  //SignalType.Ushort),// K2
                    signals.GetSignal(SensorName.Relay(RelayName.Kv1, SignalName.Feedback)),  //SignalType.Ushort),// K3 -
                    signals.GetSignal(SensorName.Relay(RelayName.Kv9, SignalName.Feedback)),  //SignalType.Ushort),//  K4
                    //signals.GetSignal(SensorName.Relay(RelayName.Kv8, SignalName.Feedback)), //SignalType.Ushort),// K4 -
                    signals.GetSignal(SensorName.Relay(RelayName.Kv10, SignalName.Feedback)), //SignalType.Ushort),// K5 -
                    null,                                                                     //signals.GetSignal(SensorName.Relay(RelayName.Kv10, SignalName.Feedback)), //SignalType.Ushort),// K6, now K4
                    null                                                                      //new Signal(SensorName.Empty())
                });
            }
        }
Beispiel #3
0
        public static void Init(SignalsFactory signals, InvertorsService powers)
        {
            mTaskEngineStop            = new DelayedTask(100);
            mTaskEngineStop.OnTimeout += sender => InternalStop();

            // active
            mKv1Feedback = signals.GetSignal(SensorName.Relay(RelayName.Kv1, SignalName.Feedback));

            mKv1Feedback.OnChange += sensor =>
            {
                //Console.WriteLine("mKv1Feedback: {0}", sensor.Value);

                // выключился активный режим выпрямителя
                //if(sensor.Value == 0)
                //   SetState(SystemState.Failure, sensor, args);
            };

            // charge
            mKv2Feedback = signals.GetSignal(SensorName.Relay(RelayName.Kv2, SignalName.Feedback));

            mKv2Feedback.OnChange += sensor =>
            {
                //Console.WriteLine("mKv2Feedback: {0}", sensor.Value);

                // включился режим заряда выпрямителя

                /*
                 * if (sensor.Value > 0)
                 * {
                 *  if (mState != SystemState.Init)
                 *      SetState(SystemState.Failure, sensor, args);
                 * }
                 */
            };


            /*
             * mEngineSpeed = signals.GetSignal(SensorName.Derivative(SystemName.System, SignalName.Speed)) as LocalOutput;
             * if (mEngineSpeed == null)
             *  throw new Exception("bad signal");
             *
             * mEngineSpeed.Set(mCurrentSpeed);
             * //mEngineSpeed.OnChange += sensor => Console.WriteLine("Engine speed: {0}", args.Code);
             * AcceptCheckout.OnTimeout += sender => mEngineSpeed.Set(mCurrentSpeed);
             *
             * mInvertors = powers;
             *
             * foreach (var invertor in mInvertors.Invertors)
             * {
             *  invertor.OnError += (sender, args) =>
             *                          {
             *                              OnErrorCaller(sender, args);
             *
             *                              SetInvertorState(sender.Id, 2);
             *                          };
             * }
             *
             * for (var i = 0; i < 4; i++)
             * {
             *  var rv = new Cord(signals.GetSignal(SensorName.Cord((byte)(i + 2))));
             *  rv.OnChange += sensor =>
             *                     {
             *                         if (sensor.Value <= 0) return;
             *
             *                         Console.WriteLine(sensor.Id);
             *                         OnErrorCaller(null, new EngineEventArgs { Sensor = sensor });
             *                     };
             *  Cords.Add(rv);
             * }
             *
             * mKv8 = new Relay(RelayName.Kv8, signals);
             * mKv8.OnError += sensor => OnErrorCaller(null, new EngineEventArgs { Sensor = sensor });
             *
             * State.Add(SensorName.Invertor(1), signals.GetSignal(SensorName.Derivative(SystemName.Uz, 2, SignalName.Status)));
             * State.Add(SensorName.Invertor(2), signals.GetSignal(SensorName.Derivative(SystemName.Uz, 3, SignalName.Status)));
             * State.Add(SensorName.Invertor(3), signals.GetSignal(SensorName.Derivative(SystemName.Uz, 4, SignalName.Status)));
             * State.Add(SensorName.Invertor(4), signals.GetSignal(SensorName.Derivative(SystemName.Uz, 5, SignalName.Status)));
             */
        }
Beispiel #4
0
        public static void Init(IJournal journal, ISignalsFactory signals, string port, int baudrate)
        {
            mJournal  = journal;
            mPortName = port;
            mSignals  = signals;

            mConnection = new RS485Master(journal, mPortName, baudrate, false);
            SetState(SystemState.Init);
            SpeedSettings();

            mUz2 = InitInvertor(1);
            mUz3 = InitInvertor(2);
            mUz4 = InitInvertor(3);
            mUz5 = InitInvertor(4);

            mConveyor = mUz4;

            //mLeft = mSignals.GetSignal(SensorName.Invertor(4, SignalName.Angle)); // uz5
            //mRight = mSignals.GetSignal(SensorName.Invertor(1, SignalName.Angle)); // uz2

            mUz2State      = mSignals.GetSignal(SensorName.Derivative(SystemName.Uz, 2, SignalName.Status));
            mUz3State      = mSignals.GetSignal(SensorName.Derivative(SystemName.Uz, 3, SignalName.Status));
            mUz4State      = mSignals.GetSignal(SensorName.Derivative(SystemName.Uz, 4, SignalName.Status));
            mUz5State      = mSignals.GetSignal(SensorName.Derivative(SystemName.Uz, 5, SignalName.Status));
            mConveyorState = mSignals.GetSignal(SensorName.Derivative(SystemName.Conveyor, SignalName.Status));

            mState = new List <ISignal>
            {
                mUz2State,
                mUz3State,
                mUz4State,
                mUz5State,
                mConveyorState
            };

            for (var i = 0; i < 5; i++)
            {
                var rv = new Cord(signals.GetSignal(SensorName.Cord((byte)(i + 2))));
                rv.OnChange += sensor =>
                {
                    if (!sensor.IsSet)
                    {
                        return;
                    }

                    OnErrorWrapper(GetCordCode(sensor.Specification.Id));

                    // last action
                    for (var j = 0; j < Cords.Count; j++)
                    {
                        if (Cords[j] != rv)
                        {
                            continue;
                        }
                        mState[j].Update((float)EquipmentState.Failure);
                        return;
                    }
                };
                Cords.Add(rv);
            }

            mRectifierReset = new Relay(journal, RelayName.RectifierReset, signals);

            mKv1          = new Relay(journal, RelayName.Kv1, signals);
            mKv1.OnError += signal => OnErrorWrapper(SystemStateCodes.Alarm.Kv1OutOfControl);

            /*
             * mKv8 = new Relay(journal, RelayName.Kv8, signals);
             * mKv8.OnError += signal =>
             * {
             *  // TODO: конвейерный частотник
             *  mUz4State.Update((uint)EquipmentState.Failure);
             *  OnErrorWrapper(SystemStateCodes.Alarm.Kv8OutOfControl);
             * };
             */
            mKv9          = new Relay(journal, RelayName.Kv9, signals);
            mKv9.OnError += signal =>
            {
                mConveyorState.Update((uint)EquipmentState.Failure);
                OnErrorWrapper(SystemStateCodes.Alarm.Kv9OutOfControl);
            };

            mKv10          = new Relay(journal, RelayName.Kv10, signals);
            mKv10.OnError += signal =>
            {
                mConveyorState.Update((uint)EquipmentState.Failure);
                OnErrorWrapper(SystemStateCodes.Alarm.Kv10OutOfControl);
            };

            // Автоматическое выключение конвейера по ошибке
            mConveyorState.OnChange += signal =>
            {
                if (signal.ValueAsInt == (int)EquipmentState.Failure)
                {
                    ConveyorOff();
                }
            };


            for (byte i = 1; i < 5; i++)
            {
                var voltage = signals.GetSignal(SensorName.Invertor(i, SignalName.Voltage));
                if (voltage != null)
                {
                    Voltages.Add(voltage);
                }
                else
                {
                    throw new NullReferenceException();
                }
            }

            mConveyorState.Update((uint)EquipmentState.Stop);

            // charge
            mKv2Feedback = signals.GetSignal(SensorName.Relay(RelayName.Kv2, SignalName.Feedback));

            // включился режим заряда выпрямителя
            mKv2Feedback.OnChange += sensor =>
            {
                //if(sensor.IsSet)
                //   mJournal.Debug(string.Format("{0}: {1}", sensor.Id, sensor.IsSet), MessageLevel.System)
            };

            mTangage = mSignals.GetSignal("tangage"); //
            mEncoder = signals.GetSignal("encoder.point");

            mThread = new Thread(Update);
            mThread.Start();
        }