private void pictureBox1_Click(object sender, EventArgs e) { if (pictureBox1.Image.Tag.ToString() == "open") { pictureBox1.Image = WinFromStart.Properties.Resources.close; pictureBox1.Image.Tag = "close"; mc.App_Close(); } else { pictureBox1.Image = WinFromStart.Properties.Resources.open; pictureBox1.Image.Tag = "open"; UdpSever udps = new UdpSever(); udps.eventTrigger += ProtocolAnalysisSE_MainUdp.ProtocolPackageUdpResolver; udps.Listener(int.Parse(MainStatic.Port)); //解析 Subject sub = new Subject(); sub.DataAnalysis += ProtocolAnalysisSE_Main.ProtocolPackageResolver; //命令下发 CommandIssued_Main.CommandIssued_MainInit(); sub.CommandSending += CommandIssued_Main.CommandIssuedInitEvent; mc.App_Open(sub); } }
private void fun() { while (this.IsHandleCreated && this.IsDisposed == false) { this.Invoke(new MethodInvoker(delegate { //更新数据 for (int i = 0; i < UdpSever.RegisterNum; i++) { doubleBufferListView1.Items[i].SubItems[1].Text = UdpSever.StampToString(UdpSever.Register[deviceNum, i, 1]); //时间戳 doubleBufferListView1.Items[i].SubItems[2].Text = UdpSever.Register[deviceNum, i, 0].ToString(); //十进制 doubleBufferListView1.Items[i].SubItems[3].Text = UdpSever.Register[deviceNum, i, 0].ToString("X2"); //十六进制 doubleBufferListView1.Items[i].SubItems[4].Text = Convert.ToString(UdpSever.Register[deviceNum, i, 0], 2).PadLeft(16, '0'); //二进制 byte[] bt = new byte[2]; bt[0] = (byte)(UdpSever.Register[deviceNum, i, 0] >> 8); bt[1] = (byte)(UdpSever.Register[deviceNum, i, 0]); string str = Encoding.GetEncoding("GB2312").GetString(bt, 0, 2).Replace("\0", ""); doubleBufferListView1.Items[i].SubItems[5].Text = str;//ASCII字符串 if (i % 2 == 0) { doubleBufferListView1.Items[i].BackColor = Color.FromArgb(200, 0xf5, 0xf6, 0xeb); } } })); Thread.Sleep(1000); } }
private void DataForm_Load(object sender, EventArgs e) { UdpSever.ReturnMsg rm = UdpSever.Read_Multiple_Registers(deviceNum, 0, UdpSever.RegisterNum); if (rm.resault) { for (int i = 0; i < rm.DataBuf.Length; i++) { UdpSever.Register[deviceNum, i, 0] = rm.DataBuf[i]; UdpSever.Register[deviceNum, i, 1] = UdpSever.DateTimeToStamp(DateTime.Now); } } else { UdpSever.Shell.WriteError("错误信息", "读取失败!"); } //加载数据 for (int i = 0; i < UdpSever.RegisterNum; i++) { ListViewItem item = new ListViewItem(); item.Text = i.ToString(); //"寄存器" item.SubItems.Add(UdpSever.Register[deviceNum, i, 1].ToString()); //"时间戳" item.SubItems.Add(UdpSever.Register[deviceNum, i, 0].ToString()); //"十进制" item.SubItems.Add(UdpSever.Register[deviceNum, i, 0].ToString("X2")); // "十六进制" item.SubItems.Add(Convert.ToString(UdpSever.Register[deviceNum, i, 0], 2).PadLeft(16, '0')); //"二进制" byte[] bt = new byte[2]; bt[0] = (byte)(UdpSever.Register[deviceNum, i, 0] >> 8); bt[1] = (byte)(UdpSever.Register[deviceNum, i, 0]); string str = Encoding.GetEncoding("GB2312").GetString(bt, 0, 2).Replace("\0", ""); item.SubItems.Add(str);//"字符串" doubleBufferListView1.Items.Add(item); } //启动自动更新进程 th = new Thread(fun); th.Start(); }
private void sendstr(TextBox tx) { UdpSever.ReturnMsg returnmsg = new UdpSever.ReturnMsg(); if (tx.Text.Length > 0) { byte[] byt = Encoding.Default.GetBytes(textBox_str1.Text); UInt16 data = 0; if (byt.Length > 0) { if (byt.Length == 1) { data = (UInt16)(byt[0]); } else if (byt.Length == 2) { data = (UInt16)((byt[0] << 8) | byt[1]); } returnmsg = UdpSever.Write_Register(deviceID, registerID, data); // Console.WriteLine(string.Format("写单个字节结果:{0}\r\n", returnmsg.resault.ToString())); if (!returnmsg.resault) { MessageBox.Show("写入失败!"); } UdpSever.Register[deviceID, registerID, 0] = data; } } }
private void mainThread() { //启动Console信息同步进程 ConsoleThread = new ExThread(ConsoleFunc); ConsoleThread.Start(); MyConsole.Add("系统启动中..."); MyConsole.Add(string.Format("服务器地址:{0}", UdpSever.ServerAddress)); MyConsole.Add(string.Format("设备数:{0}", UdpSever.DeviceNum)); MyConsole.Add(string.Format("寄存器数:{0}", UdpSever.RegisterNum)); MyConsole.Add(string.Format("单帧数据长度:{0}", UdpSever.FrameLen)); MyConsole.Add(string.Format("心跳周期:{0}秒", UdpSever.HeartCycle)); MyConsole.Add(string.Format("重发次数:{0}", UdpSever.RepeatNum)); MyConsole.Add(string.Format("超时时间:{0}", UdpSever.ResponseTimeout)); MyConsole.Add(string.Format("响应帧缓冲池容量:{0}", UdpSever.RESPONSE_MAX_LEN)); MyConsole.Add(string.Format("设备总数:{0}", UdpSever.DeviceNum)); //测试ModbusTcp服务器连接 Ping pingSender = new Ping(); PingReply reply = pingSender.Send("192.168.250.102", 100);//第一个参数为ip地址,第二个参数为ping的时间 if (reply.Status == IPStatus.Success) { MyConsole.Add("ModbusTcp服务器连接成功!", Color.Green); } else { MyConsole.Add("ModbusTcp服务器连接失败!", Color.Red); } #region 获取本机IP,自动开启Dbus服务器 string name = Dns.GetHostName(); IPAddress[] ipadrlist = Dns.GetHostAddresses(name); foreach (IPAddress ipa in ipadrlist) { if (ipa.AddressFamily == AddressFamily.InterNetwork) { MyConsole.Add(string.Format("本机IP:[{0}]", ipa)); UdpSever.ipaddress = ipa; } } //自动启动服务器 UdpSever.Resault rs = UdpSever.Start(); //更新界面 udpConfigForm_MyEvent(); #endregion #region 启动任务界面 this.Invoke(new MethodInvoker(delegate { taskForm.TopLevel = false; taskForm.Parent = splitContainer3.Panel1; taskForm.Show(); //弹出这个窗口 taskForm.Focus(); //激活显示 })); #endregion }
//读多个寄存器 private void button1_Click(object sender, EventArgs e) { //UdpSever.Log("debug", "开始执行{0}", DateTime.Now.ToLocalTime()); var bb = sender as Button; bb.Enabled = false; UdpSever.ReturnMsg rm = UdpSever.Read_Multiple_Registers(deviceNum, 0, 128); bb.Enabled = true; //UdpSever.Log("debug", "结束{0}", DateTime.Now.ToLocalTime()); }
private async void WriteRegister(Button bb, int reg, int data, string str) { await Task.Run(() => { UdpSever.Write_Register(deviceNum, reg, data); }); //UdpSever.Log("debug", str); bb.Enabled = true; }
private void fun() { while (true) { Thread.Sleep(50); this.Invoke(new MethodInvoker(delegate { //更新数据 label_Hex.Text = UdpSever.Register[deviceID, registerID, 0].ToString("X2"); //十六进制 label_Dec.Text = UdpSever.Register[deviceID, registerID, 0].ToString(); //十进制 string bin = Convert.ToString(UdpSever.Register[deviceID, registerID, 0], 2).PadLeft(16, '0');//二进制 byte[] bt = new byte[2]; bt[0] = (byte)(UdpSever.Register[deviceID, registerID, 0] >> 8); bt[1] = (byte)(UdpSever.Register[deviceID, registerID, 0]); string str = Encoding.GetEncoding("GB2312").GetString(bt, 0, 2).Replace("\0", ""); label_str.Text = str;//ASCII字符串 //显示时间 DateTime dtstart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); long itime = long.Parse(UdpSever.Register[deviceID, registerID, 1] + "0000000"); TimeSpan tonow = new TimeSpan(itime); label_updataTime.Text = UdpSever.StampToString(UdpSever.Register[deviceID, registerID, 1]); //label_updataTime.Text = dtstart.Add(tonow).ToLongDateString() + " " + dtstart.Add(tonow).ToLongTimeString(); string b = string.Empty; for (int i = 0; i < 16; i++) { b = "button_" + i.ToString(); ((Button)this.Controls.Find(b, true)[0]).Text = bin.Substring(15 - i, 1); } Color trueColor = Color.Green; Color falseColor = Color.Red; for (int i = 0; i < 16; i++) { b = "button_" + i.ToString(); Button btn = ((Button)this.Controls.Find(b, true)[0]); if (btn.Text == "0") { btn.BackColor = falseColor; } else { btn.BackColor = trueColor; } } })); } }
private void MDIParent1_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("真的要退出程序吗?", "退出程序", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { e.Cancel = true; } else if (UdpSever.State)//如果服务器运行,则关闭服务器 { UdpSever.Stop(); } }
//写多个寄存器 private void button2_Click(object sender, EventArgs e) { Random rd = new Random(); UInt16[] data = new ushort[128]; for (int i = 0; i < data.Length; i++) { data[i] = (ushort)(rd.Next(1, 1000)); } UdpSever.ReturnMsg rm = UdpSever.Write_Multiple_Registers(deviceNum, 0, 128, data); //Console.WriteLine("写入结果:\r\n{0}", rm.ToString()); }
private void MDIParent1_Load(object sender, EventArgs e) { //初始化系统参数 XmlHelper.InitDebug(); int delay = 30; UdpSever.Shell.WriteNotice(delay, "系统消息", "系统启动..."); UdpSever.Shell.WriteNotice(delay, "系统消息", "加载调试信息..."); UdpSever.Shell.WriteNotice(delay, "系统消息", "获取本机IP..."); UdpSever.Shell.WriteNotice(delay, "系统消息", "加载服务器配置..."); UdpSever.Shell.WriteLine(delay, "[服务器][服务器地址][ServerAddress][{0}]", UdpSever.ServerAddress); UdpSever.Shell.WriteLine(delay, "[服务器][设备数][DeviceNum][{0}]", UdpSever.DeviceNum); UdpSever.Shell.WriteLine(delay, "[服务器][寄存器数][RegisterNum][{0}]", UdpSever.RegisterNum); UdpSever.Shell.WriteLine(delay, "[服务器][单帧数据长度][FrameLen][{0}]", UdpSever.FrameLen); UdpSever.Shell.WriteLine(delay, "[服务器][心跳周期][HeartCycle][{0}]秒", UdpSever.HeartCycle); UdpSever.Shell.WriteLine(delay, "[服务器][重发次数][RepeatNum][{0}]", UdpSever.RepeatNum); UdpSever.Shell.WriteLine(delay, "[服务器][超时时间][ResponseTimeout][{0}]", UdpSever.ResponseTimeout); UdpSever.Shell.WriteLine(delay, "[服务器][响应帧缓冲池容量][RESPONSE_MAX_LEN][{0}]", UdpSever.RESPONSE_MAX_LEN); UdpSever.Shell.WriteLine(delay, "[服务器][设备总数][DeviceNum][{0}]\r\n", UdpSever.DeviceNum); #region 获取本机IP,自动开启服务器 string name = Dns.GetHostName(); IPAddress[] ipadrlist = Dns.GetHostAddresses(name); foreach (IPAddress ipa in ipadrlist) { if (ipa.AddressFamily == AddressFamily.InterNetwork) { UdpSever.ipaddress = ipa; UdpSever.Shell.WriteNotice(delay, "系统消息", "本机IP:[{0}]", ipa.ToString()); string str = Ini.Read("网络配置", "Port"); if (str != "null") { UdpSever.port = int.Parse(str); } UdpSever.Shell.WriteNotice(delay, "系统消息", "本机端口:[{0}]", str); } } //自动启动服务器 UdpSever.Resault rs = UdpSever.Start(); //更新界面 udpConfigForm_MyEvent(); #endregion treeView1.Nodes.Clear(); }
private void button_0_Click(object sender, EventArgs e) { Int64 data = UdpSever.Register[deviceID, registerID, 0]; data ^= 1; UdpSever.ReturnMsg returnmsg = new UdpSever.ReturnMsg(); returnmsg = UdpSever.Write_Register(deviceID, registerID, (UInt16)data); //Console.WriteLine(string.Format("写单个字节结果:{0}\r\n", returnmsg.resault.ToString())); if (!returnmsg.resault) { MessageBox.Show("写入失败!"); } }
//设置多个数据 public static void SetRegister(int deviceAddress, int start, int end) { ushort[] temp; string Msg = string.Format("设置:{0,-2}-{1,-2}", start, end); ////检测待写入数据和上次写入是否有变化 //for (int i = start; i <= end; i++) //{ // if (UdpSever.Register[deviceAddress, i, 0] != DbusCompare[deviceAddress, i]) // { // temp = new ushort[end - start + 1]; // for (int j = start; j <= end; j++) // { // temp[j - start] = (ushort)UdpSever.Register[deviceAddress, j, 0]; // } // UdpSever.ReturnMsg mg = UdpSever.Write_Multiple_Registers(deviceAddress, start, end - start + 1, temp); // //发送成功,更新比较数组 // if (mg.resault) // { // for (int j = start; j <= end; j++) // { // DbusCompare[deviceAddress, j] = temp[j]; // } // } // else // ConsoleLog.WriteLog(string.Format("Dbus操作失败!:[{0}]", Msg), Color.Red, 20); // break; // } //} //检测待写入数据和上次写入是否有变化 temp = new ushort[end - start + 1]; for (int j = start; j <= end; j++) { temp[j - start] = (ushort)UdpSever.Register[deviceAddress, j, 0]; } UdpSever.Post_Multiple_Registers(deviceAddress, start, end - start + 1, temp); //if (mg.resault == false) // ConsoleLog.WriteLog(string.Format("Dbus操作失败!:[{0}]", Msg), Color.Red, 20); }
private void WriteRegister() { while (true) { Thread.Sleep(10); try { if (checkBoxWriteRegister.Checked) { int time = int.Parse(textBoxWriteRegisterTime.Text); if (time > 1) { Thread.Sleep(time); } UInt16 value = 0; switch (WriteRegisterState) { case "固定值": value = UInt16.Parse(textBoxWriteRegisterValue.Text); break; case "随机数": value = (ushort)rd.Next(0, 65535); break; case "顺序循环": value = WriterRegisterValue++; break; default: break; } UdpSever.Post_Register(LocalAddress, TargetAddress, int.Parse(textBoxWriteRegisterAddress.Text), value, endPoint); lbLedWriteRegister.Trigger = true; } } catch //(Exception) { // throw; } } }
private void senddec(TextBox tx) { UdpSever.ReturnMsg returnmsg = new UdpSever.ReturnMsg(); try { if (tx.Text.Length > 0) { UInt16 data = UInt16.Parse(tx.Text); returnmsg = UdpSever.Write_Register(deviceID, registerID, data); // Console.WriteLine(string.Format("写单个字节结果:{0}\r\n", returnmsg.resault.ToString())); if (!returnmsg.resault) { MessageBox.Show("写入失败!"); } } } catch { } }
//设置单个数据 public static void SetRegister(int deviceAddress, int start) { string Msg = string.Format("设置:{0,-2}", start); UdpSever.Post_Register(deviceAddress, start, (ushort)UdpSever.Register[deviceAddress, start, 0]); //if (mg.resault == false) // ConsoleLog.WriteLog(string.Format("Dbus操作失败!:[{0}]", Msg), Color.Red, 20); //if (UdpSever.Register[deviceAddress, start, 0] != DbusCompare[deviceAddress, start]) //{ // UdpSever.ReturnMsg mg = UdpSever.Write_Register(deviceAddress, start, (ushort)UdpSever.Register[deviceAddress, start, 0]); // //发送成功,更新比较数组 // if (mg.resault) // { // DbusCompare[deviceAddress, start] = (ushort)UdpSever.Register[deviceAddress, start, 0]; // } // else // ConsoleLog.WriteLog(string.Format("Dbus操作失败!:[{0}]", Msg), Color.Red, 20); //} }
// 启动或停止服务 private void UdpStartStop(object sender, EventArgs e) { if (UdpSever.State)//启动状态 { UdpSever.Resault rs = UdpSever.Stop(); if (rs.Reault) { buttonStart.Text = "启动"; textBoxIP.ReadOnly = false; textBoxPort.ReadOnly = false; //MessageBox.Show(rs.Message, "提示"); this.Close(); } else { MessageBox.Show(rs.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else//停止状态 { UdpSever.ipaddress = IPAddress.Parse(textBoxIP.Text); UdpSever.port = int.Parse(textBoxPort.Text); UdpSever.Resault rs = UdpSever.Start(); if (rs.Reault) { buttonStart.Text = "停止"; textBoxIP.ReadOnly = true; textBoxPort.ReadOnly = true; this.Close(); //MessageBox.Show(rs.Message, "提示"); } else { MessageBox.Show(rs.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } //触发事件 MyEvent(); }
private void button_write_Click(object sender, EventArgs e) { UInt16 value = 0; switch (WriteRegisterState) { case "固定值": value = UInt16.Parse(textBoxWriteRegisterValue.Text); break; case "随机数": value = (ushort)rd.Next(0, 65535); break; case "顺序循环": value = WriterRegisterValue++; break; default: break; } UdpSever.Write_Register(LocalAddress, TargetAddress, int.Parse(textBoxWriteRegisterAddress.Text), value, endPoint); lbLedWriteRegister.Trigger = true; }
//心跳 private void Heart() { while (true) { Thread.Sleep(10); try { if (checkBoxHeart.Checked) { int time = int.Parse(textBoxTimeHeart.Text); if (time > 1) { Thread.Sleep(time); } UdpSever.Heart(LocalAddress, TargetAddress, endPoint); lbLedHeart.Trigger = true; } } catch //(Exception) { // throw; } } }
/// <summary> /// 更新界面 /// </summary> /// <param name="change">有变化才更新</param> private void update(bool change) { var num = 0; var reg = 51; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "电量"; dataGridView1.Rows[num].Cells[3].Value = string.Format("{0}%", UdpSever.Register[deviceNum, reg, 0]); comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 1; reg = 52; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "电压"; dataGridView1.Rows[num].Cells[3].Value = string.Format("{0}mV", UdpSever.Register[deviceNum, reg, 0]); comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 2; reg = 53; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "电池循环次数"; dataGridView1.Rows[num].Cells[3].Value = string.Format("{0}次", UdpSever.Register[deviceNum, reg, 0]); comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 3; reg = 54; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "低电压报警阈值"; dataGridView1.Rows[num].Cells[3].Value = string.Format("{0}%", UdpSever.Register[deviceNum, reg, 0]); comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 4; reg = 55; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "当前速度档位"; switch (UdpSever.Register[deviceNum, reg, 0]) { case 0: dataGridView1.Rows[num].Cells[3].Value = "高速"; break; case 1: dataGridView1.Rows[num].Cells[3].Value = "中速"; break; case 2: dataGridView1.Rows[num].Cells[3].Value = "低速"; break; case 3: dataGridView1.Rows[num].Cells[3].Value = "对接速度"; break; } comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 5; reg = 56; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "当前模式"; dataGridView1.Rows[num].Cells[3].Value = UdpSever.Register[deviceNum, reg, 0] == 0 ? "自动" : "手动"; comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 6; reg = 57; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "当前方向"; dataGridView1.Rows[num].Cells[3].Value = UdpSever.Register[deviceNum, reg, 0] == 0 ? "前进" : "后退"; comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 7; reg = 58; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "当前分叉"; switch (UdpSever.Register[deviceNum, reg, 0]) { case 1: dataGridView1.Rows[num].Cells[3].Value = "左分叉"; break; case 2: dataGridView1.Rows[num].Cells[3].Value = "右分叉"; break; case 11: dataGridView1.Rows[num].Cells[3].Value = "前左分叉"; break; case 12: dataGridView1.Rows[num].Cells[3].Value = "前左分叉"; break; case 21: dataGridView1.Rows[num].Cells[3].Value = "后左分叉"; break; case 22: dataGridView1.Rows[num].Cells[3].Value = "后又分叉"; break; } comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 8; reg = 59; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "磁导航1"; dataGridView1.Rows[num].Cells[3].Value = Convert.ToString(UdpSever.Register[deviceNum, reg, 0], 2).PadLeft(16, '0'); comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 9; reg = 60; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "磁导航2"; dataGridView1.Rows[num].Cells[3].Value = Convert.ToString(UdpSever.Register[deviceNum, reg, 0], 2).PadLeft(16, '0'); comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 10; reg = 61; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "磁导航3"; dataGridView1.Rows[num].Cells[3].Value = Convert.ToString(UdpSever.Register[deviceNum, reg, 0], 2).PadLeft(16, '0'); comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 11; reg = 62; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "磁导航4"; dataGridView1.Rows[num].Cells[3].Value = Convert.ToString(UdpSever.Register[deviceNum, reg, 0], 2).PadLeft(16, '0'); comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 12; reg = 63; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "急停状态"; dataGridView1.Rows[num].Cells[3].Value = UdpSever.Register[deviceNum, reg, 0] == 0 ? "正常" : "急停"; comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 13; reg = 64; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "滚筒左侧红外"; dataGridView1.Rows[num].Cells[3].Value = UdpSever.Register[deviceNum, reg, 0] == 0 ? "正常" : "触发"; comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 14; reg = 65; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "滚筒右侧红外"; dataGridView1.Rows[num].Cells[3].Value = UdpSever.Register[deviceNum, reg, 0] == 0 ? "正常" : "触发"; comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 15; reg = 8; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "运行状态"; switch (UdpSever.Register[deviceNum, reg, 0]) { case 0: dataGridView1.Rows[num].Cells[3].Value = "未就绪"; break; case 1: dataGridView1.Rows[num].Cells[3].Value = "运行"; break; case 2: dataGridView1.Rows[num].Cells[3].Value = "就绪"; break; case 3: dataGridView1.Rows[num].Cells[3].Value = "充电"; break; default: break; } comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } num = 16; reg = 9; if (comparebuf[reg] != UdpSever.Register[deviceNum, reg, 0] || change) { dataGridView1.Rows[num].Cells[0].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "yyyy - MM - dd"); dataGridView1.Rows[num].Cells[1].Value = UdpSever.StampToString(UdpSever.Register[deviceNum, reg, 1], "HH: mm:ss"); dataGridView1.Rows[num].Cells[2].Value = "报警信息"; string temp = string.Empty; if (UdpSever.Register[deviceNum, reg, 0] == 0) { temp = "正常"; } else { if ((UdpSever.Register[deviceNum, reg, 0] & (0x0001 << 1)) > 0) { temp += "[机械碰撞]"; } if ((UdpSever.Register[deviceNum, reg, 0] & (0x0001 << 2)) > 0) { temp += "[出轨]"; } if ((UdpSever.Register[deviceNum, reg, 0] & (0x0001 << 3)) > 0) { temp += "[红外避障]"; } if ((UdpSever.Register[deviceNum, reg, 0] & (0x0001 << 4)) > 0) { temp += "[电量低]"; } if ((UdpSever.Register[deviceNum, reg, 0] & (0x0001 << 5)) > 0) { temp += "[驱动断电]"; } if ((UdpSever.Register[deviceNum, reg, 0] & (0x0001 << 6)) > 0) { temp += "[地标出错]"; } } dataGridView1.Rows[num].Cells[3].Value = temp; comparebuf[reg] = UdpSever.Register[deviceNum, reg, 0]; } }
private void MDIParent1_Load(object sender, EventArgs e) { //初始化系统参数 XmlHelper.InitDebug(); int delay = 30; UdpSever.Shell.WriteNotice(delay, "系统消息", "系统启动..."); UdpSever.Shell.WriteNotice(delay, "系统消息", "加载调试信息..."); UdpSever.Shell.WriteNotice(delay, "系统消息", "获取本机IP..."); UdpSever.Shell.WriteNotice(delay, "系统消息", "加载服务器配置..."); UdpSever.Shell.WriteLine(delay, "[服务器][服务器地址][ServerAddress][{0}]", UdpSever.ServerAddress); UdpSever.Shell.WriteLine(delay, "[服务器][设备数][DeviceNum][{0}]", UdpSever.DeviceNum); UdpSever.Shell.WriteLine(delay, "[服务器][寄存器数][RegisterNum][{0}]", UdpSever.RegisterNum); UdpSever.Shell.WriteLine(delay, "[服务器][单帧数据长度][FrameLen][{0}]", UdpSever.FrameLen); UdpSever.Shell.WriteLine(delay, "[服务器][心跳周期][HeartCycle][{0}]秒", UdpSever.HeartCycle); UdpSever.Shell.WriteLine(delay, "[服务器][重发次数][RepeatNum][{0}]", UdpSever.RepeatNum); UdpSever.Shell.WriteLine(delay, "[服务器][超时时间][ResponseTimeout][{0}]", UdpSever.ResponseTimeout); UdpSever.Shell.WriteLine(delay, "[服务器][响应帧缓冲池容量][RESPONSE_MAX_LEN][{0}]", UdpSever.RESPONSE_MAX_LEN); UdpSever.Shell.WriteLine(delay, "[服务器][设备总数][DeviceNum][{0}]\r\n", UdpSever.DeviceNum); #region 获取本机IP,自动开启服务器 string name = Dns.GetHostName(); IPAddress[] ipadrlist = Dns.GetHostAddresses(name); foreach (IPAddress ipa in ipadrlist) { if (ipa.AddressFamily == AddressFamily.InterNetwork) { UdpSever.Shell.WriteNotice(delay, "系统消息", "本机IP:[{0}]", ipa.ToString()); UdpSever.ipaddress = ipa; } } //自动启动服务器 UdpSever.Resault rs = UdpSever.Start(); //更新界面 udpConfigForm_MyEvent(); #endregion treeView1.Nodes.Clear(); try { if (listenForm.IsDisposed != true) { listenForm.Show(); //弹出这个窗口 listenForm.Focus(); //激活显示 } else { listenForm = new ListenForm(); listenForm.Show(); //弹出这个窗口 listenForm.Focus(); //激活显示 } } catch { } }
private void button1_Click(object sender, EventArgs e) { //读取寄存器值 UdpSever.ReturnMsg rm = UdpSever.Read_Register(deviceNum, 1); Console.WriteLine("读取结果:{0},{1}", rm.resault, rm.Data.ToString("X2")); }
/// <summary> /// 任务方法 /// </summary> private void taskFunc() { //this.Invoke(new MethodInvoker(delegate //{ while (true) { #region 判断MES是否有新任务 if (TaskData.Modbus[(int)TaskData.RegBind.newTask] == 0x11) { //加入任务队列 Task task = new Task(); task.TaskNum = TaskData.Modbus[(int)TaskData.RegBind.taskNum]; task.Level = TaskData.Modbus[(int)TaskData.RegBind.taskLevel]; task.LineNum = TaskData.Modbus[(int)TaskData.RegBind.lineNum]; TaskData.taskWaiting.Add(task); //按优先级排序(降序) TaskData.taskWaiting = TaskData.taskWaiting.OrderByDescending(s => s.Level).ToList(); //按下单时间排序(升序) //TaskData.taskWaiting = TaskData.taskWaiting.OrderBy(s => s.Level).ToList(); this.Invoke(new MethodInvoker(delegate { //更新到界面 var index = dataGridViewWaiting.Rows.Add(); //序号 dataGridViewWaiting.Rows[index].Cells[0].Value = index; //任务编号 dataGridViewWaiting.Rows[index].Cells[1].Value = task.TaskNum; //产线编号 dataGridViewWaiting.Rows[index].Cells[2].Value = task.LineNum; //下单时间 dataGridViewWaiting.Rows[index].Cells[3].Value = task.CreatTime.ToString("yyyy-MM-dd HH:mm:ss"); //任务优先级 dataGridViewWaiting.Rows[index].Cells[4].Value = task.Level; })); //清除MES任务标志寄存器 modbusMaster.WriteSingleRegister((int)TaskData.RegBind.newTask, 0); } #endregion #region 派发任务到AGV //有需要完成的任务 if (TaskData.taskWaiting.Count > 0) { //1号产线有空闲的AGV if (TaskData.AGV1.state == (int)Agv.State.Ready) { for (int i = 0; i < TaskData.taskWaiting.Count; i++) { //1号产线有任务 if (TaskData.taskWaiting[i].LineNum == 1) { //将1号产线的任务分配给1号车 ushort[] temp = new ushort[2]; temp[0] = 0x11; //有新任务 8 temp[1] = (ushort)TaskData.taskWaiting[i].TaskNum; //任务编号 9 //下发到AGV UdpSever.Write_Multiple_Registers(1, 8, 2, temp); //更新任务状态 TaskData.taskWaiting[i].StartTime = DateTime.Now; //任务启动时间 TaskData.taskWaiting[i].AgvNum = TaskData.AGV1.AgvNum; //执行该任务的AGV编号 //将该任务转至正在进行任务列表 TaskData.taskRuning.Add(TaskData.taskWaiting[i]); //将该任务从等待执行任务列表删除 TaskData.taskWaiting.RemoveAt(i); break; } } } //2号产线有空闲的AGV if (TaskData.AGV2.state == (int)Agv.State.Ready) { for (int i = 0; i < TaskData.taskWaiting.Count; i++) { //2号产线有任务 if (TaskData.taskWaiting[i].LineNum == 2) { //将2号产线的任务分配给2号车 ushort[] temp = new ushort[2]; temp[0] = 0x11; //有任务 temp[1] = (ushort)TaskData.taskWaiting[i].TaskNum; //任务编号 //下发到AGV UdpSever.Write_Multiple_Registers(2, 8, 2, temp); //更新任务状态 TaskData.taskWaiting[i].StartTime = DateTime.Now; //任务启动时间 TaskData.taskWaiting[i].AgvNum = TaskData.AGV2.AgvNum; //执行该任务的AGV编号 //将该任务转至正在进行任务列表 TaskData.taskRuning.Add(TaskData.taskWaiting[i]); //将该任务从等待执行任务列表删除 TaskData.taskWaiting.RemoveAt(i); break; } } } } #endregion #region 更新任务执行状态 //是否有正在执行的任务 if (TaskData.taskRuning.Count > 0) { for (int i = 0; i < TaskData.taskRuning.Count; i++) { //判断任务是否执行完成 if (UdpSever.Register[TaskData.taskRuning[i].AgvNum, 10, 0] == 0x12) { //正在执行 TaskData.taskRuning[i].TaskState = (int)TaskRunState.Runing; } else if (UdpSever.Register[TaskData.taskRuning[i].AgvNum, 10, 0] == 0x13) { //执行完成 TaskData.taskRuning[i].TaskState = (int)TaskRunState.Finished; //将该任务转至执行完成任务列表 TaskData.taskFinished.Add(TaskData.taskRuning[i]); //将该任务从正在执行任务列表删除 TaskData.taskRuning.RemoveAt(i); //清空AGV执行状态标志位,AGV收到该信号后为设置车为空闲状态 UdpSever.Write_Register(TaskData.taskRuning[i].AgvNum, 10, 0x11); } } } #endregion #region 更新AGV状态 //AGV1 TaskData.AGV1.Connect = false; TaskData.AGV1.state = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 1, 0]; TaskData.AGV1.Process = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 2, 0]; TaskData.AGV1.Route = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 3, 0]; TaskData.AGV1.Station = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 4, 0]; TaskData.AGV1.Power = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 5, 0]; TaskData.AGV1.Speed = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 6, 0]; TaskData.AGV1.error = (ushort)UdpSever.Register[TaskData.AGV1.AgvNum, 7, 0]; //AGV2 TaskData.AGV2.Connect = false; TaskData.AGV2.state = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 1, 0]; TaskData.AGV2.Process = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 2, 0]; TaskData.AGV2.Route = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 3, 0]; TaskData.AGV2.Station = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 4, 0]; TaskData.AGV2.Power = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 5, 0]; TaskData.AGV2.Speed = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 6, 0]; TaskData.AGV2.error = (ushort)UdpSever.Register[TaskData.AGV2.AgvNum, 7, 0]; #endregion #region 更新任务界面 //未进行任务 //dataGridViewWaiting.Rows.Clear(); //foreach (var item in TaskData.taskWaiting) //{ // var index = this.dataGridViewWaiting.Rows.Add(); // this.dataGridViewWaiting.Rows[index].Cells[0].Value = item.TaskNum; // this.dataGridViewWaiting.Rows[index].Cells[1].Value = item.CmdTime.ToString("yyyy-MM-dd HH:mm:ss"); // this.dataGridViewWaiting.Rows[index].Cells[2].Value = item.TaskState; // this.dataGridViewWaiting.Rows[index].Cells[3].Value = item.AgvNum; // this.dataGridViewWaiting.Rows[index].Cells[4].Value = item.Connect; // this.dataGridViewWaiting.Rows[index].Cells[5].Value = item.Route; // this.dataGridViewWaiting.Rows[index].Cells[6].Value = item.Station; // this.dataGridViewWaiting.Rows[index].Cells[7].Value = item.Power; // this.dataGridViewWaiting.Rows[index].Cells[8].Value = item.Speed; // this.dataGridViewWaiting.Rows[index].Cells[9].Value = item.AgvState; // this.dataGridViewWaiting.Rows[index].Cells[10].Value = item.Error; //} //进行中任务 //已完成任务 #endregion Thread.Sleep(TaskData.Parameter.taskFuncTime); } //})); }