news 2026/4/18 12:23:08

上位机状态机开发之连接机械手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
上位机状态机开发之连接机械手

上位机状态机开发之连接机械手

1 连接机械手

/// <summary>/// 连接机械手/// </summary>/// <param name="sender"></param>/// <param name="e"></param>privatevoidmaterialButton1_Click(objectsender,EventArgse){// 连接机械手服务端if(CommunicateService.Instance.ConnectServer()){lb_status.Text="已连接";lb_status.BackColor=Color.Green;}else{lb_status.Text="连接失败";lb_status.BackColor=Color.Red;}}

2.CommunicateService

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Net.Http;usingSystem.Text;usingSystem.Threading.Tasks;namespace上位机程序{publicclassCommunicateService{//单例模式://1. 私有静态变量(在第四步供外界使用),创建类的实例//2. 私有构造函数,确保外部无法直接实例化(确保是单个实例)//3. 确定供外界调用的代码资源//4. 公开静态属性,供外界使用(把第一步类的实例,开放出去)//5. 外界使用//1. 私有静态变量(在第四步供外界使用),创建类的实例privatestaticCommunicateServiceinstance=newCommunicateService();//2. 私有构造函数,确保外部无法直接实例化(确保是单个实例)privateCommunicateService(){}//4. 公开静态属性,供外界使用(把第一步类的实例,开放出去)publicstaticCommunicateServiceInstance{get{returninstance;}}//3. 确定供外界调用的代码资源HttpClienthttpClient=newHttpClient("192.168.1.109",5001);HttpClienthttpClient2=newHttpClient("127.0.0.1",8080);HttpClienthttpClient3=newHttpClient("127.0.0.1",7930);/// <summary>/// 连接服务端/// </summary>/// <returns></returns>publicboolConnectServer(){if(httpClient.Connect()){returntrue;}returnfalse;}publicboolConnectServer2(){if(httpClient2.Connect()){returntrue;}returnfalse;}publicboolConnectServer3(){if(httpClient3.Connect()){returntrue;}returnfalse;}/// <summary>/// 发送消息/// </summary>/// <param name="Content"></param>publicvoidSend2(stringContent){httpClient2.SendMsg(Content);}/// <summary>/// 发送消息/// </summary>/// <param name="Content"></param>publicvoidSend(stringContent){httpClient.SendMsg(Content);}/// <summary>/// 发送消息/// </summary>/// <param name="Content"></param>publicvoidSend3(stringContent){httpClient3.SendMsg(Content);}}}

3.HttpClient

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespace上位机程序{publicclassHttpClient{// 1:创建通信套接字。publicSocketSocketClient;#region属性/// <summary>////// </summary>publicstringIp{get;set;}="127.0.0.1";/// <summary>/// 端口/// </summary>publicintPort{get;set;}=8080;#endregion/// <summary>/// 构造器(对IP和端口进行赋值)/// </summary>publicHttpClient(stringip,intport){Ip=ip;Port=port;}/// <summary>/// 连接服务端/// </summary>publicboolConnect(){// 1:创建通信套接字。(确定为因特网,流式数据,tcp通讯)SocketClient=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);// 2.设置服务器的IP和端口号。(this,表示当前窗口,可以不加,加了更安全)IPEndPointip_port=newIPEndPoint(IPAddress.Parse(Ip),Port);// 3. 连接try{SocketClient.Connect(ip_port);}catch(Exceptionex){MessageBox.Show("连接服务器失败:"+ex.Message);returnfalse;}// 5:接受数据。//创建一个一直运行的监听的线程Task.Run(newAction(()=>{ReceiveMsg();}));returntrue;}/// <summary>/// 以utf-8接受数据/// </summary>privatevoidReceiveMsg(){while(true){try{// 创建一个缓冲区byte[]buffer=newbyte[1024*1024*10];// 数据长度intlength=-1;// 第四步:调用读写函数发送或者接收数据。try{// 接受数据length=SocketClient.Receive(buffer);}catch(Exception){break;}// 如果数据大于0,则解析if(length>0){stringmsg=string.Empty;msg=Encoding.UTF8.GetString(buffer,0,length);// 如果收到机械手执行结束命令,就将结束标志位设为1if(msg.Contains("Finish")){GlobalParameters.FinishFlag=1;}elseif(msg.Contains("OK")){GlobalParameters.SnapImageFlag=1;GlobalParameters.SnapImageFlag2=1;}elseif(msg.Contains("NG")){GlobalParameters.SnapImageFlag=2;GlobalParameters.SnapImageFlag2=2;}elseif(msg.Contains("Move")){string[]xy=msg.Split(',');GlobalParameters.X=Convert.ToDouble(xy[1]);GlobalParameters.Y=Convert.ToDouble(xy[2]);}// 报错,因为跨线程,跨UI// rtb_Receive.AppendText(msg);}}catch(Exceptionex){}}}/// <summary>/// 发送数据utf8/// </summary>/// <param name="sender"></param>/// <param name="e"></param>publicvoidSendMsg(stringContent){stringcontent=Content.Replace("\\n","\n");byte[]sendMsg=Encoding.Default.GetBytes(content);// 发送数据SocketClient?.Send(sendMsg);}}}

4.GlobalParameters

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespace上位机程序{publicclassGlobalParameters{publicstaticintFinishFlag=0;publicstaticintSnapImageFlag=0;publicstaticintSnapImageFlag2=0;// 移动的X坐标publicstaticdoubleX=100;// 移动的Y坐标publicstaticdoubleY=100;}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:38:32

上位机状态机开发之回原点

上位机状态机开发之回原点 1.回原点/// <summary>/// 回原点/// </summary>/// <param name"sender"></param>/// <param name"e"></param>private void materialButton2_Click(object sender, EventArgs e){Task.Run…

作者头像 李华
网站建设 2026/4/18 5:37:18

如何用AI自动生成Sharding-JDBC分库分表配置

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请生成一个完整的Sharding-JDBC分库分表配置示例&#xff0c;要求&#xff1a;1. 基于订单系统的业务场景&#xff1b;2. 包含水平分库和水平分表&#xff1b;3. 使用user_id作为分…

作者头像 李华
网站建设 2026/4/18 7:37:56

二叉树基础与排序算法解析

基本二叉树&#xff08;空子树&#xff0c;左子树&#xff0c;右子树&#xff0c;完全二叉树&#xff0c;满二叉树&#xff09;二叉树的定义&#xff1a;每个节点最多有两个子节点的树&#xff0c;通常称为右子节点&#xff0c;左子节点。空子树&#xff1a;不包含任何节点左子…

作者头像 李华
网站建设 2026/4/18 6:25:58

如何用AI自动修复SSL证书过期问题

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个AI辅助工具&#xff0c;能够自动检测网站SSL证书状态&#xff0c;当发现certificate has expired错误时&#xff1a;1. 分析证书有效期和颁发机构 2. 根据证书类型自动生成…

作者头像 李华