Пример #1
0
        /// <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;
                }
            }
        }
Пример #2
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;
            }
        }