Exemple #1
0
        public FNTGZ60(IJournal journal, ISignalsFactory signals, RS485Master modbus, byte modbusId)
        {
            var id = SensorName.Invertor(modbusId);

            if (journal == null)
            {
                throw new ArgumentNullException("journal");
            }

            if (modbus == null)
            {
                throw new ArgumentNullException("modbus");
            }

            Id          = id;
            mJournal    = journal;
            mConnection = modbus;
            mModbusId   = modbusId;

            Status = EngineStatus.Init;


            mState = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.Mode));
            mError = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.Error));
            var lastError = float.NaN;

            mError.OnUpdate += signal =>
            {
                if (float.IsNaN(mError.Value) && !float.IsNaN(lastError))
                {
                    mJournal.Debug(string.Format("mError уст. в неизв. сост.: {0}", Id), MessageLevel.System);
                }

                lastError = signal.Value;
            };

            mFrequency   = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.Frequency));
            mCurrent     = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.Current));
            mVoltage     = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.Voltage));
            mTemperature = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.Temperature));
            mAngle       = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.Angle));

            mLastStop     = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.LastStop));
            mHourStop     = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.HourStop));
            mMinuteStop   = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.MinuteStop));
            mDayStop      = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.DayStop));
            mMonthStop    = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.MonthStop));
            mYearStop     = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.YearStop));
            mFzadStop     = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.FzadStop));
            mFpracyStop   = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.FpracyStop));
            mUdStop       = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.UdStop));
            mIskutStop    = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.IskutStop));
            mTermSensStop = signals.GetSignal(SensorName.Invertor(mModbusId, SignalName.TermSensStop));
        }
Exemple #2
0
        static void Main()
        {
            var journal    = new ConsoleJournal();
            var connection = new RS485Master(journal, "/dev/ttySP1", 57600, false);

            connection.Open();

            while (true)
            {
                journal.Debug("try to write frequency", MessageLevel.System);
                if (connection.Write(0, 257, new ushort[] { 100 }))
                {
                    journal.Info("broadcast write success", MessageLevel.System);
                }
                else
                {
                    journal.Warning("broadcast write timeout", MessageLevel.System);
                }
            }
        }
Exemple #3
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();
        }