From a1e45a2ef918f4db028c6a9d2153f4e9b278bf59 Mon Sep 17 00:00:00 2001 From: "zhengxuan.zhang" Date: Sun, 8 Oct 2023 16:48:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AF=B9hexcal=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E7=9A=84=E8=A7=A3=E6=9E=90=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HexcalMC/MainFrom.cs | 166 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 152 insertions(+), 14 deletions(-) diff --git a/HexcalMC/MainFrom.cs b/HexcalMC/MainFrom.cs index 2108938..fa28359 100644 --- a/HexcalMC/MainFrom.cs +++ b/HexcalMC/MainFrom.cs @@ -76,17 +76,24 @@ namespace HexcalMC { //启动服务器,并获取数据,解析 m_tcpIpServer = new TcpIpServer("100.0.0.1", Convert.ToString(1234)); - //启动监听 - if (m_tcpIpServer.StartListen()) + try { - //绑定两个事件 OnRaisedStatus 和OnRaisedMessage - m_tcpIpServer.OnRaisedMessage += ReceiveMessage; - m_tcpIpServer.OnRaisedStatus += ReceiveStatus; - DebugDfn.AddLogText("L2服务端启动成功 "); + //启动监听 + if (m_tcpIpServer.StartListen()) + { + //绑定两个事件 OnRaisedStatus 和OnRaisedMessage + m_tcpIpServer.OnRaisedMessage += ReceiveMessage; + m_tcpIpServer.OnRaisedStatus += ReceiveStatus; + DebugDfn.AddLogText("TCP服务端启动成功 "); + } + else + { + MessageBox.Show("TCP服务端启动失败,请检查网络连接,重新打开软件", "异常", MessageBoxButtons.OK, MessageBoxIcon.Error); + } } - else + catch (Exception ex) { - MessageBox.Show("L2系统服务端连接失败,请检查网络连接,重新打开软件", "异常", MessageBoxButtons.OK, MessageBoxIcon.Error); + DebugDfn.AddLogText("启动TCP服务端异常" + ex.ToString()); } } @@ -101,10 +108,8 @@ namespace HexcalMC { case "172.19.153.80": //L2系统 - //解析数据,更新L2Receive - // L2Receive = L2Protocol.ParsePacket(Msg); - - //todo 更新页面 + //解析处理数据 + ParseHexcalPacket(Msg); break; case "127.0.0.1": //模拟长宽系统 @@ -113,6 +118,140 @@ namespace HexcalMC } } + private void ParseHexcalPacket(string Msg) //编写一个Hexcal协议解析函数 + { + //根据不同的指令进行解析,3个层次,不合法,故障,最后是正常 + //判断Msg的长度,如果不是指定长度,直接返回 + + + if (Msg.Length != 8) return; + + //判断是否含有故障ERROR字样 + if (Msg.Contains("ERROR")) return; + + //指令解析 + + string[] tokens = Msg.Split(','); + foreach (string token in tokens) + { + Console.WriteLine(token); + } + + //可能涉及到 将指令提取并单独处理的问题 + if (string.Equals("CMMTYP", Msg)) + { + SendMsgToHexcal("CMMTYP MA 19617, FDC V15.00, 6 6 2 , 0"); + } + else if (string.Equals("VERSION", Msg)) //版本号 + { + SendMsgToHexcal("00-000-000-00000 FDC V51.04.0000 DATE: 12/21/22 TIME: 12:50:55"); + } + else if (string.Equals("^B", Msg)) //查询状态 + { + //todo 启动指令 + } + else if (string.Equals("SHOW MAXSTROKESW", Msg)) //最大行程 + { + SendMsgToHexcal("MAXSTROKESW 233.200000,346.500000,15.100000,0.000000,0.000000,0.000000,0.000000"); + } + else if (string.Equals("00000003", Msg)) //最小行程 + { + SendMsgToHexcal("MINSTROKESW -68.800000,-55.500000,-286.900000,0.000000,0.000000,0.000000,0.000000"); + } + else if (string.Equals("SHOW MAXVEL", Msg)) //最大速度 + { + SendMsgToHexcal("MAXVEL 300.000000,300.000000,300.000000,0.000000,0.000000,0.000000,0.000000,0.000000"); + } + else if (string.Equals("SHOW MAXACC", Msg)) //最大加速度 + { + SendMsgToHexcal( + "MAXACC 300.000000,300.000000,300.000000,0.000000,0.000000,0.000000,0.000000,0.000000"); + } + else if (string.Equals("SHOW TEMPCOMPTYPE", Msg)) //温度补偿,温度补偿 >1 表示支持温度补偿 + { + SendMsgToHexcal("TEMPCOMPTYPE 1"); + } + else if (string.Equals("READTP", Msg)) + { + SendMsgToHexcal("READTP 0.000000"); + } + else if (string.Equals("SHOW SENSWKP", Msg)) + { + SendMsgToHexcal("X_ SENSWKP 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"); + } + else if (string.Equals("SHOW X_SENSAXIS", Msg)) + { + SendMsgToHexcal("X_SENSAXIS 6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"); + } + else if (string.Equals("SHOW Y_SENSAXIS", Msg)) + { + SendMsgToHexcal("Y_SENSAXIS 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"); + } + else if (string.Equals("SHOW Z_SENSAXIS", Msg)) + { + SendMsgToHexcal("Z_SENSAXIS 7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"); + } + else if (string.Equals("SHOW MOVPAR", Msg)) //获取速度 + { + SendMsgToHexcal( + "MOVPAR 300.000000,300.000000,300.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.00000 0,0.000000"); + } + else if (string.Equals("MOVPAR 300.0,300.0,300.0,0.0,0.0,0.0", Msg)) //设置速度 xyz 轴的速度 + { + SendMsgToHexcal("%"); + } + else if (string.Equals("SHOW MAXVEL", Msg)) + { + SendMsgToHexcal("MAXVEL 300.000000,300.000000,300.000000,0.000000,0.000000,0.000000,0.000000,0.000000"); + } + else if (string.Equals("SHOW ACCEL", Msg)) //获取加速 + { + SendMsgToHexcal( + "ACCEL 1000.000000,1000.000000,1000.000000,0.000000,0.000000,0.000000,0.000000,0.000000"); + } + else if (string.Equals("ACCEL 1000.0,1000.0,1000.0", Msg)) //设置加速度 + { + SendMsgToHexcal("%"); + } + else if (string.Equals( + "PRBPIN 0.000000,0.000000,0.000000,0.000000,0.000000, 0.000000,0.000000,0.000000,0.000000,0.000000,0.000000, 0.000000", + Msg)) + { + SendMsgToHexcal("%"); + } + else if (string.Equals("ENABLE TEMP", Msg)) + { + SendMsgToHexcal(""); + } + else if (string.Equals("WKPPAR 20,0.0000115,20", Msg)) + { + SendMsgToHexcal(""); + } + else if (string.Equals("SCLTMP", Msg)) + { + SendMsgToHexcal(""); + } + else if (string.Equals("MOVABS 167.553848,-55.400002,-208.548203,0.000000", Msg)) //移动指令 + { + SendMsgToHexcal("%"); + } + else if (string.Equals("GETPOS", Msg)) //获取位置 + { + SendMsgToHexcal("POS 167.553898,-55.400421,-208.548678,0.000000,0.000000,0.000000,0.000000"); + } + else if (string.Equals("SHOW ESTOP", Msg)) + { + SendMsgToHexcal("ESTOP FALSE"); + } + else if (string.Equals("", Msg)) + { + } + else + { + //todo 未知指令 + } + } + private void ReceiveStatus(TcpIpServer.EnumTcpIpServer iType, string Msg) { //记录到日志 @@ -283,8 +422,7 @@ namespace HexcalMC //时间栏 //获取当前时间,构造形如 精确到秒,例如 2023-10-08 16:01:23 - rle_timer.Text = "当前时间: "+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - + rle_timer.Text = "当前时间: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } #endregion