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

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

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

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

public void ConnectRobot()//链接tcp

{

byte[] data = new byte[1024];

newclient_Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

string ipadd = "192.168.30.238";//机器人IP地址

int port = Convert.ToInt32("23");//端口号

IPEndPoint ie = new IPEndPoint(IPAddress.Parse(ipadd), port);

try

{

newclient_Client.Connect(ie);//建立连接

Connected_Client = true;//连接标志位

btnConn.Enabled = false;

sendToRobot("as\r\n");//建立连接后,首先发送as,则可以通过计算机发送as语言指令

SetTishi("机器人链接成功...");//显示

}

catch (SocketException e)

{

SetTishi("连接机器人失败  " + e.Message);

return;

}

//用于监听机器人是否发送数据

ThreadStart myThreaddelegate = new ThreadStart(ReceiveMsg);

myThread_client = new Thread(myThreaddelegate);

myThread_client.Start();

}

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

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

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

public void ReceiveMsg()//监听tcp

{

int thelastData = 999;

while (true)

{

try

{

byte[] data = new byte[1024];

int recv = newclient_Client.Receive(data);//接收消息

string stringdata = Encoding.UTF8.GetString(data, 0, recv);//将bytes转换为字符

//string stringdata = Encoding.Unicode.GetString(data, 0, recv);

if (stringdata == "")//判断是否断开连接

{

SetTishi("服务器已退出");

newclient_Client.Close();

Connected_Client = false;

break;

}

//利用AS语言的检测变量的指令list实现监听功能

//因为发送‘list/r photo’监测变量photo的值返回的还有其它字符,所以要去掉这些字符

stringdata = stringdata.Trim();

string strTemp = "photo    =";

int iCount = stringdata.IndexOf(strTemp);//得到多余字符的长度

if (iCount > 0)

{

string read = stringdata.substrin(strTemp.Length + iCount + 1, 2);//去掉多余字符以及photo

int kk = int.Parse(read);//得到变量photo的值

if (kk != 0)

{

if (thelastData != kk)//信号从0->1才认为收到信号

{

SetTishi("接收到机器人拍照信号...");

sendToRobot("over=1\r\n");//给机器人完成信号

SetTishi("接收到消息:" + stringdata);

}

}

thelastData = kk;

}

}

catch

{

}

sendToRobot("list/R photo\r\n");//向机器人发送as语言的指令,查询photo的值

Thread.Sleep(100);

}

}

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

分享到:

川崎机器人总线通信_川崎机器人TCP/IP通信方法及编程过程介绍相关推荐

  1. EPSON TCP/IP 通信

    EPSON SCARA机器人TCP/IP 通信时,涉及到的相关指令说明. 14.3 TCP/IP命令. OpenNet //打开TCP/IP端口. ChkNet //返回端口状态:等待读取的字节数或错 ...

  2. 《Linux高性能服务器编程》学习总结(四)——TCP/IP通信案例:访问Internet上的Web服务器...

    第四章      TCP/IP通信案例:访问Internet上的Web服务器 HTTP协议是工作在应用层上的协议,其应用十分广泛,而在进行通信的过程中,经常使用HTTP代理服务器.HTTP代理服务器主 ...

  3. TCP/IP通信程序设计方式

    刚接触TCP/IP通信设计的人根据范例可以很快编出一个通信程序,据此一些人可能会认为TCP/IP编程很简单.其实不然,TCP/IP编程具有较为丰富的内容.其编程的丰富性主要体现在通信方式和报文格式的多 ...

  4. TCP/IP 通信示例

    TCP/IP 通信示例 Global String ReadData_P_All$, ReadData_P$(10), data$ ' Global Preserve Double x Global ...

  5. TCP/ip通信模式

    TCP/IP 应用层与应用程序 *************************************************** 更多精彩,欢迎进入:http://shop115376623.t ...

  6. Linux内核协议栈分析之——tcp/ip通信并不神秘

    Jack:计算机如何进行通信? 我:我可以告诉你带Linux操作系统的计算机如何进行通信. Jack:带Linux操作系统的计算机?这和不带操作系统的计算机有区别吗? 我:有的. Jack:哦.那你说 ...

  7. MATLAB与DSP(C6657)的TCP/IP通信实现

    最近尝试使用从MATLAB端键入输入,将输入值传给DSP,DSP运算之后将结果传回MATLAB并显示.我所设置的PC的IP地址是192.168.2.101,DSP的IP地址是192.168.2.100 ...

  8. 51单片机 ENC28J60 TCP/IP通信

    51单片机 ENC28J60 TCP/IP通信 单片机:STC90C516RD+ ENC28J60模块:mini(3.3V供电) 设备:PC.开发板.两个网线.路由器 首先先介绍一下本文的移植针对于单 ...

  9. qt之TCP/IP通信客户端与服务器自动连接互相传输数据

    一.前言 在开发上位机软件,用的最多的通信就是网络通信,串口通信和USB通信,串口通信相对是最容易的,USB通信在前面的文章中也专门写了一个博客介绍USB HID通信方式,见链接:https://bl ...

最新文章

  1. [导入]C#中实现Socket端口复用
  2. 微信小程序记账应用实例课程(完结)——对接服务端账目CRUD
  3. DB2 日期时间函数
  4. 查看服务器Smart Array卡
  5. 一个只有十行的精简MVVM框架(下篇)
  6. Web缓存的作用与类型
  7. 为什么shell脚本第一行要#!/bin/sh
  8. 项目总结(采用领域驱动开发方式)
  9. 前妻捐赠一半财产做慈善 世界首富贝佐斯发推文称赞
  10. Linux内存管理 brk(),mmap()系统调用源码分析1:基础部分
  11. 小技巧 ----- 枚举整数的每一位数字
  12. http 和 https 区别?
  13. wangeditor react中使用
  14. 使用C#存储数据时excel有Microsoft切换到了wps时的引用
  15. BLDC无刷直流电机驱动电路-硬石电子
  16. z2屏幕坏如何从计算机导出数据,闪回收-手机屏幕坏了如何导出数据?手机屏幕坏了怎么用电脑控制?...
  17. 数字贸易标准体系框架
  18. [Bada开发]基于bada1.0的5种控件介绍[待续]
  19. java 根据手机号获取归属地
  20. Java众神之路(2)-标志符

热门文章

  1. 为什么 Java 与 Python 在对待成员变量的访问控制方式截然相反?
  2. PowerPoint 2007 Bible
  3. bzoj2342还是马拉车
  4. secret-performance-desktop - 基于javafx的桌面个性化工具
  5. 摄影师拍蜗牛乘树叶花下避雨 似撑小伞泛舟
  6. 如何使用外部控件来管理Web报表属性
  7. 请求服务接口提示访问被拒绝
  8. 【资源分享】少女爱上姐姐汉化版游戏下载,附图文攻略
  9. 【9008】香甜的黄油
  10. 仿真4. 仿真平台架构设计