From 91d3b71e4ff6884ae4c064929b0071ed98363ff9 Mon Sep 17 00:00:00 2001 From: cdk <2441919651@qq.com> Date: 星期四, 21 八月 2025 08:29:38 +0800 Subject: [PATCH] Merge branch 'master' of http://git.gs-mes.com:8080/r/~tjx/GsMesClient --- DevApp/Gs.DevApp/XtraForm2.cs | 274 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 272 insertions(+), 2 deletions(-) diff --git a/DevApp/Gs.DevApp/XtraForm2.cs b/DevApp/Gs.DevApp/XtraForm2.cs index bee5936..6772666 100644 --- a/DevApp/Gs.DevApp/XtraForm2.cs +++ b/DevApp/Gs.DevApp/XtraForm2.cs @@ -1,21 +1,291 @@ 锘縰sing DevExpress.XtraEditors; +using DevExpress.XtraEditors.Controls; +using DevExpress.XtraGrid; +using DevExpress.XtraGrid.Columns; +using DevExpress.XtraGrid.Views.Base; +using DevExpress.XtraGrid.Views.Grid; +using DevExpress.XtraWaitForm; +using Gs.DevApp.ToolBox; +using Microsoft.Win32; +using NModbus; +using NModbus.Device; +using NModbus.Serial; using System; using System.Collections.Generic; using System.ComponentModel; +using System.Configuration; using System.Data; using System.Drawing; +using System.IO.Ports; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; +using static DevExpress.Data.Filtering.Helpers.SubExprHelper.ThreadHoppingFiltering; +using DateTime = System.DateTime; namespace Gs.DevApp { public partial class XtraForm2 : DevExpress.XtraEditors.XtraForm { + public delegate void HandleInterfaceUpdataDelegate(string text); + public SerialPort Sp = new SerialPort(); + private XtraForm2.HandleInterfaceUpdataDelegate interfaceUpdataHandle; public XtraForm2() { InitializeComponent(); + this.cmbBaudRate.EditValue = (object)"9600"; + this.GetComList(); + } + + private void GetComList() + { + this.cmbSerialPortNum.Properties.Items.Clear(); + + this.cmbBaudRate.Properties.Items.AddRange(new ImageComboBoxItem[5] + { + new ImageComboBoxItem("14400", (object) "14400", -1), + new ImageComboBoxItem("9600", (object) "9600", -1), + new ImageComboBoxItem("4800", (object) "4800", -1), + new ImageComboBoxItem("2400", (object) "2400", -1), + new ImageComboBoxItem("1200", (object) "1200", -1) + }); + + + RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm"); + if (registryKey == null) + return; + foreach (string valueName in registryKey.GetValueNames()) + { + string description = (string)registryKey.GetValue(valueName); + this.cmbSerialPortNum.Properties.Items.Add(new ImageComboBoxItem(description, (object)description)); + } + if (this.cmbSerialPortNum.Properties.Items.Count > 0) + this.cmbSerialPortNum.SelectedIndex = 0; + } + + public void GetWeight() + { + ModbusFactory factory = new ModbusFactory(); + LogHelper.Debug(this.ToString(), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":鍒涘缓modbus瀵硅薄..."); + IModbusMaster rtuMaster = (IModbusMaster)factory.CreateRtuMaster(this.Sp); + bool flag = true; + while (true) + { + try + { + if (!this.Sp.IsOpen) + { + LogHelper.Debug(this.ToString(), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":閲嶆柊鎵撳紑涓插彛杩炴帴..."); + this.Sp.Open(); + rtuMaster = (IModbusMaster)factory.CreateRtuMaster(this.Sp); + } + if (rtuMaster == null) + { + LogHelper.Debug(this.ToString(), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":閲嶆柊鍒涘缓modbus瀵硅薄..."); + rtuMaster = (IModbusMaster)factory.CreateRtuMaster(this.Sp); + } + // DataTable dataTable = this._sqlHelper.ExecuteDataTable("\r\nselect top 1 * from WOMZLA(nolock) \r\nwhere ZLA004=convert(varchar(10),getdate(),120) and ZLA003='IQC' and ZLA008='N'\r\norder by ZLA005"); + //if (dataTable != null && dataTable.Rows.Count > 0) + //{ + // // LoggerHelper.WriteInfoLog($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}:鍙戦�佷笂涓嬮檺鏁版嵁锛歿dataTable.Rows[0]["ZLA006"]}|{dataTable.Rows[0]["ZLA007"]}"); + // byte slaveAddress1 = byte.Parse("1"); + // ushort startAddress1 = ushort.Parse("0104"); + // ushort[] ushort2_1 = this.stringToUshort2(dataTable.Rows[0]["ZLA006"].ToString()); + // rtuMaster.WriteMultipleRegisters(slaveAddress1, startAddress1, ushort2_1); + // byte slaveAddress2 = byte.Parse("1"); + // ushort startAddress2 = ushort.Parse("0102"); + // ushort[] ushort2_2 = this.stringToUshort2(dataTable.Rows[0]["ZLA007"].ToString()); + // rtuMaster.WriteMultipleRegisters(slaveAddress2, startAddress2, ushort2_2); + // this._sqlHelper.ExecuteNonQuery($"update WOMZLA set ZLA008='Y',ZLA009=convert(varchar(20),getdate(),120) where ZLA001='{dataTable.Rows[0]["ZLA001"]}'"); + //} + //else + { + byte slaveAddress3 = byte.Parse("1"); + ushort startAddress3 = ushort.Parse("0002"); + ushort numberOfPoints1 = ushort.Parse("2"); + ushort[] numArray = rtuMaster.ReadHoldingRegisters(slaveAddress3, startAddress3, numberOfPoints1); + float single = BitConverter.ToSingle(this.CombomBinaryArray(BitConverter.GetBytes(numArray[1]), BitConverter.GetBytes(numArray[0])), 0); + this.Invoke((Delegate)this.interfaceUpdataHandle, (object)single.ToString()); + byte slaveAddress4 = byte.Parse("1"); + ushort startAddress4 = ushort.Parse("0001"); + ushort numberOfPoints2 = ushort.Parse("1"); + int int32 = Convert.ToInt32(rtuMaster.ReadHoldingRegisters(slaveAddress4, startAddress4, numberOfPoints2)[0].ToString()); + string str = Convert.ToString(int32, 2).PadLeft(16 /*0x10*/, '0'); + char ch1 = str[1]; + char ch2 = str[6]; + if (ch1 == '0' && ch2 == '0') + { + // this._sqlHelper.ExecuteNonQuery($"\r\nif not exists(select 1 from WOMZLB(nolock) where ZLB001='IQC' and ZLB002='{single.ToString()}' and ZLB003='{int32.ToString()}')\r\nbegin\r\n if exists(select 1 from WOMZLB(nolock) where ZLB001='IQC')\r\n begin\r\n\t update WOMZLB set ZLB002='{single.ToString()}',ZLB003='{int32.ToString()}' where ZLB001='IQC'\r\n end\r\n else\r\n begin\r\n\t insert into WOMZLB(ZLB001,ZLB002,ZLB003)\r\n\t select 'IQC','{single.ToString()}','{int32.ToString()}'\r\n end\r\nend\r\n"); + flag = true; + } + else if (flag) + { + // this._sqlHelper.ExecuteNonQuery($"\r\nif not exists(select 1 from WOMZLB(nolock) where ZLB001='IQC' and ZLB002='{single.ToString()}' and ZLB003='{int32.ToString()}')\r\nbegin\r\n if exists(select 1 from WOMZLB(nolock) where ZLB001='IQC')\r\n begin\r\n\t update WOMZLB set ZLB002='0',ZLB003='{int32.ToString()}' where ZLB001='IQC'\r\n end\r\n else\r\n begin\r\n\t insert into WOMZLB(ZLB001,ZLB002,ZLB003)\r\n\t select 'IQC','0','{int32.ToString()}'\r\n end\r\nend\r\n"); + flag = false; + } + MessageBox.Show(single.ToString() + ":" + int32.ToString()); + LogHelper.Debug(this.ToString(), "single:" + single.ToString()); + LogHelper.Debug(this.ToString(), "int32:" + int32.ToString()); + } + // Thread.Sleep(2000); + } + catch (Exception ex) + { + // Thread.Sleep(2000); + MessageBox.Show(ex.Message); + LogHelper.Debug(this.ToString(), "single:" + ex.Message); + } + } + } + private byte[] CombomBinaryArray(byte[] srcArray1, byte[] srcArray2) + { + byte[] destinationArray = new byte[srcArray1.Length + srcArray2.Length]; + Array.Copy((Array)srcArray1, 0, (Array)destinationArray, 0, srcArray1.Length); + Array.Copy((Array)srcArray2, 0, (Array)destinationArray, srcArray1.Length, srcArray2.Length); + return destinationArray; + } + private void simpleButton1_Click(object sender, EventArgs e) + { + try + { + DateTime now = DateTime.Now; + // LoggerHelper.WriteInfoLog(now.ToString("yyyy-MM-dd HH:mm:ss") + ":寮�濮嬮噰闆�"); + if (this.cmbBaudRate.Text.Trim() != "" && this.cmbSerialPortNum.Text != "") + { + now = DateTime.Now; + // LoggerHelper.WriteInfoLog(now.ToString("yyyy-MM-dd HH:mm:ss") + ":閰嶇疆涓插彛閫氫俊"); + // this.interfaceUpdataHandle = new MainForm.HandleInterfaceUpdataDelegate(this.UpdateTextBox); + this.Sp.PortName = this.cmbSerialPortNum.Text.Trim(); + this.Sp.BaudRate = Convert.ToInt32(this.cmbBaudRate.Text.Trim()); + this.Sp.Parity = Parity.None; + this.Sp.StopBits = StopBits.One; + now = DateTime.Now; + // LoggerHelper.WriteInfoLog(now.ToString("yyyy-MM-dd HH:mm:ss") + ":鎵撳紑涓插彛鍚岄�氫俊"); + this.Sp.Open(); + MessageBox.Show("鎵撳紑鎴愬姛Sp:" + Sp.IsOpen.ToString()); + //this.button1.Enabled = false; + //this.button2.Enabled = true; + //this.timer1.Enabled = false; + //now = DateTime.Now; + //LoggerHelper.WriteInfoLog(now.ToString("yyyy-MM-dd HH:mm:ss") + ":鍚姩鍒锋柊鏁版嵁瀹氭椂鍣�"); + //this.timer1.Start(); + } + else + { + now = DateTime.Now; + // LoggerHelper.WriteErrorLog(now.ToString("yyyy-MM-dd HH:mm:ss") + ":璇疯緭鍏ユ纭殑绔彛鍙峰拰娉㈢壒鐜�"); + int num = (int)MessageBox.Show("璇疯緭鍏ユ纭殑绔彛鍙峰拰娉㈢壒鐜囷紒"); + this.cmbSerialPortNum.Focus(); + } + } + catch (Exception ex) + { + // LoggerHelper.WriteErrorLog($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}:{ex.Message}"); + int num = (int)MessageBox.Show($"绔彛{this.cmbSerialPortNum.Text.Trim()}鎵撳紑澶辫触锛亄ex.Message}"); + } + } + + private void simpleButton2_Click(object sender, EventArgs e) + { + GetWeight(); + } + + public void ReadWeight222() + { + ModbusFactory factory = new ModbusFactory(); + try + { + // 1. 閰嶇疆涓插彛鍙傛暟锛堥渶涓庣數瀛愮Г涓�鑷达級 + string portName = "COM1"; // 涓插彛鍙� + int baudRate = 9600; // 娉㈢壒鐜� + Parity parity = Parity.None; // 鏍¢獙浣� + int dataBits = 8; // 鏁版嵁浣� + StopBits stopBits = StopBits.One; // 鍋滄浣� + + // 2. 鍒涘缓涓插彛杩炴帴 + SerialPort serialPort = new SerialPort(portName, baudRate, parity, dataBits, stopBits); + serialPort.Open(); + + // 3. 鍒涘缓Modbus RTU涓荤珯 + IModbusMaster master = (IModbusMaster)factory.CreateRtuMaster(serialPort); + // 4. 閰嶇疆璇诲彇鍙傛暟 + //byte slaveId = 1; // 浠庣珯鍦板潃锛堢數瀛愮Г鐨凪odbus鍦板潃锛� + //ushort startAddress = 0; // 瀵勫瓨鍣ㄨ捣濮嬪湴鍧�锛�40001瀵瑰簲鍦板潃0锛� + //ushort numRegisters = 2; // 璇诲彇2涓瘎瀛樺櫒锛�32浣嶆暟鎹級 + + + byte slaveAddress3 = byte.Parse("1"); + ushort startAddress3 = ushort.Parse("0"); + ushort numberOfPoints1 = ushort.Parse("2"); + // 5. 璇诲彇淇濇寔瀵勫瓨鍣� + ushort[] registers = master.ReadHoldingRegisters(slaveAddress3, startAddress3, numberOfPoints1); + + // 6. 澶勭悊杩斿洖鏁版嵁锛堝亣璁炬暟鎹负32浣嶆诞鐐规暟锛屽ぇ绔牸寮忥級 + byte[] bytes = new byte[4]; + Buffer.BlockCopy(registers, 0, bytes, 0, 4); + + // 澶勭悊瀛楄妭搴忥紙鏍规嵁璁惧瑕佹眰鍙兘闇�瑕佽皟鏁达級 + if (BitConverter.IsLittleEndian) + { + Array.Reverse(bytes); // 濡傛灉璁惧鏄ぇ绔ā寮忥紝闇�瑕佸弽杞瓧鑺� + } + + // 杞崲涓烘诞鐐规暟 + float weight = BitConverter.ToSingle(bytes, 0); + + MessageBox.Show(weight.ToString()); + } + catch (Exception ex) + { + Console.WriteLine($"璇诲彇澶辫触: {ex.Message}"); + MessageBox.Show("err:" + ex.Message.ToString()); + } + } + + private void simpleButton3_Click(object sender, EventArgs e) + { + ModbusFactory factory = new ModbusFactory(); + // 1. 閰嶇疆涓插彛鍙傛暟 + SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); + serialPort.Open(); + + + // 鏋勯�犺嚜瀹氫箟鍔熻兘鐮佽姹傚抚锛堢ず渚嬶細鍔熻兘鐮� 0x31锛� + byte[] request = new byte[] { 0x01, 0x31, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00 }; + serialPort.Write(request, 0, request.Length); + + // 璇诲彇鍝嶅簲 + byte[] buffer = new byte[256]; + int bytesRead = serialPort.Read(buffer, 0, buffer.Length); + MessageBox.Show($"鍝嶅簲鏁版嵁: {BitConverter.ToString(buffer, 0, bytesRead)}"); + + //serialPort.Close(); + + // 2. 鍒涘缓Modbus RTU涓荤珯 + IModbusMaster modbusMaster = (IModbusMaster)factory.CreateRtuMaster(serialPort); + try + { + while (true) + { + // 3. 璇诲彇淇濇寔瀵勫瓨鍣紙浠庣珯鍦板潃1锛岃捣濮嬪湴鍧�0x0001锛岃鍙�2涓瘎瀛樺櫒锛� + ushort[] registers = modbusMaster.ReadHoldingRegisters(1, 0x0001, 2); + MessageBox.Show("d"); + // 4. 瑙f瀽鏁版嵁锛堝亣璁惧瘎瀛樺櫒瀛樺偍鐨勬槸閲嶉噺鍊硷紝鍗曚綅涓哄厠锛� + int weight = (registers[0] << 16) + registers[1]; + Console.WriteLine($"閲嶉噺鍊�: {weight} g"); + MessageBox.Show($"閲嶉噺鍊�: {weight} g"); + System.Threading.Thread.Sleep(1000); // 姣忕璇诲彇涓�娆� + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + Console.WriteLine($"閿欒: {ex.Message}"); + } + finally + { + serialPort.Close(); + } + } } } \ No newline at end of file -- Gitblit v1.9.3