标题:UR机器人通讯
只看楼主
新手村
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2021-9-15
结帖率:0
已结贴  问题点数:10 回复次数:6 
UR机器人通讯
我想通过端口30003实时获取UR的信息(例如坐标位置、每个轴转动的角度、力等等)  以socket接收信息后 不知道该怎么编程解析这些信息
有大神知道  求指教  
搜索更多相关主题的帖子: 信息 通讯 怎么编程 接收 机器人 
2021-09-17 19:37
qq2889577966
Rank: 4
等 级:业余侠客
威 望:5
帖 子:57
专家分:267
注 册:2021-4-14
得分:5 
传递内容为对象序列化,接收到后反序列化为对象即可
在引用里添加System.Runtime.Serialization,
这个比较全了。
序列化传递搞不清楚的话,参考https://bbs.bccn.net/thread-506201-1-1.html

程序代码:
using System.Runtime.Serialization.Json;
using using System.Xml.Serialization;
using System.Xml;
using System.Runtime.Serialization.Formatters.Binary;

public class Serializer
{
    /// 将对象序列化为json文件
    public static void ObjectToJson<T>(T t, string path) where T : class
    {
        DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(T));
        using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
        {
            formatter.WriteObject(stream, t);
        }
    }

    /// 将对象序列化为json字符串
    public static string ObjectToJson<T>(T t) where T : class
    {
        DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(T));
        using (MemoryStream stream = new MemoryStream())
        {
            formatter.WriteObject(stream, t);
            string result = System.Text.Encoding.UTF8.GetString(stream.ToArray());
            return result;
        }
    }

    /// json字符串转成对象
    public static T JsonToObject<T>(string json) where T : class
    {
        DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(T));
        using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json)))
        {
            T result = formatter.ReadObject(stream) as T;
            return result;
        }
    }

    /// 将对象序列化为xml文件
    public static void ObjectToXml<T>(T t, string path) where T : class
    {
        XmlSerializer formatter = new XmlSerializer(typeof(T));
        //using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
        using (FileStream stream = new FileStream(path, FileMode.Create))
        {
            formatter.Serialize(stream, t);
        }
    }

    /// 将对象序列化为xml字符串
    public static string ObjectToXml<T>(T t) where T : class
    {
        XmlSerializer formatter = new XmlSerializer(typeof(T));
        using (MemoryStream stream = new MemoryStream())
        {
            formatter.Serialize(stream, t);
            string result = System.Text.Encoding.UTF8.GetString(stream.ToArray());
            return result;
        }
    }

    /// 将xml文件反序列化为对象
    public static T XmlToObject<T>(T t, string path) where T : class
    {
        XmlSerializer formatter = new XmlSerializer(typeof(T));
        using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
        //using (FileStream stream = new FileStream(path, FileMode.Create))
        {
            XmlReader xmlReader = new XmlTextReader(stream);
            T result = formatter.Deserialize(xmlReader) as T;
            return result;
        }
    }

    /// 将xml字符串反序列化为对象
    public static T XmlStrToObject<T>(T t, string str) where T : class
    {
        XmlSerializer formatter = new XmlSerializer(typeof(T));

        StringReader xmlReader = new StringReader(str);
        T result = formatter.Deserialize(xmlReader) as T;
        return result;
    }


    /// 将对象序列化为二进制流
    public static byte[] ObjectToString<T>(T t)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        using (MemoryStream stream = new MemoryStream())
        {
            formatter.Serialize(stream, t);
            byte[] result = stream.ToArray();
            return result;
        }
    }

    /// 将二进制流反序列为类型
    public static T StringToObject<T>(byte[] bytes) where T : class
    {
        BinaryFormatter formatter = new BinaryFormatter();
        using (MemoryStream stream = new MemoryStream(bytes, 0, bytes.Length))
        {
            T result = formatter.Deserialize(stream) as T;
            return result;
        }
    }

    /// 将对象序列化为文件
    public static void ObjectToFile<T>(T t, string path)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
        {
            formatter.Serialize(stream, t);
            stream.Flush();
        }
    }

    /// 将文件反序列化为对象
    public static T FileToObject<T>(string path) where T : class
    {
        using (FileStream stream = new FileStream(path, FileMode.Open))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            T result = formatter.Deserialize(stream) as T;
            return result;
        }
    }
}


[此贴子已经被作者于2021-9-17 20:52编辑过]

2021-09-17 20:48
新手村
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2021-9-15
得分:0 
回复 2楼 qq2889577966
您好 感谢你的回答
能个反序列化  是不是就是把每个数据 高位在前 转换为低位在前
2021-09-17 21:05
qq2889577966
Rank: 4
等 级:业余侠客
威 望:5
帖 子:57
专家分:267
注 册:2021-4-14
得分:0 
回复 3楼 新手村
只是对socket信息的传输
比如
public class Info
{
速度
力量
....
}
这个序列化后,socket传输。
收到后反序列化为class Info
2021-09-18 08:11
Bc_Newboy
Rank: 2
等 级:论坛游民
帖 子:72
专家分:99
注 册:2019-4-14
得分:5 
2021-09-18 08:58
新手村
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2021-9-15
得分:0 
回复 4楼 qq2889577966
好的  感谢
2021-09-18 09:59
william2011
Rank: 1
来 自:金星
等 级:新手上路
帖 子:35
专家分:0
注 册:2018-1-23
得分:0 
路过
2021-10-24 22:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-506897-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058490 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved