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; } }
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; } }