/// <summary> /// 响应来自服务端的信息 /// </summary> /// <param name="ar"></param> private void ReceiveCallBack(IAsyncResult ar) { try { int length = socketCore.EndReceive(ar);//结束挂起的异步读取 //开始异步接受来自服务端的信息 socketCore.BeginReceive(buffer, 0, 2048, SocketFlags.None, new AsyncCallback(ReceiveCallBack), socketCore); if (length == 0) { return; } byte[] data = new byte[length]; Array.Copy(buffer, 0, data, 0, length); Invoke(new Action(() => { string msg = string.Empty; msg = Encoding.ASCII.GetString(data); //对获取的数据进行编码转换 //传输的数据会有乱码 if (msg.Length <= 0) // \0\0\0\0\0\\0\0\0\0\0\0\0\0\0\0\0 { return; } int start = msg.IndexOf("F"); //从F开始截取 int end = msg.IndexOf("\0"); //从 \0后截取结束 if (start < 0) { return; } msg = msg.Substring(start, end); string[] arrData = msg.Trim().Split(','); string outStr = ""; //错误信息 if (arrData[0].ToLower() == "f") //F头部 代表机器人完成 { if (GlobalPara.JugValueEqualsLastOne(msg)) //如果数据与上一次的相等 则不做任何操作 { return; } //S 所在的位置 单抓 3 双抓 5 if (msg.Contains("|")) //如果包含双抓 { if (arrData[4].ToLower() == "s") //s头部 代表机器人状态 { if (!CheckRobotRunState(arrData[5].Replace('\0', ' ').Trim())) { return; } } else { FmInfo.GetTaskInfo("机器人:异常收到来自机器人的信息,位置为4的索引不为S," + msg); } string[] newArr = msg.Substring(2).Trim().Split('|'); if (newArr.Length == 2) { flag = false; string[] arr1 = newArr[0].Trim().Split(','); string[] arr2 = newArr[1].Trim().Split(','); List <string[]> arrlist = new List <string[]>(); arrlist.Add(arr1); arrlist.Add(arr2); robotService.UpDateFinishTasks(arrlist, out outStr); //robotService.UpDateFinishTask(arr1, out outStr);//y 修改为一起修改 20190709 //robotService.UpDateFinishTask(arr2, out outStr); FmInfo.AutoRefreshUnShow(Convert.ToDecimal(arr2[0]), Convert.ToInt32(arr2[1])); FmInfo.FuncAutoRefsh();//更新显示界面 flag = true; //FmInfo.AutoRefreshUnShow(int.Parse(arr2[0])); if (!string.IsNullOrWhiteSpace(outStr)) { FmInfo.GetTaskInfo("机器人: " + outStr); } else { FmInfo.GetTaskInfo("机器人:任务号" + arr1[0] + ",条烟流水号:" + arr1[1] + ",数据库更新完成!"); FmInfo.GetTaskInfo("机器人:任务号" + arr2[0] + ",条烟流水号:" + arr2[1] + ",数据库更新完成!"); updateLabel("机器人:任务号" + arr2[0] + ",条烟流水号:" + arr2[1] + ",数据库更新完成!", lblFinshiTask); } if (!string.IsNullOrWhiteSpace(outStr))// { FmInfo.GetTaskInfo(outStr); } } else { FmInfo.GetTaskInfo("机器人:双抓任务完成信号有误,完成信号长度为" + newArr.Length); } } else//单抓的情况下 { if (arrData[3].ToLower() == "s") { if (!CheckRobotRunState(arrData[4].Replace('\0', ' ').Trim())) { return; } } else { FmInfo.GetTaskInfo("机器人:异常收到来自机器人的信息,位置为3的索引不为S," + msg); } updateLabel("机器人:收到单抓完成信号", lblFinshiTask); string[] Arr = msg.Substring(2).Trim().Split(','); if (Arr[1] == "0") { return; } flag = false; robotService.UpDateFinishTask(Arr, out outStr); flag = true; FmInfo.AutoRefreshUnShow(Convert.ToDecimal(Arr[0]), Convert.ToInt32(Arr[1])); FmInfo.FuncAutoRefsh();//更新显示界面 // FmInfo.AutoRefreshUnShow(int.Parse(Arr[0])); if (!string.IsNullOrWhiteSpace(outStr)) { FmInfo.GetTaskInfo("机器人: " + outStr); } else { FmInfo.GetTaskInfo("机器人:任务号" + Arr[0] + ",条烟流水号:" + Arr[1] + ",数据库更新完成!"); updateLabel("机器人:任务号" + Arr[0] + ",条烟流水号:" + Arr[1] + ",数据库更新完成!", lblFinshiTask); } } } })); } catch (ObjectDisposedException) { } catch (Exception ex) { Invoke(new Action(() => { FmInfo.GetTaskInfo("机器人:服务器断开连接。" + ex.Message); //ThreadHeartCheck(); })); } }