在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

上位機(jī)C#通過(guò)TCP/IP和機(jī)器人通訊

qianyanjishuhui ? 來(lái)源:愛(ài)上PLC ? 2023-08-15 11:06 ? 次閱讀

要想和庫(kù)卡機(jī)器人通訊,首先要給機(jī)器人安裝“ETHERNETKRL”這個(gè)軟件,對(duì),是給機(jī)器人安裝。具體軟件的安裝以及初步通訊測(cè)試就不多做介紹了。

因?yàn)楸疚牟皇墙榻B該軟件的安裝,所以就不多做解釋?zhuān)旅娴膬?nèi)容默認(rèn)已經(jīng)能用自帶的測(cè)試軟件獲取庫(kù)卡機(jī)器人發(fā)送過(guò)來(lái)的數(shù)據(jù)。在此基礎(chǔ)上,我來(lái)說(shuō)一下c#利用tcp/ip是如何跟庫(kù)卡機(jī)器人進(jìn)行通訊的.

首先當(dāng)然是TCP/IP的基礎(chǔ)部分,服務(wù)器和客戶(hù)端。這里將庫(kù)卡機(jī)器人作為客戶(hù)端,上位機(jī)作為服務(wù)器進(jìn)行通訊。

private void button1_Click(object sender, EventArgs e)
{
OpenTCP();
}
///


/// TCP放在后臺(tái)線程
///

private void OpenTCP()
{
//新建一個(gè)委托線程
ThreadStart myThreadDelegate = new ThreadStart(Listen);
//實(shí)例化新線程
myThread = new Thread(myThreadDelegate);
myThread.Start();

}
///
/// 創(chuàng)建TCP服務(wù)端并監(jiān)聽(tīng)
///

public void Listen()//創(chuàng)建tcp服務(wù)端
{ //設(shè)置端口
setPort = 59152;
//初始化SOCKET實(shí)例
newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//允許SOCKET被綁定在已使用的地址上。
newsock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
//初始化終結(jié)點(diǎn)實(shí)例
localEP = new IPEndPoint(IPAddress.Parse("172.31.1.250"), setPort);
try
{
_sessionTable = new Hashtable(53);
//綁定
newsock.Bind(localEP);
//監(jiān)聽(tīng)
newsock.Listen(10);
//開(kāi)始接受連接,異步。=
newsock.BeginAccept(new AsyncCallback(OnConnectRequest), newsock);
}
catch (Exception ex)
{
}
}
///
/// 客戶(hù)端連接
///

///
public void OnConnectRequest(IAsyncResult ar)
{
//初始化一個(gè)SOCKET,用于其它客戶(hù)端的連接

server1 = (Socket)ar.AsyncState;
Client[theIndex] = server1.EndAccept(ar);
DateTimeOffset now = DateTimeOffset.Now;
Byte[] byteDateLine = new Byte[65534];
remote = Client[theIndex].RemoteEndPoint;
//把連接成功的客戶(hù)端的SOCKET實(shí)例放入哈希表
_sessionTable.Add(Client[theIndex].RemoteEndPoint, null);

//等待新的客戶(hù)端連接
theListClient[theIndex, 0] = Client[theIndex].RemoteEndPoint.ToString();
theListClient[theIndex, 1] = "1";
server1.BeginAccept(new AsyncCallback(OnConnectRequest), server1);
theIndex++;
int myIndex = theIndex - 1;
while (true)
{
try
{
if (theListClient[myIndex, 1] == "0") return;
Thread.Sleep(150);
int recv = Client[myIndex].Receive(byteDateLine);

string stringdata = Encoding.UTF8.GetString(byteDateLine, 0, recv);

string ip = Client[myIndex].RemoteEndPoint.ToString();

//接受到客戶(hù)端消息
if (stringdata != "")
{
MessageBox.Show(stringdata);
}
//顯示客戶(hù)端發(fā)送過(guò)來(lái)的信息
}
catch (Exception ex)
{
//從列表中移除通訊失敗的客戶(hù)端
string ip = Client[myIndex].RemoteEndPoint.ToString();
_sessionTable.Remove(Client[myIndex].RemoteEndPoint);
for (int i = 0; i < 256; i++)
{
if (Client[myIndex].RemoteEndPoint.ToString() == theListClient[i, 0]) theListClient[i, 1] = "0";
}
break;
}
}

}

通過(guò)按鈕事件,創(chuàng)建后臺(tái)線程用于TCP服務(wù)端,創(chuàng)建服務(wù)端并開(kāi)啟監(jiān)聽(tīng)后,就可以等待機(jī)器人客戶(hù)端發(fā)來(lái)的消息了。

庫(kù)卡機(jī)器人TCP通訊存在三種數(shù)據(jù)發(fā)送格式:固定長(zhǎng)度字節(jié),任意長(zhǎng)度字節(jié),和xml格式。個(gè)人感覺(jué)xml格式比較好用,這里介紹xml的通訊。

xml的通訊,其實(shí)可以分解為幾個(gè)步驟:

機(jī)器人發(fā)送到上位機(jī):機(jī)器人程序?qū)⒆兞炕蛘邤?shù)值寫(xiě)入xml的元素中→機(jī)器人將xml發(fā)送通過(guò)服務(wù)端發(fā)送到上位機(jī)的服務(wù)端→服務(wù)端接受到數(shù)據(jù),按照xml的格式解析其中元素。

RET=EKI_Init("XmlCallBack")//初始化xml文件
RET=EKI_Open("XmlCallBack")//打開(kāi)(相當(dāng)于客戶(hù)端請(qǐng)求連接)
//將變量或值寫(xiě)入到xml文件的元素中
;FOLD Write data to connection
; Write frame to
RET=EKI_SetFrame("XmlCallBack","Robot/Data/LastPos", TOOL_DATA[1])
; Write real to
RET=EKI_SetReal("XmlCallBack","Robot/Data/ActPos/@X", 1000.12)
; Write int to
RET=EKI_SetInt("XmlCallBack","Robot/Status", 12345678)
; Write string to
RET=EKI_SetString("XmlCallBack","Robot/Mode","ConnectSensor")
; Write bool to
RET=EKI_SetBool("XmlCallBack","Robot/RobotLamp/GrenLamp/LightOn",true)
;ENDFOLD (Write data to connection)
//發(fā)送xml到服務(wù)端
RET = EKI_Send("XmlCallBack","Robot")

上位機(jī)服務(wù)端獲取到的數(shù)據(jù)是:

12345678ConnectSensor1

然后對(duì)數(shù)據(jù)進(jìn)行逐個(gè)元素的解析就可以了。要增加變量,只要對(duì)應(yīng)在mxl文件,機(jī)器人程序和上位機(jī)解析過(guò)程中添加就可以了。

上位機(jī)發(fā)送到機(jī)器人:上位機(jī)將變量寫(xiě)成xml格式,利用客戶(hù)端發(fā)送到機(jī)器人中的xml文件→機(jī)器人讀取xml文件中的元素值到程序中的變量

寫(xiě)成xml格式:

sendstr = sendstr + "FALSE";
sendstr = sendstr + "";

然后是tcp發(fā)送
///


/// 將字符串發(fā)送給機(jī)器人
///

///
private void sendToRobot(string str)
{
string sendstr;
str = str.Replace(" ", "");
string[] fields = str.Split(',');
string header = "", tail = "";//變量xml文件中的父元素

sendstr = header;
//設(shè)置xml文件中變量的值,格式:<變量名>變量值
foreach (string item in fields)
{
string[] arr = item.Split('=');
sendstr += "<" + arr[0] + ">" + arr[1] + "";
}
sendstr += tail;
//這些變量的某些中間父元素與前面的不同,所以另外寫(xiě)
sendstr = sendstr + "FALSE";
sendstr = sendstr + "";
string strDataLine = sendstr;
try
{
Byte[] sendData = Encoding.UTF8.GetBytes(strDataLine);

foreach (DictionaryEntry de in _sessionTable)
{
EndPoint temp = (EndPoint)de.Key;
{
for (int i = 0; i < theIndex; i++)
{
if (theListClient[i, 1] == "1")
{
if (temp.ToString() == theListClient[i, 0])
{
try
{
Client[i].SendTo(sendData, temp);
}
catch (Exception ex)
{

}
}
}
}
}
}
}
catch
{ }
}

等發(fā)送完成之后,機(jī)器人再讀取

機(jī)器人從xml元素中讀取值或者屬性并賦予創(chuàng)建的變量

RET=EKI_GetString("XmlCallBack","Sensor/Message",valueChar[])
RET=EKI_GetInt("XmlCallBack","Sensor/Nmb",valueInt)
RET=EKI_GetBool("XmlCallBack","Sensor/Status/IsActive" ,valueBOOL)
RET=EKI_GetFrame("XmlCallBack","Sensor/Read/xyzabc",valueFrame)

然后就可以在機(jī)器人程序中使用,或者通過(guò)查看變量值檢測(cè)是否正確。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    212

    文章

    29233

    瀏覽量

    210760
  • 通訊
    +關(guān)注

    關(guān)注

    9

    文章

    925

    瀏覽量

    35419
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1395

    瀏覽量

    80077
  • 上位機(jī)
    +關(guān)注

    關(guān)注

    27

    文章

    952

    瀏覽量

    55432

原文標(biāo)題:上位機(jī)C#通過(guò)TCP/IP和機(jī)器人通訊

文章出處:【微信號(hào):愛(ài)上PLC,微信公眾號(hào):愛(ài)上PLC】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    機(jī)器人labview上位機(jī)程序

    機(jī)器人控制labview上位機(jī)程序
    發(fā)表于 03-21 11:48

    履帶式移動(dòng)機(jī)器人的設(shè)計(jì)

    作為一個(gè)技術(shù)宅,我對(duì)機(jī)器人和單片機(jī)很感興趣。在這里我把自己做過(guò)的一款履帶式移動(dòng)機(jī)器人的資料分享給大家。歡迎大家吐槽!同時(shí)也希望對(duì)做機(jī)器人的同學(xué)有幫助。 該
    發(fā)表于 07-27 18:28

    c#/winform c#/wpf c++/QT上位機(jī)

    c#/winform c#/wpf c++/QT上位機(jī),本人從事上位
    發(fā)表于 09-21 21:20

    上位機(jī)全套程序,上位機(jī)機(jī)器人和PLC通訊都是通過(guò)以太網(wǎng)總線方式

    ABB機(jī)器人、PLC、C#上位機(jī)全套程序1.項(xiàng)目用的是ABB蜘蛛機(jī)器人,六軸用的程序開(kāi)發(fā)都一樣2.上位
    發(fā)表于 07-01 07:52

    上位機(jī)機(jī)器人和PLC都是如何進(jìn)行通訊

    ABB蜘蛛機(jī)器人六軸用的程序開(kāi)發(fā)都一樣嗎?上位機(jī)機(jī)器人和PLC都是如何進(jìn)行通訊的?
    發(fā)表于 09-01 07:39

    [求助]W5500 上位機(jī)通訊程序 TCP/IP協(xié)議

    實(shí)驗(yàn)室的嵌入式設(shè)備用的是W5500,而上位機(jī)是PC電腦,兩者通過(guò)網(wǎng)線連到交換機(jī),在同一個(gè)局域網(wǎng)內(nèi)通訊。現(xiàn)要用QT或labview編寫(xiě)上位
    發(fā)表于 02-04 10:32

    如何通過(guò)IP命令控制機(jī)器人

    我有一個(gè)連接到 arduino uno 的 ESP8266 模塊和一個(gè)通過(guò) WiFi 連接到 ESP8266 的智能手機(jī)。我正在嘗試從 IP(Internet 協(xié)議)讀取數(shù)據(jù),我需要通過(guò) IP
    發(fā)表于 02-28 08:23

    ABB機(jī)器人如何與相機(jī)詳細(xì)方法通訊圖文講解

    ABB機(jī)器人如何與相機(jī)通訊1)機(jī)器人與相機(jī)一般采用socket通訊TCP/IP)。所以
    的頭像 發(fā)表于 01-27 09:09 ?1.7w次閱讀
    ABB<b class='flag-5'>機(jī)器人</b>如何與相機(jī)詳細(xì)方法<b class='flag-5'>通訊</b>圖文講解

    EPSON機(jī)器人如何與視覺(jué)上位機(jī)實(shí)現(xiàn)TCP通信

    上位機(jī)開(kāi)發(fā)中經(jīng)常會(huì)有機(jī)器人通信,今天跟大家分享一下,EPSON機(jī)器人如何與視覺(jué)上位機(jī)實(shí)現(xiàn)
    發(fā)表于 10-10 15:35 ?1938次閱讀

    什么是EPSON機(jī)器人上位機(jī)TCP通信

    大家好,今天跟大家分享一下,EPSON機(jī)器人如何與視覺(jué)上位機(jī)實(shí)現(xiàn)TCP通信。
    的頭像 發(fā)表于 02-22 15:52 ?3889次閱讀
    什么是EPSON<b class='flag-5'>機(jī)器人</b>與<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b><b class='flag-5'>TCP</b>通信

    C#上位機(jī)和松下PLC通訊

    C#上位機(jī)和松下PLC通訊 1、前言也好久沒(méi)回來(lái)看博客了,看大家對(duì)于其他的PLC的需求都是有的,說(shuō)明搞我們工業(yè)控制這一行的人也是很多的。剛好最近基于項(xiàng)目需要,一些新的東西,需要和松下P
    發(fā)表于 04-17 11:54 ?3次下載
    <b class='flag-5'>C#</b><b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>和松下PLC<b class='flag-5'>通訊</b>

    C#編寫(xiě)簡(jiǎn)易的上位機(jī)

    標(biāo)題C#編寫(xiě)簡(jiǎn)易的上位機(jī) 代碼如下:
    發(fā)表于 05-08 09:42 ?7次下載
    <b class='flag-5'>C#</b>編寫(xiě)簡(jiǎn)易的<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>

    ABB機(jī)器人上位機(jī)進(jìn)行Socket通信的RAPID代碼實(shí)現(xiàn)(服務(wù)端)

    本文采取TCP/IP中Socket的方式實(shí)現(xiàn)ABB與上位機(jī)的通信。其中上位機(jī)做為客戶(hù)端,
    發(fā)表于 05-29 16:16 ?3次下載
    ABB<b class='flag-5'>機(jī)器人</b>與<b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>進(jìn)行Socket通信的RAPID代碼實(shí)現(xiàn)(服務(wù)端)

    圖文詳解ABB機(jī)器人如何與相機(jī)通訊

    機(jī)器人與相機(jī)一般采用socket通訊TCP/IP)。所以機(jī)器人需要有pc-interface選項(xiàng)。
    發(fā)表于 06-11 09:23 ?1541次閱讀
    圖文詳解ABB<b class='flag-5'>機(jī)器人</b>如何與相機(jī)<b class='flag-5'>通訊</b>

    運(yùn)動(dòng)控制卡網(wǎng)絡(luò)通訊的心跳檢測(cè)之C#上位機(jī)編程

    使用C#上位機(jī)編程實(shí)現(xiàn)運(yùn)動(dòng)控制卡網(wǎng)絡(luò)通訊的心跳檢測(cè)功能
    的頭像 發(fā)表于 12-24 10:54 ?620次閱讀
    運(yùn)動(dòng)控制卡網(wǎng)絡(luò)<b class='flag-5'>通訊</b>的心跳檢測(cè)之<b class='flag-5'>C#</b><b class='flag-5'>上位</b><b class='flag-5'>機(jī)</b>編程
    主站蜘蛛池模板: 护士巨好爽好大乳 | 又长又大又粗又硬3p免费视 | 亚洲人成电影在线观看网 | 男人操女人视频在线观看 | 亲女乱h文小兰第一次 | 国产成人v爽在线免播放观看 | 中文字幕在线资源 | 亚欧美色 | 中文字幕一区视频 | 5252色欧美在线激情 | 激情综合网激情 | 亚洲乱淫| 午夜色网 | 欧美特黄视频在线观看 | 最新欧美伦理网 | 成人18毛片 | 永久免费在线观看视频 | 中文字幕亚洲区 | 欧美色香蕉 | 狠狠噜天天噜日日噜 | 国产你懂 | 乌克兰一级毛片 | 日本在线色视频 | 桃色婷婷 | 四虎影院新网址 | 亚洲日本视频在线观看 | 啊用力太猛了啊好深视频免费 | 亚洲色图综合 | 亚洲综合色婷婷在线观看 | 白嫩美女一级高清毛片免费看 | 91免费视频网站 | 亚洲成人免费在线 | 欧洲精品不卡1卡2卡三卡四卡 | av在线天堂网| 欧美乱妇高清无乱码 | 另类免费视频 | 久久极品| 欧美性猛交xxxx黑人喷水 | 寡妇影院首页亚洲图片 | 6一10周岁毛片免费 717影院理论午夜伦不卡久久 | 中国高清性色生活片 |