Example #1
0
        private void btn2Power_Click(object sender, EventArgs e)
        {
            Stopwatch timer = new Stopwatch();

            try
            {
                txt1Rece.Text = "开始测试电表: " + cbox7ID.Text + " 设备.";
                this.Cursor   = Cursors.WaitCursor;
                var devicefile = comb0Devices.Text;
                if (string.IsNullOrEmpty(devicefile))
                {
                    devicefile = "device";
                }
                var tmpCmdInfoFile = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "\\" + devicefile + ".xml", System.Text.Encoding.UTF8);

                var CmdInfo = Ints.FromXML(tmpCmdInfoFile).CmdInfos;

                if (CmdInfo == null)
                {
                    timer.Start();

                    btn2NewTest_Click(null, null);

                    timer.Stop();
                    return;
                }
                initSP();

                timer.Start();

                IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(_sp);

                byte   slaveId = byte.Parse(cbox7ID.Text);
                object ddvalue = null;
                foreach (CmdInfo info in CmdInfo)
                {
                    getInfoPower("采集项目[" + info.Name + "],采集地址[" + info.Address + "]");
                    ushort startAddress = Convert.ToUInt16(info.Address, 16);
                    ushort npoints      = Ints.Reg16Count(info.CsharpType);

                    var tomethod = "To" + info.CsharpType.Split('.')[1];
                    var rountLen = 2;
                    if (info.UnitFactor < 1)
                    {
                        rountLen = info.UnitFactor.ToString().Length - 1;
                    }

                    ushort[] dd;
                    //no main
                    #region no main
                    try
                    {
                        dd = master.ReadHoldingRegisters(slaveId, startAddress, npoints);
                    }
                    catch (Exception ex)
                    {
                        getInfoPower("***********采集项目[" + info.Name + "],采集地址[" + info.Address + "],设备地址:[" + slaveId + "],Error:[" + ex.Message + "]");

                        throw ex;
                        break;
                    }
                    #endregion


                    string[] cc = dd.ToList().Select(m => m.ToString("X")).ToArray();

                    ddvalue = Ints.ToValue(dd, tomethod, info.DaDuan);

                    var EndValue = Math.Round(Convert.ToDouble(ddvalue), rountLen);

                    getInfoPower("收到数据," + String.Join(",", cc));

                    //if (info.Name.ToLower() == "yearmonth")
                    //{
                    //    year = 2000 + Ints.UshortHighByteToInt(dd[0]);
                    //    month = Ints.UshortLowByteToInt(dd[0]);
                    //}
                    //if (info.Name.ToLower() == "dayhour")
                    //{
                    //    day = Ints.UshortHighByteToInt(dd[0]);
                    //    hour = Ints.UshortLowByteToInt(dd[0]);
                    //}
                    //if (info.Name.ToLower() == "minutesecond")
                    //{
                    //    minute = Ints.UshortHighByteToInt(dd[0]);
                    //    second = Ints.UshortLowByteToInt(dd[0]);
                    //}
                    var tmpname   = info.Name.ToLower();
                    var currValue = EndValue * info.UnitFactor;

                    logValue(tmpname, currValue.ToString());
                }
                getInfoPower("测试电表:[ " + cbox7ID.Text + " ]完成。");
                timer.Stop();
                MessageBox.Show("Success:测试成功。使用毫秒[" + timer.ElapsedMilliseconds + " ms],时间[" + timer.Elapsed + "]");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error:测试失败。" + ex.Message);
            }
            finally
            {
                if (timer.IsRunning)
                {
                    timer.Stop();
                }
                getInfoPower("####################使用毫秒[" + timer.ElapsedMilliseconds + " ms],时间[" + timer.Elapsed + "]");
                if (_sp.IsOpen)
                {
                    _sp.Close();
                }
                this.Cursor = Cursors.Default;
            }
        }
Example #2
0
        void testDianBiao()
        {
            ushort main_allLen       = 0;
            ushort main_startAddress = 0;
            ushort main_npoints      = 0;
            var    rountLen          = 2;

            ushort[] main_Alldd = new ushort[] { };

            object ddvalue = null;

            Stopwatch timer = new Stopwatch();

            try
            {
                txt1Rece.Text = "************************ 开始测试电表: " + cbox7ID.Text + " 设备. ***********************";
                this.Cursor   = Cursors.WaitCursor;
                var devicefile = comb0Devices.Text;
                if (string.IsNullOrEmpty(devicefile))
                {
                    devicefile = "device";
                }
                var tmpCmdInfoFile = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "\\" + devicefile + ".xml", System.Text.Encoding.UTF8);


                //初始化serial port
                initSP();

                //记时
                timer.Start();

                IModbusSerialMaster master = ModbusSerialMaster.CreateRtu(_sp);

                var devices  = Ints.FromXML(tmpCmdInfoFile);
                var mains    = devices.Mains;
                var CmdInfos = devices.CmdInfos;

                byte slaveId = byte.Parse(cbox7ID.Text);

                if (mains != null)
                {
                    foreach (var main in mains)
                    {
                        getInfoPower("***********采集项目[" + main.Name + "]*************,采集地址[" + main.Address + ",连续数量:" + main.CsharpType + "],设备地址:[" + slaveId + "]");
                        main_allLen       = Convert.ToUInt16(main.CsharpType);
                        main_startAddress = Convert.ToUInt16(main.Address, 16);
                        main_npoints      = Convert.ToUInt16(main.CsharpType);
                        //get All Data
                        main_Alldd = master.ReadHoldingRegisters(slaveId, main_startAddress, main_npoints);

                        //get
                        #region getValue
                        foreach (CmdInfo info in main.CmdInfos)
                        {
                            var tomethod = "To" + info.CsharpType.Split('.')[1];

                            if (info.UnitFactor < 1)
                            {
                                rountLen = info.UnitFactor.ToString().Length - 1;
                            }
                            //取几个
                            var startAddress = Convert.ToUInt16(info.Address, 16);
                            var npoints      = Ints.Reg16Count(info.CsharpType);

                            ushort[] dd = new ushort[npoints];


                            #region main
                            //从第几个开始取
                            var currAddress = startAddress - main_startAddress;
                            //log
                            getInfoPower("newByAll采集项目[" + info.Name + "],采集地址[" + info.Address + "],长度:" + npoints + ",第:" + currAddress + "个");

                            Array.Copy(main_Alldd, currAddress, dd, 0, npoints);
                            #endregion


                            string[] cc = dd.ToList().Select(m => m.ToString("X")).ToArray();

                            ddvalue = Ints.ToValue(dd, tomethod, info.DaDuan);

                            var EndValue = Math.Round(Convert.ToDouble(ddvalue), rountLen);

                            getInfoPower("收到数据," + String.Join(",", cc));

                            var tmpname   = info.Name.ToLower();
                            var currValue = EndValue * info.UnitFactor;

                            logValue(tmpname, currValue.ToString());
                        }
                        #endregion
                    }
                }
                else
                {
                    foreach (CmdInfo info in CmdInfos)
                    {
                        var tomethod = "To" + info.CsharpType.Split('.')[1];

                        if (info.UnitFactor < 1)
                        {
                            rountLen = info.UnitFactor.ToString().Length - 1;
                        }
                        //取几个
                        var startAddress = Convert.ToUInt16(info.Address, 16);
                        var npoints      = Ints.Reg16Count(info.CsharpType);

                        ushort[] dd = new ushort[npoints];

                        getInfoPower("OldByOne采集项目[" + info.Name + "],采集地址[" + info.Address + "]");
                        //no main
                        #region no main
                        try
                        {
                            dd = master.ReadHoldingRegisters(slaveId, startAddress, npoints);
                        }
                        catch (Exception ex)
                        {
                            getInfoPower("***********采集项目[" + info.Name + "],采集地址[" + info.Address + "],设备地址:[" + slaveId + "],Error:[" + ex.Message + "]");
                            throw ex;
                        }
                        #endregion
                        string[] cc = dd.ToList().Select(m => m.ToString("X")).ToArray();

                        ddvalue = Ints.ToValue(dd, tomethod, info.DaDuan);

                        var EndValue = Math.Round(Convert.ToDouble(ddvalue), rountLen);

                        getInfoPower("收到数据," + String.Join(",", cc));

                        var tmpname   = info.Name.ToLower();
                        var currValue = EndValue * info.UnitFactor;

                        logValue(tmpname, currValue.ToString());
                    }
                }
                if (timer.IsRunning)
                {
                    timer.Stop();
                }
                getInfoPower("测试电表:[ " + cbox7ID.Text + " ]完成。");

                MessageBox.Show("Success:测试成功。使用毫秒[" + timer.ElapsedMilliseconds + " ms],时间[" + timer.Elapsed + "]");
            }
            catch (Exception ex)
            {
                if (timer.IsRunning)
                {
                    timer.Stop();
                }
                //MessageBox.Show(ex.Message);
                throw ex;
            }
            finally
            {
                if (timer.IsRunning)
                {
                    timer.Stop();
                }
                getInfoPower("####################使用毫秒[" + timer.ElapsedMilliseconds + " ms],时间[" + timer.Elapsed + "]");

                if (_sp.IsOpen)
                {
                    _sp.Close();
                }
                this.Cursor = Cursors.Default;
            }
        }