由于本人在工业自动化行业做机器视觉的工作,所以除了图像处理方面要掌握外,还需要与工业机器人进行通信。最近学习了计算机与川崎机器人的TCP/IP通信,于是在这里记录一下。

除了直接与机器人通信外,有一种方式是通过PLC间接通信,附上我的另一篇文章,讲c#与三菱PLC通信的:C#与三菱PLC通信

首先假设一个简单的应用情况,有一台带相机的工业机器人,需要在机器人移动到某位置时,发出信号,然后视觉系统拍照并处理,最后将返回信号发送回机器人。这个程序就是以这个应用为基础写的。下图是机器人示教器上的程序:移动到P1点后,给计算机发送拍照信号photo=1,然后计算机处理后返回over=1,机器人收到后移动到P2点。

图片2

机器人示教器上面的程序十分简单,然后说明计算机上的程序。

首先是建立计算机与机器人的TCP链接,这里以计算机为客户端,机器人为服务端。

  1. public void ConnectRobot()//链接tcp
  2. {
  3. byte[] data = new byte[1024];
  4. newclient_Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  5. string ipadd = "192.168.30.238";//机器人IP地址
  6. int port = Convert.ToInt32("23");//端口号
  7. IPEndPoint ie = new IPEndPoint(IPAddress.Parse(ipadd), port);
  8. try
  9. {
  10. newclient_Client.Connect(ie);//建立连接
  11. Connected_Client = true;//连接标志位
  12. btnConn.Enabled = false;
  13. sendToRobot("as\r\n");//建立连接后,首先发送as,则可以通过计算机发送as语言指令
  14. SetTishi("机器人链接成功...");//显示
  15. }
  16. catch (SocketException e)
  17. {
  18. SetTishi("连接机器人失败  " + e.Message);
  19. return;
  20. }
  21. <span style="white-space:pre;">     </span>//用于监听机器人是否发送数据
  22. ThreadStart myThreaddelegate = new ThreadStart(ReceiveMsg);
  23. myThread_client = new Thread(myThreaddelegate);
  24. myThread_client.Start();
  25. }

TCP通信的基本知识不在这里讲,这里要说明的是connect后为什么有一句向机器人发送“as”。在川崎机器人E系列TCP/IP通信手册中,有如下内容:

即,在connect后首先向机器人发送"as"后,可以直接从计算机发送机器人的AS语言指令。这样,就可以实现从计算机上对机器人程序进行控制。

建立连接后,要做的就是收发信息了。计算机向机器人发信息很简单,因为计算机可以向机器人发送as语言指令,所以就是简单的TCP发送消息就可以了,如直接发送“over=1”,机器人就可以获取得到了。需要说的是机器人向计算机发送消息,在本程序中没有采用在机器人中建立TCP服务器然后监听的方法,而是在计算机中实现该功能。本方法利用的是川崎机器人as语言中的list指令,list指令的功能是显示所有程序步骤和变量,而要查询变量photo的值,只需要向机器人发送“list/r photo”,这样就可以得到变量photo的值。这样就可以通过计算机端不断查询,达到了机器人发送数据的效果,从而简化了机器人程序,复杂性降低。以下是监听代码:

  1. public void ReceiveMsg()//监听tcp
  2. {
  3. int thelastData = 999;
  4. while (true)
  5. {
  6. try
  7. {
  8. byte[] data = new byte[1024];
  9. int recv = newclient_Client.Receive(data);//接收消息
  10. string stringdata = Encoding.UTF8.GetString(data, 0, recv);//将bytes转换为字符
  11. //string stringdata = Encoding.Unicode.GetString(data, 0, recv);
  12. if (stringdata == "")//判断是否断开连接
  13. {
  14. SetTishi("服务器已退出");
  15. newclient_Client.Close();
  16. Connected_Client = false;
  17. break;
  18. }
  19. //利用AS语言的检测变量的指令list实现监听功能
  20. //因为发送‘list/r photo’监测变量photo的值返回的还有其它字符,所以要去掉这些字符
  21. stringdata = stringdata.Trim();
  22. string strTemp = "photo    =";
  23. int iCount = stringdata.IndexOf(strTemp);//得到多余字符的长度
  24. if (iCount > 0)
  25. {
  26. string read = stringdata.Substring(strTemp.Length + iCount + 1, 2);//去掉多余字符以及photo
  27. int kk = int.Parse(read);//得到变量photo的值
  28. if (kk != 0)
  29. {
  30. if (thelastData != kk)//信号从0->1才认为收到信号
  31. {
  32. SetTishi("接收到机器人拍照信号...");
  33. sendToRobot("over=1\r\n");//给机器人完成信号
  34. SetTishi("接收到消息:" + stringdata);
  35. }
  36. }
  37. thelastData = kk;
  38. }
  39. }
  40. catch
  41. {
  42. }
  43. sendToRobot("list/R photo\r\n");//向机器人发送as语言的指令,查询photo的值
  44. Thread.Sleep(100);
  45. }
  46. }

通过不断向机器人获取变量photo的值,当检测到photo=1时,就可以向机器人发送完成信号over=1,然后机器人程序往下执行。

川崎机器人c#通讯(转)的更多相关文章

  1. 2016年如果还没有关注这些机器人公司,你就out了

    芯师爷语据 知名市场研究机构IDC发布报告称,预计到2019年,全球机器人及相关服务上的投入将达到1350亿美元,较2015年的710亿美元增长近一倍.报告称,机器人相关投资预计将以每年17%的速度增 ...

  2. PLC与上位机的socket通讯——ABB机器人程序(三)

    源程序:https://github.com/935094505/ABB-socket-communication 程序范例 觉得有帮助,别忘了打赏下

  3. 机器人与机器人仿真技术(zz)

    http://www.viblue.com/archives/5587.htm 一.机器人简介: 机器人(Robot)是自动执行工作的机器装置.它既可以接受人类指挥,又可以运行预先编排的程序,也可以根 ...

  4. 机器人操作系统(ROS)教程4:ROS的框架【转】

    转自:http://www.arduino.cn/thread-11351-1-1.html 在进行ROS的代码开发前,有必要了解一些ROS的概念.首先,ROS的系统代码分为两部分:main和univ ...

  5. 制作自己的ros机器人(navigaion)前提--22

    摘要: 原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/  一.要求: 1.大家已经对ROS的基本概念(进程间通讯topic service 数据类型 m ...

  6. 机器人操作系统ROS | 简介篇

    同样,从个人微信公众号Nao(ID:qRobotics)搬运. 前言 先放一个ROS Industrial一周年剪辑视频. ROS已经发布八周年了,在国外科研机构中非常受欢迎.目前,以美国西南研究院为 ...

  7. 用Python写的一个多线程机器人聊天程序

    本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows).后来发现实现起来特别麻烦, 就想到python.听说这家伙在什么地方都能发挥作用.所以想用python来做通讯模块...所 ...

  8. jenkins 集成钉钉机器人

    最早做Jenkins发布完成以后通过邮件发送信息通知相关的联系人,发现邮件会受限于大家接收的设置,导致不能及时的看到相关的发布内容,公司使用钉钉做为公司内部的通讯工具,所以想通过Jenkins发布完成 ...

  9. 这是一款借助chrome 插件的微信机器人

    1.chrome kit微信机器人简介 借助chrome 插件 js注入来实现消息的发送 chrome devtool api的调用来监听https请求 打开微信登录界面,在扫码登录前必须先打开too ...

随机推荐

  1. iOS 11开发教程(二十)iOS11应用视图美化按钮之设置按钮的状态

    iOS 11开发教程(二十)iOS11应用视图美化按钮之设置按钮的状态 在示例2-2中,设置按钮的标题和颜色时,需要对按钮的状态进行设置,表示按钮在某一状态下的标题和标题颜色是什么样子.例如,UICo ...

  2. Bzoj5332: [Sdoi2018]旧试题

    国际惯例的题面首先我们进行一些相对显然的数学变化.解释一下第二行的那个变形,如果一个数是ijk的因数,那么它一定能被分解成三部分分别是i,j,k的因数.我们钦定一个质数只能在三部分的一个中出现.如果一 ...

  3. 乐迪AT9

    AT9使用说明书.pdf https://wenku.baidu.com/view/c17e85ea2f60ddccda38a0fc.html?re=view 乐迪AT9遥控器的基础使用方法第一课视频 ...

  4. C++ 模板应用举例_模板实现STL类(堆栈)

    //stack集合类是一个简单的堆栈的实现. //这里有两个模板参数,T和size,指定堆栈中的元素类型和堆栈中项数的最大值. //push 和 pop成员函数添加和删除堆栈中的项,并在堆栈底部增加. ...

  5. input输入框只能输入数字而且开头不能为零

    <div class="input-choseNum"> <input type="number" id="inp-chooseNu ...

  6. netty相关

    https://my.oschina.net/jamaly/blog/272385两个客户端之间的交互 http://blog.csdn.net/a953713428/article/details/ ...

  7. Unity3d脚本编程_

    UnityEngine.Component引入了新的成员,如下:                                                         新引入的成员     ...

  8. Python和Mysql、Nginx

    链接: python入门和基础: Python 中文学习大本营 你是如何自学 Python 的? 简明 Python 教程 给伸手党的福利:Python 新手入门引导 <Python爬虫学习系列 ...

  9. oracle索引原理(b-tree,bitmap,聚集,非聚集索引)

    B-TREE索引 一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点. 可以用下图一来描述B树索引的结构.其中,B表示分支节点,而L表示叶子节点. 对于分支节点块(包括根节点块)来说,其所 ...

  10. HTML5 在canvas中绘制复杂形状

    作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/32942667 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,画图环 ...