/// <summary> /// Установка параметров частотника для разных рамп (по рекомендации Дарека от 19.10.2015) // read before set new value // 40325 - value = 5 for conveyor mode or value = 0 for motion mode /// </summary> internal void SetInvertorMode() { if (Status != EngineStatus.Stopped) { return; } try { mConnection.Open(); if (!mConnection.IsOpen()) { return; } const ushort kConveyorModeSetting = 5; const ushort kMotionModeSetting = 0; #region read var rv = mConnection.ReadHoldings(mModbusId, 325, 1); if (rv == null) { return; } //if ((Engine.Mode == EngineMode.Conveyor && rv[0] != kConveyorModeSetting) || if (Engine.Mode == EngineMode.Motion && rv[0] != kMotionModeSetting)//) { return; var rampMode = kMotionModeSetting; //var rampMode = 0; //var rampMode = Engine.Mode == EngineMode.Conveyor ? kConveyorModeSetting : kMotionModeSetting; mJournal.Debug(string.Format("попытка Установки {0} в {1} по {2}", mModbusId, Engine.Mode, rampMode), MessageLevel.System); #region write //return; // запрещаем смену рамп if (mConnection.Write(mModbusId, 325, new[] { rampMode })) { mJournal.Debug(":: успешно", MessageLevel.System); //mJournal.Debug(string.Format("{0}: modbus success write", modbusId), MessageLevel.System); } else { mJournal.Debug(":: защита при смене рампы", MessageLevel.System); } #endregion } #endregion } catch (Exception e) { if (e is SocketException || e is TimeoutException || e is IOException) { mConnection.Close(); } else { throw; } } }
/// <summary> /// Поехали /// </summary> /// <param name="direction"></param> private static void Start(bool direction) { mConnection.Open(); if (!mConnection.IsOpen()) { return; } // включать можем только в активном режиме if (State != SystemState.Active) { return; } switch (Mode) { case EngineMode.Motion: { // при обновлении движения по педали - удерживаем выставленную уставку на скорость ResetMotionSpeedToMin.Stop(); // запускаемся только если все двигателя до этого были нормально остановлены if (IsAllStopped()) { foreach (var invertor in Invertors) { invertor.Direction(direction); } UpdateMotionFrequencies(); mLastDirection = direction; mUz2.On(true); } else { if (IsMotionContinue(direction)) { UpdateMotionFrequencies(); mUz2.On(true); } else { // нажата другая педаль, но мы еще не остановились по предыдущему направлению // поэтому останавливаем и как только все остановится - то начнется движение в другую сторону Stop(); } } } break; /* * case EngineMode.Conveyor: * { * var freq = ((ushort)ConveyorFrequencies[mConveyorSpeed.ValueAsInt].ValueAsInt); * freq = (ushort)(freq < 100 ? 100 : freq); * mConveyor.Frequency(freq); * * // всегда в одну сторону - только вперед :) * // запускаемся только если все до этого были нормально остановлены * if (!IsAllStopped()) return; * * mConveyor.Direction(true); * mConveyor.On(false); * } * break; */ } }