上位機C 通過TCP IP和庫卡機械人通訊

2021-09-25 05:51:30 字數 2963 閱讀 2148

隔了相當長的一段時間,我又來寫一下上位機c#利用tcp/ip和庫卡機械人通訊的文章

上位機要想和庫卡機械人通訊,首先要給機械人安裝「ethernetkrl」這個軟體,對,是給機械人安裝。具體軟體的安裝以及初步通訊測試就不多做介紹了。

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

首先當然是tcp/ip的基礎部分,伺服器和客戶端。這裡將庫卡機械人作為客戶端,上位機作為伺服器進行通訊。

private void button1_click(object sender, eventargs e)

/// /// tcp放在後台執行緒

///

private void opentcp()

/// /// 建立tcp服務端並監聽

///

public void listen()//建立tcp服務端

catch (exception ex)

}/// /// 客戶端連線

///

///

public void onconnectrequest(iasyncresult ar)

//顯示客戶端傳送過來的資訊

}catch (exception ex)

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")

上位機服務端獲取到的資料是:

12345678

connectsensor

1然後對資料進行逐個元素的解析就可以了。要增加變數,只要對應在mxl檔案,機械人程式和上位機解析過程中新增就可以了。

上位機傳送到機械人:上位機將變數寫成xml格式,利用客戶端傳送到機械人中的xml檔案→機械人讀取xml檔案中的元素值到程式中的變數

寫成xml格式:

sendstr = sendstr + "false

";sendstr = sendstr + "

";然後是tcp傳送

/// /// 將字串傳送給機械人

///

///

private void sendtorobot(string str)

sendstr += tail;

//這些變數的某些中間父元素與前面的不同,所以另外寫

sendstr = sendstr + "false

"; sendstr = sendstr + "

"; string strdataline = sendstr;

trycatch (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)

然後就可以在機械人程式中使用,或者通過檢視變數值檢測是否正確

本例中的xml檔案和機械人程式檔案src由ethernetkrl軟體中自帶的測試例子修改而來。不用原例子的原因是,原例子只有程式檔案src而沒有資料檔案dat,程式裡的變數都是臨時變數,無法在示教器上查詢變數的值。所以新建了乙個程式,將原例子的變數定義放在dat資料檔案中,處理過程放在src程式檔案中。另外,對上位機傳送到機械人的元素有做一些刪改。

最後附上c#程式,和庫卡機械人裡的xml檔案,src檔案,dat檔案,連線:

C 上位機通過socket讀寫PLC

做上位機的同行應該有切實體會 由於某些廠家的通訊協議不開放的緣故,通訊是個很費勁的事,特別是和西門子的通訊。就我目前所知,通訊手段主要依賴於兩條路 a.opc,我們自己開發client端,server端借助simatic net 或者kepserver b.組態軟體,組態軟體就不說了,稍微會點程式設...

c 上位機開發3

從.net framework 2.0開始,c 提供了serialport類用於實現串列埠控制。命名空間 system.io.ports。其中詳細成員介紹參看msdn文件。下面介紹其常用的字段 方法和事件。1.常用字段 名稱說明 portname 獲取或設定通訊埠 baudrate 獲取或設定序列波...

C 上位機簡單使用

寫的比較簡單 破解時間限制的補丁 提取碼1123 如下 示例 opcserver objserver opcgroups objgroups opcgroup objgroup opcitems objitems array stritemids array lclienthandles array...