前言
本实列使用Windows下 Socked功能与机器人控制器通信的计算机,需要在相同网络上。防火墙穿越(从因特网)及网关穿越(从邻近的其他网络等)无法进行 通信。此时,应探讨经由已连接至与机器人控制器相同的网络的服务器(例如 HTTP 服务器等)进行通信的形态下的运用。 此时,应充分注意安全性、响应性。 其通讯框图如下:

二、使用步骤
1.引入库
using System.Net.Sockets;
2.连接控制器服务器
代码如下(示例):
public static TcpClient robotClient = new TcpClient();
public static bool connectSvr(string ip, int port)
{
const int BufferSize = 8192; // 缓存大小,8192Bytes
IPAddress SvrIp = IPAddress.Parse(ip);
try
{
Thread.Sleep(100);
robotClient.Connect(SvrIp, port);
return true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
3. 发送视觉数组数据给机器人
public static bool SendAdnRec(string sendStr)
{
const int BufferSize = 8192; // 缓存大小,8192Bytes
NetworkStream streamToServer = robotClient.GetStream();
byte[] buffer = Encoding.ASCII.GetBytes(sendStr); // 获得缓存
if (robotClient.Connected)
streamToServer.Write(buffer, 0, buffer.Length); // 发往服务器
string[] ssend = sendStr.Split(',');
int bytesRead;
buffer = new byte[BufferSize];
//streamToServer.ReadTimeout = -1;//永久等待
streamToServer.ReadTimeout = 500;
lock (streamToServer)
{
try
{
bytesRead = streamToServer.Read(buffer, 0, BufferSize);//等待接收
msg = string.Empty;
msg = ASCIIEncoding.UTF8.GetString(buffer, 0, bytesRead);
//char[] cmsg = msg.ToCharArray();
String LogMSg = msg;
cPublic.saveDataLog(LogMSg);
return true;
}
catch
{
String LogMSg = "机器人通讯超时";
cPublic.saveDataLog(LogMSg);
return false;
}
}
}
总结
本功能是C#下上位机和三菱机械手控制器在以太网通信机器中,通过以太网 UDP 通信对机器人控制器的直交/关节位置数据等机器人的当前位置及前端速度 等进行实时监视的功能
该文介绍了一种在Windows环境下,使用C#的Socket功能与机器人控制器进行通信的方法。由于防火墙和网关限制,通信需通过同一网络内的HTTP服务器作为中介。文章详细阐述了连接控制器服务器、发送数据的步骤,并提到了安全性和响应性的注意事项。具体包括利用TcpClient建立连接,发送视觉数组数据,并处理接收的响应。
1033

被折叠的 条评论
为什么被折叠?



