Example #1
0
        private void MeasurementLogicRoutine(Types.Commutation.TestParameters Commutation)
        {
            try
            {
                m_State = DeviceState.InProcess;

                //уведомляем UI о том, что мы находимся в состоянии m_State с результатами измерений m_Result
                FireEvent(m_State, m_Result);

                if (m_IsEmulation)
                {
                    //эмулируем успешный результат измерений
                    m_State      = DeviceState.Success;
                    m_Result.RCC = RCCResult.OPRESULT_OK;
                }
                else
                {
                    //включаем требуемую коммутацию
                    m_IOCommutation.WriteRegister(IOCommutation.REG_MODULE_TYPE, (ushort)Commutation.CommutationType);
                    m_IOCommutation.CallAction(IOCommutation.ACT_COMM2_RCC);

                    //запускаем прозвонку цепи катод-катод
                    m_IOGate.CallAction(IOGate.ACT_START_RCC);

                    WaitForEndOfGateTest();

                    //прозвонка цепи катод-катод успешно исполнена
                    m_State = DeviceState.Success;

                    //считываем значение регистра результата
                    m_Result.RCC = (RCCResult)m_IOGate.ReadRegister(IOGate.REG_TEST_FINISHED);
                }

                FireEvent(m_State, m_Result);
            }
            catch (Exception e)
            {
                m_State = DeviceState.Fault;
                FireEvent(m_State, m_Result);
                FireExceptionEvent(e.Message);

                throw;
            }
        }
Example #2
0
        private void MeasurementLogicRoutine(Types.Commutation.TestParameters Commutation)
        {
            try
            {
                m_State = DeviceState.InProcess;

                //уведомляем UI о том, что мы находимся в состоянии m_State с результатами измерений m_Result
                FireEvent(m_State, m_Result);

                m_IOCommutation.CallAction(IOCommutation.ACT_COMM_IH);

                try
                {
                    m_IOGate.WriteRegister(130, 1);

                    try
                    {
                        m_IOGate.CallAction(IOGate.ACT_START_IH);//102

                        m_IOStLs.WriteRegister(128, 1);
                        m_IOStLs.WriteRegister(140, m_Parameters.Itm);
                        m_IOStLs.WriteRegister(141, 10000);
                        m_IOStLs.WriteRegister(160, 1);
                        m_IOStLs.CallAction(100);

                        if (m_IsEmulation)
                        {
                            //эмулируем успешный результат измерений
                            m_State     = DeviceState.Success;
                            m_Result.Ih = 10;

                            //проверяем отображение Problem, Warning, Fault
                            FireNotificationEvent(ComplexParts.IH, 7, (ushort)HWWarningReason.None, (ushort)HWFaultReason.None, (ushort)HWDisableReason.None);
                            FireNotificationEvent(ComplexParts.IH, (ushort)HWProblemReason.None, 2, (ushort)HWFaultReason.None, (ushort)HWDisableReason.None);
                            FireNotificationEvent(ComplexParts.IH, (ushort)HWProblemReason.None, (ushort)HWWarningReason.None, 1, (ushort)HWDisableReason.None);
                        }
                        else
                        {
                            if (WaitForEndOfSLTest() == DeviceState.Success)
                            {
                                WaitForEndOfGateTest();

                                //тесты в обоих блоках завершились успешно, поэтому читаем регистры результатов
                                m_State     = DeviceState.Success;
                                m_Result.Ih = m_IOGate.ReadRegister(201);
                            }
                        }
                    }

                    finally
                    {
                        //регистр 130 не зависимо от результата измерения надо выставить в ноль
                        m_IOGate.WriteRegister(130, 0);
                    }
                }

                finally
                {
                    //выполняем команду 110 на блоке коммутации
                    m_IOCommutation.CallAction(110);
                }

                FireEvent(m_State, m_Result);
            }

            catch (Exception e)
            {
                m_State = DeviceState.Fault;
                FireEvent(m_State, m_Result);
                FireExceptionEvent(e.Message);

                throw;
            }
        }