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)); }
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); } } }
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(); }