1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
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];
            }
        }
 
    }
}