川崎機器人c#通訊(轉)

由于本人在工業自動化行業做機器視覺的工作,所以除了圖像處理方面要掌握外,還需要與工業機器人進行通信。最近學習了計算機與川崎機器人的TCP/IP通信,于是在這里記錄一下。

除了直接與機器人通信外,有一種方式是通過PLC間接通信,附上我的另一篇文章,講c#與三菱PLC通信的:C#與三菱PLC通信

首先假設一個簡單的應用情況,有一臺帶相機的工業機器人,需要在機器人移動到某位置時,發出信號,然后視覺系統拍照并處理,最后將返回信號發送回機器人。這個程序就是以這個應用為基礎寫的。下圖是機器人示教器上的程序:移動到P1點后,給計算機發送拍照信號photo=1,然后計算機處理后返回over=1,機器人收到后移動到P2點。

圖片2圖片2

機器人示教器上面的程序十分簡單,然后說明計算機上的程序。

首先是建立計算機與機器人的TCP鏈接,這里以計算機為客戶端,機器人為服務端。

[csharp] view plain copy
  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. ??
  17. ????????????}??
  18. ????????????catch?(SocketException?e)??
  19. ????????????{??
  20. ????????????????SetTishi("連接機器人失敗??"?+?e.Message);??
  21. ????????????????return;??
  22. ????????????}??
  23. <span?style="white-space:pre;">?????</span>//用于監聽機器人是否發送數據??
  24. ????????????ThreadStart?myThreaddelegate?=?new?ThreadStart(ReceiveMsg);??
  25. ????????????myThread_client?=?new?Thread(myThreaddelegate);??
  26. ????????????myThread_client.Start();??
  27. ??
  28. ??
  29. ????????}??

TCP通信的基本知識不在這里講,這里要說明的是connect后為什么有一句向機器人發送“as”。在川崎機器人E系列TCP/IP通信手冊中,有如下內容:

圖片1

即,在connect后首先向機器人發送"as"后,可以直接從計算機發送機器人的AS語言指令。這樣,就可以實現從計算機上對機器人程序進行控制。

建立連接后,要做的就是收發信息了。計算機向機器人發信息很簡單,因為計算機可以向機器人發送as語言指令,所以就是簡單的TCP發送消息就可以了,如直接發送“over=1”,機器人就可以獲取得到了。需要說的是機器人向計算機發送消息,在本程序中沒有采用在機器人中建立TCP服務器然后監聽的方法,而是在計算機中實現該功能。本方法利用的是川崎機器人as語言中的list指令,list指令的功能是顯示所有程序步驟和變量,而要查詢變量photo的值,只需要向機器人發送“list/r photo”,這樣就可以得到變量photo的值。這樣就可以通過計算機端不斷查詢,達到了機器人發送數據的效果,從而簡化了機器人程序,復雜性降低。以下是監聽代碼:

?

[csharp] view plain copy
  1. public?void?ReceiveMsg()//監聽tcp??
  2. ????????{??
  3. ??
  4. ????????????int?thelastData?=?999;??
  5. ????????????while?(true)??
  6. ????????????{??
  7. ????????????????try??
  8. ????????????????{??
  9. ??
  10. ????????????????????byte[]?data?=?new?byte[1024];??
  11. ????????????????????int?recv?=?newclient_Client.Receive(data);//接收消息??
  12. ????????????????????string?stringdata?=?Encoding.UTF8.GetString(data,?0,?recv);//將bytes轉換為字符??
  13. ????????????????????//string?stringdata?=?Encoding.Unicode.GetString(data,?0,?recv);??
  14. ????????????????????if?(stringdata?==?"")//判斷是否斷開連接??
  15. ????????????????????{??
  16. ????????????????????????SetTishi("服務器已退出");??
  17. ????????????????????????newclient_Client.Close();??
  18. ????????????????????????Connected_Client?=?false;??
  19. ????????????????????????break;??
  20. ????????????????????}??
  21. ????????????????????//利用AS語言的檢測變量的指令list實現監聽功能??
  22. ????????????????????//因為發送‘list/r?photo’監測變量photo的值返回的還有其它字符,所以要去掉這些字符??
  23. ????????????????????stringdata?=?stringdata.Trim();??
  24. ????????????????????string?strTemp?=?"photo????=";??
  25. ????????????????????int?iCount?=?stringdata.IndexOf(strTemp);//得到多余字符的長度??
  26. ????????????????????if?(iCount?>?0)??
  27. ????????????????????{??
  28. ????????????????????????string?read?=?stringdata.Substring(strTemp.Length?+?iCount?+?1,?2);//去掉多余字符以及photo??
  29. ????????????????????????int?kk?=?int.Parse(read);//得到變量photo的值??
  30. ????????????????????????if?(kk?!=?0)??
  31. ????????????????????????{??
  32. ??
  33. ????????????????????????????if?(thelastData?!=?kk)//信號從0->1才認為收到信號??
  34. ????????????????????????????{??
  35. ????????????????????????????????SetTishi("接收到機器人拍照信號...");??
  36. ????????????????????????????????sendToRobot("over=1\r\n");//給機器人完成信號??
  37. ????????????????????????????????SetTishi("接收到消息:"?+?stringdata);??
  38. ????????????????????????????}??
  39. ????????????????????????}??
  40. ????????????????????????thelastData?=?kk;??
  41. ????????????????????}??
  42. ????????????????}??
  43. ????????????????catch??
  44. ????????????????{??
  45. ??
  46. ????????????????}??
  47. ????????????????sendToRobot("list/R?photo\r\n");//向機器人發送as語言的指令,查詢photo的值??
  48. ????????????????Thread.Sleep(100);??
  49. ??
  50. ????????????}??
  51. ????????}??

通過不斷向機器人獲取變量photo的值,當檢測到photo=1時,就可以向機器人發送完成信號over=1,然后機器人程序往下執行。

轉載于:https://www.cnblogs.com/bile/p/8939996.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254772.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254772.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254772.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

模板類 Template Classes 以及模板類編譯時的處理

&#xfeff;&#xfeff;我們可以建立template classes&#xff0c;使它們能夠神奇地操作任何類型的資料。下面這個例子是讓CThree 類別儲存三個成員變量&#xff0c;成員函數Min 傳回其中的最小值&#xff0c;成員函數Max 則傳回其中的最大值。我們把它設計為template class&…

行轉列及列轉行查詢

開發過程中常遇到行轉列或是列轉行的問題&#xff0c;即需要將數據庫中一張表信息進行行轉列操作&#xff0c;再將每列&#xff08;即每個字段&#xff09;作為與其他表進行聯表查詢的字段進行顯示。 一、行轉列&#xff1a;將原來同一列下多行的不同內容作為多個字段&#xff…

移動端系列講解之字體單位

移動端字體單位有哪些&#xff1f;他們的兼容性如何&#xff1f;他們的特點&#xff1f;1.移動端字體單位現在主要有 em 、rem 、px 2.兼容性請傳送點擊這里 em: em是相對長度單位。相對于父元素設置的字體大小。em相對于當前對象內文本的字體尺寸。如當前對行內文本的字體尺寸…

x264_param_t參數注解

typedef struct x264_param_t { CPU 標志位 unsigned int cpu; int i_threads; 并行編碼多幀 int b_deterministic; 是否允許非確定性時線程優化 int i_sync_lookahead; 線程超前緩沖 視頻屬性 int i_width; 寬度 int i_height; 高…

gen_circle_contour_xld創建圓或圓弧的XLD輪廓

目錄gen_circle_contour_xld&#xff08;算子&#xff09;描述參數gen_circle_contour_xld&#xff08;算子&#xff09; gen_circle_contour_xld - 創建圓或圓弧的XLD輪廓。 gen_circle_contour_xld&#xff08;&#xff1a;ContCircle&#xff1a;Row&#xff0c;Column&am…

一、Java語言基礎(4)_方法和數組——數組

2018-04-25 不悔夢歸處&#xff0c;只恨未盡心 數組 一、一維數組 數組的含義&#xff1a;具有相同類型的多個變量按有序形式組織起來的數據形式。&#xff08;數組是用來存儲固定大小的同類型元素。&#xff09;數組的定義&#xff1a;方式1&#xff08;推薦使用&#xff09;&…

http header 具體解釋

HTTP&#xff08;HyperTextTransferProtocol&#xff09;即超文本傳輸協議&#xff0c;眼下網頁傳輸的的通用協議。HTTP協議採用了請求/響應模型&#xff0c;瀏覽器或其它client發出請求&#xff0c;server給與響應。就整個網絡資源傳輸而言&#xff0c;包含message-header和me…

研究生開題報告需要注意的幾點

&#xfeff;&#xfeff;1 畢業論文選題的原則 畢業論文選題一般要求滿足以下原則&#xff1a; ①開拓性:前人沒有專門研究過或雖已研究但尚無理想的結果&#xff0c;有待進一步的探討和研究&#xff0c;或是學術界有分歧&#xff0c;有必要深入研究探討的問題&#xff1b;…

create_metrology_model創建測量幾何形狀所需的數據結構(原理)

目錄create_metrology_model&#xff08;算子&#xff09;描述二維計量的基本原理創建計量模型數據結構提供近似值修改模型參數修改對象參數對齊計量模型應用測量訪問結果清理記憶注意參數create_metrology_model&#xff08;算子&#xff09; create_metrology_model - 創建測…

X264碼率控制流程分析

碼率控制的理論知識&#xff1a;碼率控制的目的和意義&#xff1a;圖像通信中碼率控制的目的&#xff1a;通過調節編碼參數&#xff0c;控制單位時間內的編碼視頻流的數據量&#xff0c;以使產生的比特流符合各種應用的需求。視頻壓縮的效率和視頻內容有很大的關系&#xff0c;…

STL-list

#include "stdafx.h"#include<iostream>#include<string>#include<vector>//vector向量容器#include<deque>#include<list>#include<algorithm>using namespace std;/* list介紹 list容器實現了雙向鏈表的數據結構&#xff0c;數…

Java微信二次開發(九)

多媒體文件上傳與下載 第一步&#xff1a;找到包com.wtz.vo&#xff0c;新建類WeixinMedia.java 1 package com.wtz.vo;2 3 /**4 * author wangtianze QQ:8646200125 * date 2017年4月25日 上午11:10:316 * <p>version:1.0</p>7 * <p>descri…

add_metrology_object_generic將測量對象添加到計量模型中

目錄add_metrology_object_generic&#xff08;算子&#xff09;描述可能的形狀測量區域的定義通用參數參數add_metrology_object_generic&#xff08;算子&#xff09; add_metrology_object_generic - 將計量對象添加到計量模型中。 add_metrology_object_generic&#xff…

關于發那科機器人的FSSB

&#xfeff;&#xfeff;FSSB是指fanuc Serial Servo Bus&#xff0c;即發那科串行伺服總線&#xff08;光纜&#xff09;&#xff0c;連接CNC與伺服放大器。HSSB是指High-Speed Serial Bus&#xff0c;即高速串行總線&#xff08;光纜&#xff09;&#xff0c;連接CNC與外部P…

H264規定了三種主要檔次

H264規定了三種主要檔次&#xff0c;每個檔次支持一組特定的編碼功能&#xff0c;并支持一類特定的應用。 1、基本檔次&#xff08;Baseline Profile&#xff09;&#xff1a;利用I片和P片支持幀內和幀間編碼&#xff0c;支持利用基于上下文的自適應的變長編碼進行的熵編碼&…

get_metrology_object_result 獲取計量模型的測量結果

目錄get_metrology_object_result&#xff08;算子&#xff09;描述result_type&#xff1a;獲取所有參數&#xff1a;獲取特定參數&#xff1a;獲得分數&#xff1a;used_edges&#xff1a;行&#xff1a;列&#xff1a;振幅&#xff1a;angle_direction&#xff1a;參數get_m…

iOS開發UI篇—字典轉模型

一、能完成功能的“問題代碼” 1.從plist中加載的數據 2.實現的代碼 1 //2 // LFViewController.m3 // 03-應用管理4 //5 // Created by apple on 14-5-22.6 // Copyright (c) 2014年 heima. All rights reserved.7 //8 9 #import "LFViewController.h" 10 11 i…

Codechef:Path Triples On Tree

Path Triples On Tree 題意是求樹上都不相交或者都相交的路徑三元組數量。 發現blog里沒什么樹形dp題&#xff0c;也沒有cc題&#xff0c;所以來丟一道cc上的樹形dp題。 比較暴力&#xff0c;比較惡心 #include<cstdio> #include<algorithm> #define MN 300001 #de…

grbl

第一次發帖...之前上論壇都是查資料的&#xff0c;發現gcode這一塊資料比較少先說一下Gcode:Gcode在工業控制上用的很多&#xff0c;是一種通用的控制指令&#xff0c;數控機床上經常用&#xff0c;在我diy雕刻機&#xff08;打印機之類的&#xff09;的時候要用到&#xff0c;…

mybitis實現增,刪,改,查,模糊查詢的兩種方式:(2)

方式二&#xff1a;mapper代理接口方式 這種方式只需要xml接口&#xff08;不用寫實體類&#xff09;但是需要符合三個規范 使用mapper代理接口方式在同一目錄下&#xff08;可以創建一個源文件夾&#xff0c;達到類文件和xml文件分類的作用&#xff09;xml中namespace&#xf…