123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551 |
- using DWZB_Agv_Agreement.Agv_Agreement;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace DWZB_Agv_Agreement
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- /// <summary>
- /// Socket服务端
- /// </summary>
- private readonly SocketServerHelper socketServerMd = new SocketServerHelper();
- /// <summary>
- /// 日志头部
- /// </summary>
- private readonly string LogHeadText = "设备实时运行Log界面 ==>> ";
- #region 日志显示
- private void ShowLogToFrmRichTextBox(object sender, ShowLogToFrmEventArgs e)
- {
- Invoke(new Action(() =>
- {
- richTextBox1.AppendText($"发生时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} | {e.ShowMsg}\r\n");
- }));
- }
- private void ShowLog(string msg, bool isShowLogToFrm, LogTypeEnum logTypeEnum)
- {
- if (isShowLogToFrm)
- {
- ShowLogToFrmRichTextBox(this, new ShowLogToFrmEventArgs(LogHeadText + msg));
- }
- LogHelper.WriteLog(LogHeadText + msg, logTypeEnum);
- }
- #endregion
- private void Button1_Click(object sender, EventArgs e)
- {
- try
- {
- socketServerMd.MessageEvent += new GetMessageEventHandler(Socket_MessageEvent);
- socketServerMd.AcceptEvent += new GetAcceptEventHandler(Socket_AcceptEvent);
- socketServerMd.CloseEvent += new GetCloseEventHandler(Socket_CloseEvent);
- //开启监听
- socketServerMd.StartListen(AppConfigHelper.Get("SocketServerIpAddress"), Convert.ToInt32(AppConfigHelper.Get("SocketServerPort")));
- socketServerMd.StartListenClientAccept();
- //Thread thCodeScanner = new Thread(socketServerMd.ListeneSocketClientConnectAccept)
- //{
- // IsBackground = true
- //};
- //thCodeScanner.Start();
- button1.Enabled = false;
- button12.Enabled = true;
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- /// <summary>
- /// Socket连接关闭事件
- /// </summary>
- /// <param name="sender">数据</param>
- /// <param name="e">事件参数</param>
- void Socket_CloseEvent(object sender, EventArgs e)
- {
- string socketIpAddress = sender as string;
- Invoke(new Action(() =>
- {
- if (comboBox1.Items.Contains(socketIpAddress))
- {
- comboBox1.Items.Remove(socketIpAddress);
- }
- if (comboBox1.Items.Count == 0)
- {
- comboBox1.Text = "";
- }
- }));
- socketServerMd.RemoveSocketClient(socketIpAddress);
- ShowLog($"Socket客户端:【{socketIpAddress}】主动断开连接,Socket服务端已经移除该客户端连接!", true, LogTypeEnum.Run);
- }
- /// <summary>
- /// Socket获取远程连接节点事件
- /// </summary>
- /// <param name="sender">数据</param>
- /// <param name="e">事件参数</param>
- void Socket_AcceptEvent(object sender, EventArgs e)
- {
- string socketIpAddress = sender as string;
- ShowLog($"Socket客户端:【{socketIpAddress}】连接成功!", true, LogTypeEnum.Run);
- Invoke(new Action(() =>
- {
- if (!comboBox1.Items.Contains(socketIpAddress))
- {
- comboBox1.Items.Add(socketIpAddress);
- }
- }));
- }
- /// <summary>
- /// Socket接收消息数据事件
- /// </summary>
- /// <param name="sender">数据流</param>
- /// <param name="ip">ip地址</param>
- /// <param name="dataLength">数据长度</param>
- /// <param name="e">事件参数</param>
- void Socket_MessageEvent(object sender, string ip, int dataLength, EventArgs e)
- {
- try
- {
- byte[] by = sender as byte[];
- byte[] dataBtArr = new byte[dataLength];
- Array.Copy(by, 0, dataBtArr, 0, dataLength);
- if (DataHandleHelper.Verify_DataMsgCRC(dataBtArr))
- {
- if (DataHandleHelper.Verify_PackageHeadCRC(dataBtArr))
- {
- ShowLog($"接收到Socket客户端:【{ip}】的数据成功!:【{BitConverter.ToString(dataBtArr)}】", true, LogTypeEnum.SocketData);
- }
- else
- {
- ShowLog($"接收到Socket客户端:【{ip}】的数据的包头校验码验证不通过!【{BitConverter.ToString(dataBtArr)}】", true, LogTypeEnum.SocketErr);
- }
- }
- else
- {
- ShowLog($"接收到Socket客户端:【{ip}】的数据的数据校验码验证不通过!【{BitConverter.ToString(dataBtArr)}】", true, LogTypeEnum.SocketErr);
- }
- }
- catch (Exception ex)
- {
- ShowLog($"Socket客户端:【{ip}】接收数据发生异常:【{ex.Message}】!", true, LogTypeEnum.Err);
- }
- }
- private void button2_Click(object sender, EventArgs e)
- {
- short a = 29000;
- byte[] b = BitConverter.GetBytes(a);
- }
- private void button2_Click_1(object sender, EventArgs e)
- {
- try
- {
- Random rdm = new();
- int r = rdm.Next(1,65536);
- AgvTaskSendMd agvTaskSendMd = new()
- {
- FunctionCode = 0xF2,
- AgvNo = Convert.ToInt32(AppConfigHelper.Get("AgvNo")),
- CmdNo = r,
- CmdCode = 2,
- TaskType = 0x01,
- ClipAction = 0x01,
- MoveMode = 0x01,
- Target_X = (float)(rdm.Next(0, 180) + rdm.NextDouble()),
- Target_Y = (float)(rdm.Next(0, 180) + rdm.NextDouble()),
- Target_Angle = (float)(rdm.Next(0, 180) + rdm.NextDouble()),
- Speed = (float)(rdm.Next(0, 65536) + rdm.NextDouble()),
- Target_rfidNo = 1
- };
- byte[] btArrData = agvTaskSendMd.SerializeBytArr();
- byte[] dataLen = BitConverter.GetBytes(btArrData.Length);
- Array.Reverse(dataLen);
- PackageHeadMd packageHeadMd = new();
- packageHeadMd.DataLen = dataLen;
- packageHeadMd.Data_CRC = DataHandleHelper.Get_CustomCRC(btArrData);
- List<byte> headBtLst = new(8);
- headBtLst.AddRange(packageHeadMd.PackageHeadFlag);
- headBtLst.AddRange(packageHeadMd.DataLen);
- headBtLst.Add(packageHeadMd.VersionNo);
- headBtLst.Add(packageHeadMd.Data_CRC);
- packageHeadMd.PackageHead_CRC = DataHandleHelper.Get_CustomCRC(headBtLst.ToArray());
- byte[] btArrHead = packageHeadMd.SerializeBytArr();
- byte[] sendBtArr = new byte[btArrData.Length + btArrHead.Length];
- sendBtArr = btArrHead.Concat(btArrData).ToArray();
- if (!string.IsNullOrEmpty(comboBox1.Text))
- {
- if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
- {
- socketServerMd.SendData(comboBox1.SelectedItem.ToString(), sendBtArr);
- ShowLog($"发送任务下发测试指令数据成功:【{BitConverter.ToString(sendBtArr)}】指令序列化数据:【{JsonHelper.ToJson(agvTaskSendMd)}】", true, LogTypeEnum.SocketData);
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- private void button4_Click(object sender, EventArgs e)
- {
- try
- {
- int r = new Random().Next(1, 65536);
- AgvChangeRunStatusCmdMd agvChangeRunStatusCmdMd = new();
- agvChangeRunStatusCmdMd.FunctionCode = 0xF2;
- agvChangeRunStatusCmdMd.AgvNo = Convert.ToInt32(AppConfigHelper.Get("AgvNo"));
- agvChangeRunStatusCmdMd.CmdNo = r;
- agvChangeRunStatusCmdMd.CmdCode = 0x01;
- agvChangeRunStatusCmdMd.StatusCode = 0x05;
- byte[] btArrData = agvChangeRunStatusCmdMd.SerializeBytArr();
- byte[] dataLen = BitConverter.GetBytes(btArrData.Length);
- Array.Reverse(dataLen);
- PackageHeadMd packageHeadMd = new();
- packageHeadMd.DataLen = dataLen;
- packageHeadMd.Data_CRC = DataHandleHelper.Get_CustomCRC(btArrData);
- List<byte> headBtLst = new(8);
- headBtLst.AddRange(packageHeadMd.PackageHeadFlag);
- headBtLst.AddRange(packageHeadMd.DataLen);
- headBtLst.Add(packageHeadMd.VersionNo);
- headBtLst.Add(packageHeadMd.Data_CRC);
- packageHeadMd.PackageHead_CRC = DataHandleHelper.Get_CustomCRC(headBtLst.ToArray());
- byte[] btArrHead = packageHeadMd.SerializeBytArr();
- byte[] sendBtArr = new byte[btArrData.Length + btArrHead.Length];
- sendBtArr = btArrHead.Concat(btArrData).ToArray();
- if (!string.IsNullOrEmpty(comboBox1.Text))
- {
- if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
- {
- socketServerMd.SendData(comboBox1.SelectedItem.ToString(), sendBtArr);
- ShowLog($"发送任务状态更改测试指令数据成功:【{BitConverter.ToString(sendBtArr)}】指令序列化数据:【{JsonHelper.ToJson(agvChangeRunStatusCmdMd)}】", true, LogTypeEnum.SocketData);
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- private void button3_Click(object sender, EventArgs e)
- {
- try
- {
- AgvQueryStatusMd agvQueryStatusMd = new();
- int r = new Random().Next(1, 3000);
- agvQueryStatusMd.FunctionCode = 0xF1;
- agvQueryStatusMd.AgvNo = Convert.ToInt32(AppConfigHelper.Get("AgvNo"));
- agvQueryStatusMd.HeartbeatSignal = r;
- byte[] btArrData = agvQueryStatusMd.SerializeBytArr();
- byte[] dataLen = BitConverter.GetBytes(btArrData.Length);
- Array.Reverse(dataLen);
- PackageHeadMd packageHeadMd = new();
- packageHeadMd.DataLen = dataLen;
- packageHeadMd.Data_CRC = DataHandleHelper.Get_CustomCRC(btArrData);
- List<byte> headBtLst = new(8);
- headBtLst.AddRange(packageHeadMd.PackageHeadFlag);
- headBtLst.AddRange(packageHeadMd.DataLen);
- headBtLst.Add(packageHeadMd.VersionNo);
- headBtLst.Add(packageHeadMd.Data_CRC);
- packageHeadMd.PackageHead_CRC = DataHandleHelper.Get_CustomCRC(headBtLst.ToArray());
- byte[] btArrHead = packageHeadMd.SerializeBytArr();
- byte[] sendBtArr = new byte[btArrData.Length + btArrHead.Length];
- sendBtArr = btArrHead.Concat(btArrData).ToArray();
- if (!string.IsNullOrEmpty(comboBox1.Text))
- {
- if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
- {
- socketServerMd.SendData(comboBox1.SelectedItem.ToString(), sendBtArr);
- ShowLog($"发送状态查询测试指令数据成功:【{BitConverter.ToString(sendBtArr)}】指令序列化数据:【{JsonHelper.ToJson(agvQueryStatusMd)}】", true, LogTypeEnum.SocketData);
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- private void button7_Click(object sender, EventArgs e)
- {
- try
- {
- int r = new Random().Next(1, 65536);
- AgvPreventBumpCmdMd agvPreventBumpCmdMd = new();
- agvPreventBumpCmdMd.FunctionCode = 0xF2;
- agvPreventBumpCmdMd.AgvNo = Convert.ToInt32(AppConfigHelper.Get("AgvNo"));
- agvPreventBumpCmdMd.CmdNo = r;
- agvPreventBumpCmdMd.CmdCode = 0x10;
- agvPreventBumpCmdMd.StatusCode = 0x01;
- byte[] btArrData = agvPreventBumpCmdMd.SerializeBytArr();
- byte[] dataLen = BitConverter.GetBytes(btArrData.Length);
- Array.Reverse(dataLen);
- PackageHeadMd packageHeadMd = new();
- packageHeadMd.DataLen = dataLen;
- packageHeadMd.Data_CRC = DataHandleHelper.Get_CustomCRC(btArrData);
- List<byte> headBtLst = new(8);
- headBtLst.AddRange(packageHeadMd.PackageHeadFlag);
- headBtLst.AddRange(packageHeadMd.DataLen);
- headBtLst.Add(packageHeadMd.VersionNo);
- headBtLst.Add(packageHeadMd.Data_CRC);
- packageHeadMd.PackageHead_CRC = DataHandleHelper.Get_CustomCRC(headBtLst.ToArray());
- byte[] btArrHead = packageHeadMd.SerializeBytArr();
- byte[] sendBtArr = new byte[btArrData.Length + btArrHead.Length];
- sendBtArr = btArrHead.Concat(btArrData).ToArray();
- if (!string.IsNullOrEmpty(comboBox1.Text))
- {
- if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
- {
- socketServerMd.SendData(comboBox1.SelectedItem.ToString(), sendBtArr);
- ShowLog($"发送防撞条屏蔽测试指令数据成功:【{BitConverter.ToString(sendBtArr)}】指令序列化数据:【{JsonHelper.ToJson(agvPreventBumpCmdMd)}】", true, LogTypeEnum.SocketData);
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- private void button5_Click(object sender, EventArgs e)
- {
- try
- {
- int r = new Random().Next(1, 65536);
- AgvResetCmdMd agvResetCmdMd = new();
- agvResetCmdMd.FunctionCode = 0xF2;
- agvResetCmdMd.CmdNo = r;
- agvResetCmdMd.AgvNo = Convert.ToInt32(AppConfigHelper.Get("AgvNo"));
- agvResetCmdMd.CmdCode = 0x07;
- byte[] btArrData = agvResetCmdMd.SerializeBytArr();
- byte[] dataLen = BitConverter.GetBytes(btArrData.Length);
- Array.Reverse(dataLen);
- PackageHeadMd packageHeadMd = new();
- packageHeadMd.DataLen = dataLen;
- packageHeadMd.Data_CRC = DataHandleHelper.Get_CustomCRC(btArrData);
- List<byte> headBtLst = new(8);
- headBtLst.AddRange(packageHeadMd.PackageHeadFlag);
- headBtLst.AddRange(packageHeadMd.DataLen);
- headBtLst.Add(packageHeadMd.VersionNo);
- headBtLst.Add(packageHeadMd.Data_CRC);
- packageHeadMd.PackageHead_CRC = DataHandleHelper.Get_CustomCRC(headBtLst.ToArray());
- byte[] btArrHead = packageHeadMd.SerializeBytArr();
- byte[] sendBtArr = new byte[btArrData.Length + btArrHead.Length];
- sendBtArr = btArrHead.Concat(btArrData).ToArray();
- if (!string.IsNullOrEmpty(comboBox1.Text))
- {
- if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
- {
- socketServerMd.SendData(comboBox1.SelectedItem.ToString(), sendBtArr);
- ShowLog($"发送复位测试指令数据成功:【{BitConverter.ToString(sendBtArr)}】指令序列化数据:【{JsonHelper.ToJson(agvResetCmdMd)}】", true, LogTypeEnum.SocketData);
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- private void button6_Click(object sender, EventArgs e)
- {
- try
- {
- int r = new Random().Next(1, 65536);
- AgvStopCmdMd agvStopCmdMd = new();
- agvStopCmdMd.FunctionCode = 0xF2;
- agvStopCmdMd.AgvNo = Convert.ToInt32(AppConfigHelper.Get("AgvNo"));
- agvStopCmdMd.CmdNo = r;
- agvStopCmdMd.CmdCode = 0x08;
- byte[] btArrData = agvStopCmdMd.SerializeBytArr();
- byte[] dataLen = BitConverter.GetBytes(btArrData.Length);
- Array.Reverse(dataLen);
- PackageHeadMd packageHeadMd = new();
- packageHeadMd.DataLen = dataLen;
- packageHeadMd.Data_CRC = DataHandleHelper.Get_CustomCRC(btArrData);
- List<byte> headBtLst = new(8);
- headBtLst.AddRange(packageHeadMd.PackageHeadFlag);
- headBtLst.AddRange(packageHeadMd.DataLen);
- headBtLst.Add(packageHeadMd.VersionNo);
- headBtLst.Add(packageHeadMd.Data_CRC);
- packageHeadMd.PackageHead_CRC = DataHandleHelper.Get_CustomCRC(headBtLst.ToArray());
- byte[] btArrHead = packageHeadMd.SerializeBytArr();
- byte[] sendBtArr = new byte[btArrData.Length + btArrHead.Length];
- sendBtArr = btArrHead.Concat(btArrData).ToArray();
- if (!string.IsNullOrEmpty(comboBox1.Text))
- {
- if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
- {
- socketServerMd.SendData(comboBox1.SelectedItem.ToString(), sendBtArr);
- ShowLog($"发送停止测试指令数据成功:【{BitConverter.ToString(sendBtArr)}】指令序列化数据:【{JsonHelper.ToJson(agvStopCmdMd)}】", true, LogTypeEnum.SocketData);
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- private void button8_Click(object sender, EventArgs e)
- {
- Random r = new();
- int a = r.Next(0,10000);
- byte[] b = BitConverter.GetBytes(a);
- if (!string.IsNullOrEmpty(comboBox1.Text))
- {
- if (!string.IsNullOrEmpty(comboBox1.SelectedItem.ToString()))
- {
- socketServerMd.SendData(comboBox1.SelectedItem.ToString(), b);
- ShowLog($"发送自定义测试数据成功:【{a}】【{BitConverter.ToString(b)}】", true, LogTypeEnum.SocketData);
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- else
- {
- MessageBox.Show("请选择要发送数据的Socket客户端!");
- }
- }
- private void button9_Click(object sender, EventArgs e)
- {
- richTextBox1.Clear();
- }
- private void button10_Click(object sender, EventArgs e)
- {
- AppConfigHelper.Update("AgvNo", Convert.ToInt32(numericUpDown1.Value).ToString());
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- textBox1.Text = AppConfigHelper.Get("SocketServerIpAddress");
- numericUpDown2.Value = Convert.ToInt32(AppConfigHelper.Get("SocketServerPort"));
- numericUpDown1.Value = Convert.ToInt32(AppConfigHelper.Get("AgvNo"));
- }
- private void button11_Click(object sender, EventArgs e)
- {
- if (!IsIP(textBox1.Text))
- {
- MessageBox.Show("请输入正确的IP地址!");
- return;
- }
- if (AppConfigHelper.Get("SocketServerIpAddress") == textBox1.Text && Convert.ToInt32(numericUpDown2.Value) == Convert.ToInt32(AppConfigHelper.Get("SocketServerPort")))
- return;
- AppConfigHelper.Update("SocketServerIpAddress", textBox1.Text);
- AppConfigHelper.Update("SocketServerPort", Convert.ToInt32(numericUpDown2.Value).ToString());
- MessageBox.Show("更改IP地址和端口号后,需要重启程序才能生效!");
- }
- /// <summary>
- /// 验证IP地址是否合法
- /// </summary>
- /// <param name="ip">要验证的IP地址</param>
- public bool IsIP(string ip)
- {
- //如果为空,认为验证合格
- if (string.IsNullOrEmpty(ip))
- {
- return false;
- }
- //清除要验证字符串中的空格
- ip = ip.Trim();
- //模式字符串
- string pattern = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$";
- //验证
- return Regex.IsMatch(ip, pattern);
- }
- private void button12_Click(object sender, EventArgs e)
- {
- socketServerMd.CloseServer();
- socketServerMd.MessageEvent -= new GetMessageEventHandler(Socket_MessageEvent);
- socketServerMd.AcceptEvent -= new GetAcceptEventHandler(Socket_AcceptEvent);
- socketServerMd.CloseEvent -= new GetCloseEventHandler(Socket_CloseEvent);
- comboBox1.Items.Clear();
- comboBox1.Text = string.Empty;
- button12.Enabled = false;
- button1.Enabled = true;
- }
- }
- }
|