您好!欢迎光临工博士商城

Kawasaki川崎beplay网站入口 服务商

产品:33
联系我们
您当前的位置: 首页? 新闻中心? 川崎机器人TCP/IP通信方法及编程过程介绍
beplay新网址
  • 暂无分类
新闻中心
川崎机器人TCP/IP通信方法及编程过程介绍
发布时间:2021-11-10 浏览次数:739 返回列表
川崎机器人的TCP/IP通信除了直接与川崎机器人通信外,有一种方式是通过PLC间接通信,附上我的另一篇文章,讲c#与三菱PLC通信的:

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

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

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

[csharp] view plain copy
  1. publicvoid ConnectRobot()//链接tcp
  2. {
  3. byte[] data =newbyte[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. ThreadStart myThreaddelegate =new ThreadStart(ReceiveMsg);
  22. myThread_client =new Thread(myThreaddelegate);
  23. myThread_client.Start();
  24. }

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

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

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

[csharp] view plain copy
  1. publicvoid ReceiveMsg()//监听tcp
  2. {
  3. int thelastData = 999;
  4. while (true)
  5. {
  6. try
  7. {
  8. byte[] data =newbyte[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.substrin(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,然后机器人程序往下执行。




联系热线:13918763764 联系人:陈亮 联系地址:上海市宝山区富联一路98弄6号

技术和报价服务:星期一至星期六8:00-22:00Kawasaki川崎beplay网站入口 服务商

Baidu
map