Ejemplo n.º 1
0
        /// <summary>
        /// 在非UI线程上执行检测
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TestBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker bgWorker = sender as BackgroundWorker;

            using (PcbTesterClient client = PcbTesterClient.Create(Settings.Default.PortName, Settings.Default.BaudRate))
            {
                client.Open();
                progressValue = 0;
                List <CommandResult> commandResultsList = new List <CommandResult>();
                for (int i = 0; i < this.landing1.SelectedTestItems.Count; i++)
                {
                    TestItemInfo testItem = this.landing1.SelectedTestItems[i];

                    bgWorker.ReportProgress(i);
                    progressValue = i;
                    var testResult = CommandEngine.Instance.Excute(client, testItem);
                    commandResultsList.Add(testResult);
                    bgWorker.ReportProgress(i, testResult);

                    //在操作的过程中需要检查用户是否取消了当前的操作。
                    if (bgWorker.CancellationPending == true)
                    {
                        e.Cancel = true;
                        break;
                    }
                }
                e.Result = commandResultsList;
            }
        }
Ejemplo n.º 2
0
        public static CommandResult PulseRelayControl(PcbTesterClient client, RelayControlAction action)
        {
            var relayControlCommand = new RelayControlCommand();
            var parameter           = new RelayControlCommandParameter(action, "20");

            return(relayControlCommand.Execute(client, parameter, null));
        }
        /// <summary>
        /// 执行断路器检测命令
        /// </summary>
        /// <param name="client">PcbTesterClient句柄</param>
        /// <param name="parameter">命令参数</param>
        /// <param name="context">不同命令之间的通信参数</param>
        /// <returns>检测结果</returns>
        public CommandResult Execute(PcbTesterClient client, CommandParameter parameter, CommandContext context)
        {
            WriteResult writeResult = client.Write("0-0:199.128.11", string.Empty);

            if (!writeResult.Success)
            {
                string message = string.Format("{0};0x{1:X};{2}", Resources.BreakerTest, string.Empty, writeResult.Error.ToString());
                logger.ErrorFormat("{0}", message);
                throw new CommunicationException(message);
            }

            ReadResult testResult = client.Read("0-0:199.128.11", string.Empty);

            //检测结果为错误码
            if (!testResult.Success)
            {
                logger.ErrorFormat("{0}", testResult.Data);
                throw new CommunicationException(testResult.Data);
            }

            //检测板支持三路断路器检测,三路检测结果用逗号隔开,取值为“OK”/“ERROR”。e.g. OK,ERROR,ERROR
            string[] breakerState = testResult.Data.Split(',');
            for (int i = 0; i < breakerState.Length; i++)
            {
                if (breakerState[i] == "ERROR")
                {
                    return(new CommandResult(false, testResult.Data));
                }
            }

            return(new CommandResult(true, testResult.Data));
        }
Ejemplo n.º 4
0
        public void ExcuteTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();

                var           eraseCommand   = new EraseSPIFlashCommand();
                var           eraseParameter = new AddressCommandParameter(0x0u);
                CommandResult eraseResult    = eraseCommand.Execute(client, eraseParameter, null);

                var readcommand0   = new ReadSPIFlashCommand();
                var readParameter0 = new AddressCommandParameter(0x0u, 4);

                CommandResult readResult0 = readcommand0.Execute(client, readParameter0, null);

                client.Write("0-0:199.128.8", new byte[] { 0x10 }, 0x0u);
#if false
                var readcommand0   = new ReadSPIFlashCommand();
                var readParameter0 = new AddressCommandParameter(0x00020000u, 4);

                CommandResult readResult0 = readcommand0.Execute(client, readParameter0, null);

                var           eraseCommand   = new EraseSPIFlashCommand();
                var           eraseParameter = new AddressCommandParameter(0x00020000u);
                CommandResult eraseResult    = eraseCommand.Execute(client, eraseParameter, null);

                var readcommand = new ReadSPIFlashCommand();
                // var parameter = new AddressCommandParameter(0x00u, 2, "FFFF");
                //var parameter = new AddressCommandParameter(0x00020000u, 4, "FFFFFFFF");
                var readParameter = new AddressCommandParameter(0x00020000u, 4);

                CommandResult readResult = readcommand.Execute(client, readParameter, null);

                var command = new WriteSPIFlashCommand();

                // var parameter = new AddressCommandParameter(0x00020000u, "00000000");

                //string writeData = "000000000000000000000000000000000000000000000000000001A650000000505000000050500000005050000000505000000050500000005050000000505000000050500000005050000000505000000050500000005050000000505000000050500000005050000000505000000050000000000000000000000000000000";
                string        writeData      = "FF";
                var           writeParameter = new AddressCommandParameter(0x00020000u, writeData);
                CommandResult result         = command.Execute(client, writeParameter, null);

                //writeParameter = new AddressCommandParameter(0x01, writeData);
                //result = command.Execute(client, writeParameter, null);


                var readcommand1 = new ReadSPIFlashCommand();
                // var parameter = new AddressCommandParameter(0x00u, 2, "FFFF");
                //var parameter = new AddressCommandParameter(0x00020000u, 4, "FFFFFFFF");
                var readParameter1 = new AddressCommandParameter(0x00020000u, 1);

                CommandResult readResult1 = readcommand.Execute(client, readParameter1, null);
#endif
                // Assert.AreEqual(result.Success, true);
                //Assert.AreEqual(result.Message, "");
            }
        }
 public void WriteSuccessTest()
 {
     using (var client = PcbTesterClient.Create(PortName, BaudRate))
     {
         client.Open();
         WriteResult writeResult = client.Write("0-0:199.128.1", string.Empty);
         Assert.AreEqual(true, writeResult.Success);
     }
 }
        public void CalibrateACPhaseTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();

                WriteResult writeResult = CalibrationHelper.CalibratePhase(client, 65);
                Assert.AreEqual(writeResult.Success, true);
            }
        }
        public void WriteTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();

                byte[] writeResult = client.Write("68AAAAAAAAAAAA6801043413173A6916", true);
                Assert.Fail();
            }
        }
 public void ExcuteTest()
 {
     using (var client = PcbTesterClient.Create(PortName, BaudRate))
     {
         client.Open();
         var           command = new ReadErrorMsgCommand();
         CommandResult result  = command.Execute(client, null, null);
         Assert.AreEqual(result.Success, true);
         Assert.AreEqual(result.Data, "No Error");
     }
 }
Ejemplo n.º 9
0
        public void ExecuteTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();
                var secondsCommand = new SecondSignalCalibrationCommand();

                CommandResult result = secondsCommand.Execute(client, null, null);

                Assert.AreEqual(result.Data, "50000000,5");
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 执行强制编程命令
        /// </summary>
        /// <param name="client">PcbTesterClient句柄</param>
        /// <param name="parameter">命令参数</param>
        /// <param name="context">不同命令之间的通信参数</param>
        /// <returns>检测结果</returns>
        public CommandResult Execute(PcbTesterClient client, CommandParameter parameter, CommandContext context)
        {
            var forceProgramParameter = parameter as ForceProgramCommandParameter;

            WriteResult writeResult = client.Write(Obis, FormatWriteParameter(forceProgramParameter));

            if (!writeResult.Success)
            {
                string message = string.Format(
                    Resources.ForceProgramCommand_WriteFailedMessageFormat,
                    this.Name,
                    writeResult.Error.ToString(),
                    forceProgramParameter.ToString());

                logger.Error(message);
                throw new CommunicationException(message);
            }

            //读取强编状态
            ReadResult readResult = client.Read(Obis, string.Empty);

            while (StringResultToEnum(readResult.Data) == ForceProgramState.ForceProgramProcessing)
            {
                System.Threading.Thread.Sleep(1000);
                readResult = client.Read(Obis, string.Empty);

                if (!readResult.Success)
                {
                    break;
                }

                if (readResult.Data == ForceProgramState.Succeed.ToString())
                {
                    break;
                }
            }
            //强编失败
            if (!readResult.Success)
            {
                return(new CommandResult(
                           false,
                           readResult.Error.ToString(),
                           string.Format(
                               Resources.ForceProgramCommand_ForceProgramErrorMessageFormat,
                               this.Name,
                               forceProgramParameter.ToString(),
                               ForceProgramState.Succeed.ToString(),
                               readResult.Error.ToString())));
            }

            return(new CommandResult(true));
        }
        /// <summary>
        /// 执行读错误详细信息命令
        /// </summary>
        /// <param name="client">PcbTesterClient句柄</param>
        /// <param name="parameter">命令参数</param>
        /// <param name="context">不同命令之间的通信参数</param>
        /// <returns>检测结果</returns>
        public CommandResult Execute(PcbTesterClient client, CommandParameter parameter, CommandContext context)
        {
            var testResult = client.Read("0-0:199.128.12", string.Empty);

            //检测结果为错误码
            //if (!testResult.Contains(":") && testResult.Length == 6)
            //{
            //    logger.ErrorFormat("{0}", testResult);
            ////     throw new CommunicationException(testResult);
            //}

            return(new CommandResult(true, testResult.Data));
        }
        public void ExcuteTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();

                var           command = new BreakerTestCommand();
                CommandResult result  = command.Execute(client, null, null);

                Assert.AreEqual(result.Success, false);
                Assert.AreEqual(result.Data, "ERROR,ERROR,ERROR");
            }
        }
        public void WriteWrongTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();
                //启动交流测量命令,obis参数相线设置错误
                WriteResult writeResult = client.Write("0-0:199.128.5", "D");

                Assert.AreEqual(false, writeResult.Success);
                Assert.AreEqual(615, writeResult.Error.ErrorCode);

                Assert.AreEqual("(ERR615) " + Resources.ERR615, writeResult.Error.ToString());
            }
        }
Ejemplo n.º 14
0
        public static CommandResult ControlRelay(PcbTesterClient client, RelayControlCommandParameter relayParameter)
        {
            client.Open();
            var relayControlCommand = new RelayControlCommand();

            try
            {
                CommandResult result = relayControlCommand.Execute(client, relayParameter, null);
            }
            catch (CommunicationException ex)
            {
                throw new CommunicationException(ex.Message);
            }
            return(new CommandResult(true));
        }
Ejemplo n.º 15
0
        public void ExcuteTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();

                var command   = new WriteI2CCommand();
                var parameter = new AddressCommandParameter(0xA4, 0x20, "126A9B63142533");

                CommandResult result = command.Execute(client, parameter, null);

                Assert.AreEqual(result.Success, false);
                Assert.AreEqual(result.Message, string.Format("{0}:({1}) {2}", "Write I2C Command", "ERR610", Resources.ERR610));
            }
        }
        public void CalibrateACCurrentTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();

                WriteResult writeResult = CalibrationHelper.CalibrateCurrent(client, 14.58m);
                //Assert.AreEqual(writeResult.Success, true);

                Assert.AreEqual(writeResult.Success, false);
                Assert.AreEqual(writeResult.Error.ErrorCode, 615);
                Assert.AreEqual(writeResult.Error.Message, "Calibrate AC Current Measurement");
                Assert.AreEqual(writeResult.Error.ToString(), string.Format("(ERR615) {0}", Resources.ERR615));
            }
        }
Ejemplo n.º 17
0
        public void ExecuteTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();


                var command = new EraseSPIFlashCommand();
                //var parameter = new AddressCommandParameter(0x00);
                var parameter = new AddressCommandParameter(0x00);

                CommandResult result = command.Execute(client, parameter, null);

                Assert.AreEqual(result.Success, true);
            }
        }
Ejemplo n.º 18
0
 /// <summary>
 /// 断电复位 关闭所有继电器
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void resetToolStripMenuItem_Click(object sender, EventArgs e)
 {
     using (PcbTesterClient client = PcbTesterClient.Create(Settings.Default.PortName, Settings.Default.BaudRate))
     {
         try
         {
             client.Open();
             RelayControlHelper.Reset(client);
         }
         catch (Exception ex)
         {
             MessageBoxHelper.ShowError(ex.Message);
             return;
         }
     }
 }
Ejemplo n.º 19
0
 /// <summary>
 /// 上模拟电压电流,导通5V 模拟电压 模拟电流继电器
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void onAnalogVolCurrentToolStripMenuItem_Click(object sender, EventArgs e)
 {
     using (PcbTesterClient client = PcbTesterClient.Create(Settings.Default.PortName, Settings.Default.BaudRate))
     {
         try
         {
             client.Open();
             RelayControlHelper.ControlRelay(client, new RelayControlCommandParameter(RelayControlAction.OPEN, "0,1,2,3,4,5,6"));
         }
         catch (Exception ex)
         {
             MessageBoxHelper.ShowError(ex.Message);
             return;
         }
     }
 }
Ejemplo n.º 20
0
        public void CloseAllRelayControlTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();
                var relayControlCommand = new RelayControlCommand();
                var parameter           = new RelayControlCommandParameter();
                var context             = new CommandContext();

                parameter.Action         = RelayControlAction.CLOSE;
                parameter.SelectedNumber = "all";

                CommandResult result = relayControlCommand.Execute(client, parameter, context);
                Assert.AreEqual(result.Success, true);
            }
        }
        public void ExcuteTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();

                var command = new ReadI2CCommand();

                var parameter = new AddressCommandParameter(0xA4, 0x20, 0x10);


                CommandResult result = command.Execute(client, parameter, null);

                Assert.AreEqual(result.Success, true);
                Assert.AreEqual(result.Data, "126A9B63142533126A9B6314253333");
            }
        }
Ejemplo n.º 22
0
        public void ExecuteTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();

                var command = new ReadSPIFlashCommand();
                // var parameter = new AddressCommandParameter(0x00u, 2, "FFFF");
                //var parameter = new AddressCommandParameter(0x00020000u, 4, "FFFFFFFF");
                var parameter = new AddressCommandParameter(0x40, 0x40);

                CommandResult result = command.Execute(client, parameter, null);

                Assert.AreEqual(result.Success, true);
                //Assert.AreEqual(result.Data, "126A9B63142533FFFFFFFFFFFFFFFFFF");
            }
        }
        public void RS232Test()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();
                var command   = new MeterCommunicationCommand();
                var parameter = new MeterCommunicationCommandParameter();

                parameter.ComPort  = CommunicationPort.RS232;
                parameter.BaudRate = MeterBaudRate;
                parameter.DataBits = MeterDataBits;
                parameter.Parity   = MeterParity;

                CommandResult result = command.Execute(client, parameter, null);

                Assert.AreEqual(result.Success, true);
            }
        }
Ejemplo n.º 24
0
        public void ExcuteTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();

                var command = new MeasureDCVoltageCommand();

                var parameter = new MeasureParameter(1, 2.5m, 2.6m); //单位V


                CommandResult result = command.Execute(client, parameter, null);

                Assert.AreEqual(false, result.Success);
                //Assert.AreEqual("3050mV", result.Data);
                MessageBoxHelper.ShowError(result.Message);
            }
        }
        /// <summary>
        /// 补偿秒信号
        /// </summary>
        /// <param name="client">PcbTesterClient句柄</param>
        /// <param name="parameter">秒信号参数</param>
        /// <param name="clockValue"></param>
        private void CompensateClockSignal(PcbTesterClient client, SecondSignalCalibrationParameter parameter, decimal clockValue)
        {
            //1.开透明通道
            MeterCommunicationCommand communicationCommand = new MeterCommunicationCommand();

            var openResult = MeterCommunicationHelper.OpenTransparentChannel(
                client,
                new MeterCommunicationCommandParameter(
                    parameter.ComPort,
                    parameter.BaudRate,
                    parameter.DataBits,
                    parameter.Parity));

            //2.发送读部标信息帧
            byte[] resultBuffer = client.Write(MinistryStandardFrames.ReadMeterMessage, true);

            //3.处理表回的信息帧
            int b = resultBuffer[14] - 0x33;

            if ((b & 0x40) != 0)
            {
                b = b | 0x80;
            }
            int complementCode     = (int)ComplementCodeHelper.CalcComplementCode(clockValue);
            int sendComplementCode = (b + complementCode) & 0x7F;

            //秒信号无法修补
            if (!((0x00 <= sendComplementCode && sendComplementCode <= 0x0A) || (0x70 <= sendComplementCode && sendComplementCode <= 0x7F)))
            {
                MeterCommunicationHelper.ExitTransparentChannel(client); //退出透明通道
                return;
            }

            //4.若能补偿,则发送补偿秒信号的帧
            string clockChipFrame = GetWriteClockChipFrame((byte)sendComplementCode); //写时钟芯片信号帧

            client.Write(clockChipFrame, true);

            string compensateClockSignalFrame = GetCompensateClockSignalFrame((byte)sendComplementCode);

            client.Write(clockChipFrame, true);

            MeterCommunicationHelper.ExitTransparentChannel(client); //退出透明通道
        }
Ejemplo n.º 26
0
        /// <summary>
        /// 执行Commandl类Excute函数
        /// </summary>
        /// <param name="client">PcbTesterClient句柄</param>
        /// <param name="testItem">选中的检测项</param>
        /// <returns>检测结果</returns>
        public CommandResult Excute(PcbTesterClient client, TestItemInfo testItem)
        {
            var command = ProfileManager.Instance.GetCommand(testItem.Name);

            var commandResult = new CommandResult();

            try
            {
                commandResult = command.Execute(client, testItem.Parameter, null);
                logger.InfoFormat("Run test:{0}...", testItem.Name);
            }
            catch (Exception ex)
            {
                logger.ErrorFormat("Run test:{0}; Exception message:{1}.", testItem.Name, ex.Message);
                throw new Exception(ex.Message);
            }

            return(commandResult);
        }
        /// <summary>
        /// 激活表的秒信号
        /// </summary>
        /// <returns></returns>
        private void ActivateSecond(PcbTesterClient client, SecondSignalCalibrationParameter parameter)
        {
            //1.开透明通道
            MeterCommunicationCommand communicationCommand = new MeterCommunicationCommand();

            var communicationParamter = new MeterCommunicationCommandParameter(
                parameter.ComPort,
                parameter.BaudRate,
                parameter.DataBits,
                parameter.Parity);

            MeterCommunicationHelper.OpenTransparentChannel(client, communicationParamter);

            //2.发送激活秒信号帧
            client.Write(MinistryStandardFrames.ActivateSecond, true); //激活秒信号帧

            //3.发完退出透明通道
            MeterCommunicationHelper.ExitTransparentChannel(client); //退出透明通道
        }
Ejemplo n.º 28
0
        public void ExcuteTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();
                var command   = new MeasureACCurrentCommand();
                var parameter = new MeasureParameter(Phase.A)
                {
                    LowerLimit = 20m,   //单位mA
                    UpperLimit = 40m
                };


                CommandResult result = command.Execute(client, parameter, null);

                Assert.AreEqual("14.35mA", result.Data);
                Assert.AreEqual(false, result.Success);
            }
        }
Ejemplo n.º 29
0
        public void ExcuteTest()
        {
            using (var client = PcbTesterClient.Create(PortName, BaudRate))
            {
                client.Open();
                var command = new MeasureActivePowerCommand();

                var parameter = new MeasureParameter(Phase.A)
                {
                    LowerLimit = -2.2m,
                    UpperLimit = 2.2m
                };

                CommandResult result = command.Execute(client, parameter, null);

                Assert.AreEqual(true, result.Success);
                Assert.AreEqual("1.498W", result.Data);
            }
        }
Ejemplo n.º 30
0
        /// <summary>
        /// 执行被测表通信命令
        /// </summary>
        /// <param name="client">PcbTesterClient句柄</param>
        /// <param name="parameter">命令参数</param>
        /// <param name="context">不同命令之间的通信参数</param>
        /// <returns>检测结果</returns>
        public CommandResult Execute(PcbTesterClient client, CommandParameter parameter, CommandContext context)
        {
            var communicationParameter = parameter as MeterCommunicationCommandParameter;

            //打开透明通道
            WriteResult writeResult = client.Write(Obis, FormatWriteParameter(communicationParameter));

            var result = new CommandResult(writeResult.Success);

            if (!result.Success)  //应答错误
            {
                string message = string.Format(
                    Resources.MeterCommunicationCommand_WriteFailedMessageFormat,
                    this.Name,
                    writeResult.Error.ToString(),
                    communicationParameter.ToString());

                logger.Error(message);
                throw new CommunicationException(message);
            }

            byte[] recvData         = client.Write(communicationParameter.SendData, communicationParameter.IsHex);
            string actualRecvData   = Microstar.Utility.Hex.ToString(recvData, " ");
            string expectedRecvData = communicationParameter.ExpectedReceiveData.Trim();

            if (actualRecvData == expectedRecvData)
            {
                return(new CommandResult(true, actualRecvData));
            }
            else
            {
                return(new CommandResult(
                           false,
                           actualRecvData,
                           string.Format(
                               Resources.MeterCommunicationCommand_CommErrorMessageFormat,
                               this.Name,
                               communicationParameter.ToString(),
                               expectedRecvData,
                               actualRecvData)));
            }
        }