精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

上位機C#通過TCP/IP和機器人通訊

qianyanjishuhui ? 來源:愛上PLC ? 2023-08-15 11:06 ? 次閱讀

要想和庫卡機器人通訊,首先要給機器人安裝“ETHERNETKRL”這個軟件,對,是給機器人安裝。具體軟件的安裝以及初步通訊測試就不多做介紹了。

因為本文不是介紹該軟件的安裝,所以就不多做解釋,下面的內容默認已經能用自帶的測試軟件獲取庫卡機器人發送過來的數據。在此基礎上,我來說一下c#利用tcp/ip是如何跟庫卡機器人進行通訊的.

首先當然是TCP/IP的基礎部分,服務器和客戶端。這里將庫卡機器人作為客戶端,上位機作為服務器進行通訊。

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


/// TCP放在后臺線程
///

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

}
///
/// 創建TCP服務端并監聽
///

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

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

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

//等待新的客戶端連接
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();

//接受到客戶端消息
if (stringdata != "")
{
MessageBox.Show(stringdata);
}
//顯示客戶端發送過來的信息
}
catch (Exception ex)
{
//從列表中移除通訊失敗的客戶端
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;
}
}

}

通過按鈕事件,創建后臺線程用于TCP服務端,創建服務端并開啟監聽后,就可以等待機器人客戶端發來的消息了。

庫卡機器人TCP通訊存在三種數據發送格式:固定長度字節,任意長度字節,和xml格式。個人感覺xml格式比較好用,這里介紹xml的通訊。

xml的通訊,其實可以分解為幾個步驟:

機器人發送到上位機:機器人程序將變量或者數值寫入xml的元素中→機器人將xml發送通過服務端發送到上位機的服務端→服務端接受到數據,按照xml的格式解析其中元素。

RET=EKI_Init("XmlCallBack")//初始化xml文件
RET=EKI_Open("XmlCallBack")//打開(相當于客戶端請求連接)
//將變量或值寫入到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)
//發送xml到服務端
RET = EKI_Send("XmlCallBack","Robot")

上位機服務端獲取到的數據是:

12345678ConnectSensor1

然后對數據進行逐個元素的解析就可以了。要增加變量,只要對應在mxl文件,機器人程序和上位機解析過程中添加就可以了。

上位機發送到機器人:上位機將變量寫成xml格式,利用客戶端發送到機器人中的xml文件→機器人讀取xml文件中的元素值到程序中的變量

寫成xml格式:

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

然后是tcp發送
///


/// 將字符串發送給機器人
///

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

sendstr = header;
//設置xml文件中變量的值,格式:<變量名>變量值
foreach (string item in fields)
{
string[] arr = item.Split('=');
sendstr += "<" + arr[0] + ">" + arr[1] + "";
}
sendstr += tail;
//這些變量的某些中間父元素與前面的不同,所以另外寫
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
{ }
}

等發送完成之后,機器人再讀取

機器人從xml元素中讀取值或者屬性并賦予創建的變量

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)

然后就可以在機器人程序中使用,或者通過查看變量值檢測是否正確。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器人
    +關注

    關注

    210

    文章

    28205

    瀏覽量

    206524
  • 通訊
    +關注

    關注

    9

    文章

    893

    瀏覽量

    34835
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1350

    瀏覽量

    78986
  • 上位機
    +關注

    關注

    27

    文章

    930

    瀏覽量

    54732

原文標題:上位機C#通過TCP/IP和機器人通訊

文章出處:【微信號:愛上PLC,微信公眾號:愛上PLC】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    機器人labview上位程序

    機器人控制labview上位程序
    發表于 03-21 11:48

    現在用WINCC開發上位,如何實現wincc和PB之間的TCP/IP通訊

    現在已有PB開發的系統,預留TCP/IP通訊上位相連。現在用WINCC開發上位
    發表于 06-09 11:44

    履帶式移動機器人的設計

    作為一個技術宅,我對機器人和單片很感興趣。在這里我把自己做過的一款履帶式移動機器人的資料分享給大家。歡迎大家吐槽!同時也希望對做機器人的同學有幫助。 該
    發表于 07-27 18:28

    c#/winform c#/wpf c++/QT上位

    c#/winform c#/wpf c++/QT上位,本人從事上位
    發表于 09-21 21:20

    上位全套程序,上位機器人和PLC通訊都是通過以太網總線方式

    ABB機器人、PLC、C#上位全套程序1.項目用的是ABB蜘蛛機器人,六軸用的程序開發都一樣2.上位
    發表于 07-01 07:52

    上位機器人和PLC都是如何進行通訊

    ABB蜘蛛機器人六軸用的程序開發都一樣嗎?上位機器人和PLC都是如何進行通訊的?
    發表于 09-01 07:39

    [求助]W5500 上位通訊程序 TCP/IP協議

    實驗室的嵌入式設備用的是W5500,而上位是PC電腦,兩者通過網線連到交換機,在同一個局域網內通訊。現要用QT或labview編寫上位
    發表于 02-04 10:32

    如何通過IP命令控制機器人

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

    ABB機器人如何與相機詳細方法通訊圖文講解

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

    EPSON機器人如何與視覺上位實現TCP通信

    上位開發中經常會有機器人通信,今天跟大家分享一下,EPSON機器人如何與視覺上位實現
    發表于 10-10 15:35 ?1630次閱讀

    什么是EPSON機器人上位TCP通信

    大家好,今天跟大家分享一下,EPSON機器人如何與視覺上位實現TCP通信。
    的頭像 發表于 02-22 15:52 ?3268次閱讀
    什么是EPSON<b class='flag-5'>機器人</b>與<b class='flag-5'>上位</b><b class='flag-5'>機</b><b class='flag-5'>TCP</b>通信

    C#上位和松下PLC通訊

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

    C#編寫簡易的上位

    標題C#編寫簡易的上位 代碼如下:
    發表于 05-08 09:42 ?7次下載
    <b class='flag-5'>C#</b>編寫簡易的<b class='flag-5'>上位</b><b class='flag-5'>機</b>

    ABB機器人上位進行Socket通信的RAPID代碼實現(服務端)

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

    圖文詳解ABB機器人如何與相機通訊

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