Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        public ISignal GetSignal(string id)
        {
            Signal rv;

            mSignals.TryGetValue(id, out rv);

            if (IsDebug && rv == null)
            {
                mJournal.Fatal(string.Format("Сигнал не найден: {0}", id), MessageLevel.System);
            }

            return(rv);
        }
Ejemplo n.º 3
0
 public void Fatal(string message, MessageLevel level = MessageLevel.User)
 {
     mJournal.Fatal(message, level);
 }
Ejemplo n.º 4
0
        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);
                }
            }
        }
Ejemplo n.º 5
0
        /// <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;
            }
        }