news 2026/6/10 19:32:09

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

作者头像

张小明

前端开发工程师

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/6/10 0:36:13

12.12 - 二叉树的层序遍历 C语言函数指针和指针函数的区别

目录 1.二叉树的层序遍历 a.核心思想 b.思路 c.步骤 2.C语言函数指针和指针函数的区别 a.函数指针 b.指针函数 c.核心区别 1.二叉树的层序遍历 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/binary-tree-level-order-t…

作者头像 李华
网站建设 2026/6/10 4:44:37

【网络安全】一、虚拟局域网设置和应用

实验01&#xff1a;虚拟局域网设置和应用一、实验目的掌握虚拟局域网&#xff08;VLAN&#xff09;的基本概念与核心作用。熟练掌握跨多台交换机的 VLAN 配置及Trunk 链路的配置方法。验证 VLAN 对网络广播域的隔离效果&#xff0c;深入理解其在网络安全中 “访问控制、缩小攻击…

作者头像 李华
网站建设 2026/6/10 16:06:24

C++基础笔记(三)链表list

一、数据结构说明 list std::list 是一种双向链表&#xff08;doubly linked list&#xff09;&#xff0c;其底层数据结构是互不连续的节点。 刷题要点&#xff1a; 在任何位置进行元素的插入和删除都非常高效&#xff0c;时间复杂度为 O(1)。不支持随机访问&#xff08;如 li…

作者头像 李华
网站建设 2026/6/10 17:08:27

3分钟搞定Git SSH配置:传统vs快马AI方案对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Git SSH配置效率对比工具&#xff0c;左侧显示传统手动配置的7个步骤(生成密钥、复制公钥、网站配置等)&#xff0c;右侧展示快马AI一键生成的完整配置代码。要求&#xff…

作者头像 李华
网站建设 2026/6/9 21:38:49

基于LangChain-ChatChat搭建金融知识问答机器人实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个金融知识问答系统&#xff0c;输入要求&#xff1a;1.使用LangChain-ChatChat处理用户金融术语查询 2.集成证监会政策文档作为知识库 3.实现风险评估问卷的对话式填写 4.对…

作者头像 李华
网站建设 2026/6/10 17:50:57

5分钟快速验证:解决声明查找问题的原型方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个声明查找问题快速验证工具原型&#xff0c;功能包括&#xff1a;1)最小化代码示例生成 2)多种解决方案A/B测试 3)即时效果对比。使用Next.js实现&#xff0c;集成Monaco编辑…

作者头像 李华