using DevExpress.XtraEditors; using Newtonsoft.Json.Linq; using NModbus; using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using System.IO; using System.Net.Sockets; using System.Text; using System.Windows.Forms; namespace Gs.DevApp { public partial class XtraForm1 : DevExpress.XtraEditors.XtraForm { string hostname = "192.168.60.51"; private string strCsl1 = ""; private string strSw1 = ""; private string SJJG = ""; private string GWZT = ""; private string SJJGZ = ""; public XtraForm1() { InitializeComponent(); } private void simpleButton2_Click(object sender, EventArgs e) { string strCsl1 = ""; string strSw1 = ""; string strCsl2 = ""; string strSw2 = ""; string strCsl3 = ""; string strSw3 = ""; string strCsl4 = ""; string strSw4 = ""; string strCsl5 = ""; string strSw5 = ""; string SJJG = ""; try//水检取数,后面补充 { System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder(); System.Text.StringBuilder sbFj = new System.Text.StringBuilder(); string hx = "\r\n"; ModbusFactory modbusFactory = new ModbusFactory(); IModbusMaster master = modbusFactory.CreateMaster(new TcpClient(hostname, 502)); master.Transport.ReadTimeout = 10000; master.Transport.Retries = 10000; //参数(分别为从站地址,起始地址,长度) byte slaveAddress = byte.Parse(txt_slaveAddress.SelectedText.Trim()); ushort numberOfPoints = ushort.Parse(txtGs.Text.Trim()); // 设置读取的起始地址和数量 //ushort startAddress = 300; //ushort numberOfPoints = 20; // 读取300-320共计21个寄存器的值 float fsw = 0; /* slaveAddress: 从站设备的 Modbus 地址(通常为 1~247) 起始寄存器地址 numberOfPoints要读取的寄存器数量(连续读取) 返回类型为 ushort[] 数组,slaveAddress 从机地址,也就是plc的设备id,startAddress 读取起始地址,numberOfPoints 这个是重点,这个参数决定每次读取的点号数量。写1的话表示每次读取一个点号。 */ //模式1出水量 ushort[] csl1 = master.ReadHoldingRegisters(slaveAddress, ushort.Parse(32.ToString()), numberOfPoints); strCsl1 = csl1[0].ToString(); sbFj.Append("模式1出水量:" + gets(csl1) + "-->" + strCsl1 + hx); //模式1水温 ushort[] sw1 = master.ReadHoldingRegisters(slaveAddress, ushort.Parse(31.ToString()), numberOfPoints); strSw1 = (float.Parse(sw1[0].ToString()) / 10).ToString(); sbFj.Append("模式1水温:" + gets(sw1) + "-->" + strSw1 + hx); //模式2出水量 ushort[] csl2 = master.ReadHoldingRegisters(slaveAddress, ushort.Parse(34.ToString()), numberOfPoints); strCsl2 = csl2[0].ToString(); sbFj.Append("模式2出水量:" + gets(csl2) + "-->" + strCsl2 + hx); //模式2水温 ushort[] sw2 = master.ReadHoldingRegisters(slaveAddress, ushort.Parse(33.ToString()), numberOfPoints); strSw2 = (float.Parse(sw2[0].ToString()) / 10).ToString(); sbFj.Append("模式2水温:" + gets(sw2) + "-->" + strSw2 + hx); //模式3出水量 ushort[] csl3 = master.ReadHoldingRegisters(slaveAddress, ushort.Parse(36.ToString()), numberOfPoints); strCsl3 = csl3[0].ToString(); sbFj.Append("模式2水温:" + gets(csl3) + "-->" + strCsl3 + hx); //模式3水温 ushort[] sw3 = master.ReadHoldingRegisters(slaveAddress, ushort.Parse(35.ToString()), numberOfPoints); strSw3 = (float.Parse(sw3[0].ToString()) / 10).ToString(); sbFj.Append("模式3水温:" + gets(sw3) + "-->" + strSw3 + hx); //模式4出水量 ushort[] csl4 = master.ReadHoldingRegisters(slaveAddress, ushort.Parse(38.ToString()), numberOfPoints); strCsl4 = csl4[0].ToString(); sbFj.Append("模式4出水量:" + gets(csl4) + "-->" + strCsl4 + hx); //模式4水温 ushort[] sw4 = master.ReadHoldingRegisters(slaveAddress, ushort.Parse(37.ToString()), numberOfPoints); strSw4 = (float.Parse(sw4[0].ToString()) / 10).ToString(); sbFj.Append("模式4水温:" + gets(sw4) + "-->" + strSw4 + hx); //模式5出水量 ushort[] csl5 = master.ReadHoldingRegisters(slaveAddress, ushort.Parse(40.ToString()), numberOfPoints); strCsl5 = csl5[0].ToString(); sbFj.Append("模式5出水量:" + gets(csl5) + "-->" + strCsl5 + hx); //模式5水温 ushort[] sw5 = master.ReadHoldingRegisters(slaveAddress, ushort.Parse(39.ToString()), numberOfPoints); strSw5 = (float.Parse(sw5[0].ToString()) / 10).ToString(); sbFj.Append("模式5水温:" + gets(sw5) + "-->" + strSw5 + hx); //结果 bool[] sjjg = master.ReadCoils(slaveAddress, ushort.Parse(77.ToString()), numberOfPoints); SJJG = sjjg[0].ToString(); sbFj.Append("结果:" + gets(sjjg) + "-->" + SJJG + hx); /////////////////// stringBuilder.Append(hx + "解析结果:" + hx); stringBuilder.Append(sbFj); richTextBox1.Text = stringBuilder.ToString(); // 3. 读取从站设备的寄存器short(无符号短整型)是一种数据类型,用于表示16位无符号整数,其取值范围从0到65,535 //ushort startAddress = 0; // 寄存器起始地址 //ushort numRegisters = ushort.Parse(txtGs.Text.Trim()); // 读取 10 个寄存器 //try //{ // // 读取保持寄存器(从站地址为 1) // // 参数(分别为从站地址,起始地址,长度) // ushort[] registers = master.ReadHoldingRegisters(1, startAddress, numRegisters); // // 输出结果 // Console.WriteLine("读取到的寄存器值:"); // stringBuilder.Append("总字节串:"); // foreach (var register in registers) // { // Console.WriteLine(register); // stringBuilder.Append(register); // } // stringBuilder.Append(hx + "解析结果:" + hx); // stringBuilder.Append(sbFj); // richTextBox1.Text = stringBuilder.ToString(); //} //catch (Exception ex) //{ // Console.WriteLine($"读取错误: {ex.Message}"); //} } catch (Exception ex) { //VisiblePanel(txtDQBarCode.EditValue.ToString(), ex.Message, "NG", Color.Yellow); //txtGWM.EditValue = ""; return; } } private string gets(ushort[] registers) { System.Text.StringBuilder stringBuilder = new StringBuilder(); foreach (var register in registers) { Console.WriteLine(register); stringBuilder.Append(register); } return stringBuilder.ToString(); } private string gets(bool[] registers) { System.Text.StringBuilder stringBuilder = new StringBuilder(); foreach (var register in registers) { Console.WriteLine(register); stringBuilder.Append(register); } return stringBuilder.ToString(); } private void simpleButton1_Click(object sender, EventArgs e) { DataTable dataTable1 = this.GetDataTable($"select MIG004,MIG005 from BASMIG(nolock) where MIG001='ShuiJianZhanWei01' and MIG003='{((BaseEdit)this.txtGWM).EditValue.ToString()}'", "tmpBASMIG2"); if (dataTable1 == null || dataTable1.Rows.Count <= 0) { MessageBox.Show("该水检站位码不存在,请确认!"); ((BaseEdit)this.txtGWM).EditValue = (object)""; } else { ModbusFactory modbusFactory = new ModbusFactory(); byte num1 = byte.Parse("1"); ushort num2 = ushort.Parse("1"); DataTable dataTable2 = GetDataTable(string.Format($"select case when MIG006='D' then MIG003+{dataTable1.Rows[0][0]} else MIG003+{dataTable1.Rows[0][1]} end MIG003,MIG004 from BASMIG(nolock) where MIG001 = 'ShuiJianAddress01' order by MIG005"), "tmpBASMIG3"); if (dataTable2 == null || dataTable2.Rows.Count <= 0) { MessageBox.Show("水检地址不存在,请确认!"); ((BaseEdit)this.txtGWM).EditValue = (object)""; } else { try { IModbusMaster master = modbusFactory.CreateMaster(new TcpClient(this.hostname, 502)); master.Transport.ReadTimeout = 10000; master.Transport.Retries = 10000; this.strCsl1 = master.ReadHoldingRegisters(num1, ushort.Parse(dataTable2.Rows[0]["MIG003"].ToString()), num2)[0].ToString(); this.strSw1 = (float.Parse(master.ReadHoldingRegisters(num1, ushort.Parse(dataTable2.Rows[1]["MIG003"].ToString()), num2)[0].ToString()) / 10f).ToString(); ushort[] numArray = master.ReadHoldingRegisters(num1, ushort.Parse(dataTable2.Rows[2]["MIG003"].ToString()), num2); this.SJJGZ = ""; this.SJJGZ = numArray[0].ToString(); this.SJJG = numArray[0].ToString(); this.SJJG = this.SJJG == "1" ? "OK" : (this.SJJG == "2" ? "NG" : this.SJJG); this.GWZT = master.ReadCoils(num1, ushort.Parse(dataTable2.Rows[3]["MIG003"].ToString()), num2)[0].ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); ((BaseEdit)this.txtGWM).EditValue = (object)""; return; } try { // this.manager.ExecuteSQLReturnInt(string.Format($"insert into WOMSJA\r\n (SJA001,SJA002,SJA003,SJA004,SJA005,SJA006,SJA007,SJA008,SJA009,SJA010,SJA011) \r\n values(NewID(),'{((BaseEdit)this.txtQAB002).EditValue.ToString()}','{((BaseEdit)this.txtGWM).EditValue.ToString()}',\r\n'{this.strCsl1}','{this.strSw1}','{this.SJJG}','{VSLoginInfo.LoginID}',convert(varchar(20),getdate(),120),'{((BaseEdit)this.txtDAA001).EditValue.ToString()}','{this.GWZT}','{this.SJJGZ}')")); } catch (Exception ex) { // this.VisiblePanel(((BaseEdit)this.txtDQBarCode).EditValue.ToString(), ex.Message, "NG", Color.Yellow); ((BaseEdit)this.txtGWM).EditValue = (object)""; return; } System.Text.StringBuilder stringBuilder = new System.Text.StringBuilder(); string hx = "\r\n"; stringBuilder.Append("模式1出水量:" + strCsl1 + hx); stringBuilder.Append("模式1水温度:" + strSw1 + hx); stringBuilder.Append("水检结果:" + SJJGZ + hx); stringBuilder.Append("水检结果:" + SJJG + hx); stringBuilder.Append("工位状态:" + GWZT + hx); richTextBox1.Text = stringBuilder.ToString(); // this.AddBarCode("已采集"); } } } private DataTable GetDataTable(string SQLString, string tmpBASMIG2) { string strConn = "Data Source=192.168.1.146;Initial Catalog=GS_MES;User ID=mesUser;Password =qixi1qaz@WSXmes"; using (var connection = new SqlConnection(strConn)) { var ds = new DataSet(); try { connection.Open(); var command = new SqlDataAdapter(SQLString, connection); command.Fill(ds, tmpBASMIG2); } catch (SqlException ex) { throw new Exception(ex.Message); } return ds.Tables[0]; } } } }