private void Update() { mJournal.Info("Wago coupler started", MessageLevel.System); var elapsed = new Stopwatch(); try { while (true) { const int kPeriod = 250; if (kPeriod > elapsed.ElapsedMilliseconds) { Thread.Sleep((int)(kPeriod - elapsed.ElapsedMilliseconds)); } elapsed.Restart(); ModbusTransfer(); } } catch (ThreadAbortException) { mConnection.Close(); mJournal.Info("Wago coupler stopped", MessageLevel.System); } catch (Exception e) { mConnection.Close(); mJournal.Fatal(e.ToString(), MessageLevel.System); } }
public void Start() { if (mProcesingThread != null) { return; } if (mSlaveTcpListener == null) { return; } // create and start the TCP slave mSlaveTcpListener.Start(); mProcesingThread = new Thread(mSlave.Listen); mProcesingThread.Start(); mJournal.Info(string.Format("Modbus database started at 127.0.0.1:{0}", mPort), MessageLevel.System); }
public void Info(string message, MessageLevel level = MessageLevel.User) { mJournal.Info(message, level); }
private void Update() { mJournal.Info("Обработчик системы запущен", MessageLevel.System); var elapsed = new Stopwatch(); while (true) { try { const int kPeriod = 50; if (kPeriod > elapsed.ElapsedMilliseconds) { Thread.Sleep((int)(kPeriod - elapsed.ElapsedMilliseconds)); } switch (mState) { case SystemState.Init: { if (IsInit()) { SetState(SystemState.Ready, SystemStateCodes.State.ReadyToUse); } } break; case SystemState.Ready: { mIsActionBlock = !IsReady(); } break; case SystemState.Active: { } break; case SystemState.UserLock: { } break; case SystemState.Failure: { Engine.SetMode(EngineMode.Deactivate); } break; } } catch (ThreadAbortException) { mJournal.Info("Обработчик системы остановлен (защита)", MessageLevel.System); return; } catch (Exception e) { mJournal.Fatal(e.ToString(), MessageLevel.System); } } }
/// <summary> /// Обновляем информацию по частотникам (modbus) /// </summary> private static void Update() { mJournal.Info("Обработчик инверторов запущен", MessageLevel.System); int RS485TimeOutms = 5; //var elapsed = new Stopwatch(); try { while (true) { try { //Console.WriteLine("lap: {0} ms", elapsed.ElapsedMilliseconds); //const int kPeriod = 100; //Thread.Sleep((int)(elapsed.ElapsedMilliseconds > kPeriod ? 0 : kPeriod - elapsed.ElapsedMilliseconds)); //elapsed.Restart(); // внутренняя логика работы - в том числе и запись в регистры InternalLogic(); #region cчитываем текущее состояние частотников // чтение параметров foreach (var invertor in Invertors) { ((FNTGZ60)(invertor)).Update(); Thread.Sleep(RS485TimeOutms); // pause for RS485 channel } // запись параметров управления /* * if (Mode == EngineMode.Conveyor) * { * // TODO: записывает все три управляющих байта !!! * ((FNTGZ60)(mConveyor)).WriteConveyorState(); * } * else */ { foreach (var invertor in Invertors) { // TODO: записывает ТОЛЬКО ДВА управляющих байта частоты и направления - запуск и остановка по броадкасту !!! ((FNTGZ60)(invertor)).WriteState(); Thread.Sleep(RS485TimeOutms); // pause for RS485 channel } FNTGZ60.WriteBroadcast(); } Thread.Sleep(10); mUz2State.Update((uint)GetState(mUz2.Status)); mUz3State.Update((uint)GetState(mUz3.Status)); mUz4State.Update((uint)GetState(mUz4.Status)); mUz5State.Update((uint)GetState(mUz5.Status)); if (mConveyorState.ValueAsInt != (uint)EquipmentState.Failure) { mConveyorState.Update(mIsConveyorActive ? (uint)EquipmentState.Active : (uint)EquipmentState.Stop); } /* * if (Mode == EngineMode.Conveyor) * mConveyorState.Update((uint)GetState(mUz4.Status)); * else * mConveyorState.Update((uint)EquipmentState.Stop); * * * // установка правильной рампы по рекомендации Дарека * ((FNTGZ60)mConveyor).SetInvertorMode(); */ #endregion } catch (Exception e) { if (e is TimeoutException || e is IOException) { mConnection.Close(); } else { throw; } } } } catch (ThreadAbortException) { mConnection.Close(); mJournal.Info("Обработчик инверторов остановлен (защита)", MessageLevel.System); } catch (Exception e) { mConnection.Close(); mJournal.Fatal(e.ToString(), MessageLevel.System); throw; } }