国产黄a三级三级三级av在线看 _国产中文字幕在线_爱福利视频一区_午夜在线观看视频网站_国产精品久久一区_2001个疯子在线观看_神马影院一区二区_一区二区三区四区高清视频_色涩成人影视在线播放_五月婷婷在线观看视频

18621383605

上海市寶山區(qū)富聯(lián)一路98號(hào)6棟

側(cè)邊懸浮
主頁 > 新聞動(dòng)態(tài) > 行業(yè)新聞

上位機(jī)C#通過TCPIP和庫卡機(jī)器人通訊

2020-02-14 17:24:08

上位機(jī)C#通過TCPIP和庫卡機(jī)器人通訊

注:本文章文字、圖片部分來自網(wǎng)絡(luò)
版權(quán)歸原作者,侵刪。
您是否對(duì)將工業(yè)自動(dòng)化集成到您的設(shè)施中感興趣?如果是這樣,那么您應(yīng)該致電工業(yè)自動(dòng)化和集成領(lǐng)域的領(lǐng)導(dǎo)者工博士。工博士是包括FANUC,Yaskawa,KUKA,KawasakiABB在內(nèi)的多家不同機(jī)器人公司的認(rèn)證集成商。我們的員工致力于幫助您為您的行業(yè)和預(yù)算構(gòu)建和定制完美的自動(dòng)化系統(tǒng)。
因?yàn)楸疚牟皇墙榻B該軟件的安裝,所以就不多做解釋,下面的內(nèi)容默認(rèn)已經(jīng)能用自帶的測試軟件獲取庫卡機(jī)器人發(fā)送過來的數(shù)據(jù)。在此基礎(chǔ)上,我來說一下c#利用tcp/ip是如何跟庫卡機(jī)器人進(jìn)行通訊的.
 
首先當(dāng)然是TCP/IP的基礎(chǔ)部分,服務(wù)器和客戶端。這里將庫卡機(jī)器人作為客戶端,上位機(jī)作為服務(wù)器進(jìn)行通訊。
 
private void button1_Click(object sender, EventArgs e)
        {
            OpenTCP();
        }
        /// <summary>
        /// TCP放在后臺(tái)線程
        /// </summary>
        private void OpenTCP()
        {
            //新建一個(gè)委托線程
            ThreadStart myThreadDelegate = new ThreadStart(Listen);
            //實(shí)例化新線程
            myThread = new Thread(myThreadDelegate);
            myThread.Start();
 
 
        }
        /// <summary>
        /// 創(chuàng)建TCP服務(wù)端并監(jiān)聽
        /// </summary>
        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)聽
                newsock.Listen(10);
                //開始接受連接,異步。=
                newsock.BeginAccept(new AsyncCallback(OnConnectRequest), newsock);
            }
            catch (Exception ex)
            {
 
            }
 
        }
        /// <summary>
        /// 客戶端連接
        /// </summary>
        /// <param name="ar"></param>
        public void OnConnectRequest(IAsyncResult ar)
        {
            //初始化一個(gè)SOCKET,用于其它客戶端的連接
 
            server1 = (Socket)ar.AsyncState;
            Client[theIndex] = server1.EndAccept(ar);
            DateTimeOffset now = DateTimeOffset.Now;
            Byte[] byteDateLine = new Byte[65534];
            remote = Client[theIndex].RemoteEndPoint;
            //把連接成功的客戶端的SOCKET實(shí)例放入哈希表
            _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);
                    }
                    //顯示客戶端發(fā)送過來的信息
 
                }
                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;
                }
            }
 
        }
通過按鈕事件,創(chuàng)建后臺(tái)線程用于TCP服務(wù)端,創(chuàng)建服務(wù)端并開啟監(jiān)聽后,就可以等待機(jī)器人客戶端發(fā)來的消息了。
 
 庫卡機(jī)器人TCP通訊存在三種數(shù)據(jù)發(fā)送格式:固定長度字節(jié),任意長度字節(jié),和xml格式。個(gè)人感覺xml格式比較好用,這里介紹xml的通訊。
 
xml的通訊,其實(shí)可以分解為幾個(gè)步驟:
 
機(jī)器人發(fā)送到上位機(jī):機(jī)器人程序?qū)⒆兞炕蛘邤?shù)值寫入xml的元素中→機(jī)器人將xml發(fā)送通過服務(wù)端發(fā)送到上位機(jī)的服務(wù)端→服務(wù)端接受到數(shù)據(jù),按照xml的格式解析其中元素。
 
RET=EKI_Init("XmlCallBack")//初始化xml文件
RET=EKI_Open("XmlCallBack")//打開(相當(dāng)于客戶端請求連接)
//將變量或值寫入到xml文件的元素中
;FOLD Write data to connection
  ; Write frame to <LastPos X="" Y="" Z="" A="" B="" C="" />
  RET=EKI_SetFrame("XmlCallBack","Robot/Data/LastPos", TOOL_DATA[1])
  ; Write real to <ActPos X="" />
  RET=EKI_SetReal("XmlCallBack","Robot/Data/ActPos/@X", 1000.12)
  ; Write int to <Status></Status>
  RET=EKI_SetInt("XmlCallBack","Robot/Status", 12345678)
  ; Write string to <Mode></Mode>
  RET=EKI_SetString("XmlCallBack","Robot/Mode","ConnectSensor")
  ; Write bool to <LightOn></LightOn>
  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ù)是:
 
<Robot><Data><LastPos X="483.980011" Y="7.210000" Z="239.869995" A="0.000000" B="0.000000" C="0.000000"></LastPos><ActPos X="1000.119995"></ActPos></Data><Status>12345678</Status><Mode>ConnectSensor</Mode><RobotLamp><GrenLamp><LightOn>1</LightOn></GrenLamp></RobotLamp></Robot>
然后對(duì)數(shù)據(jù)進(jìn)行逐個(gè)元素的解析就可以了。要增加變量,只要對(duì)應(yīng)在mxl文件,機(jī)器人程序和上位機(jī)解析過程中添加就可以了。
 
上位機(jī)發(fā)送到機(jī)器人:上位機(jī)將變量寫成xml格式,利用客戶端發(fā)送到機(jī)器人中的xml文件→機(jī)器人讀取xml文件中的元素值到程序中的變量
 
寫成xml格式:
 
sendstr = sendstr + "<Sensor><Status><IsActive>FALSE</IsActive></Status></Sensor>";
sendstr = sendstr + "<Sensor><Read><xyzabc X='10.0' Y='20.0' Z='30.0' A='40.0' B='50.0' C='60.0'></xyzabc></Read</Sensor>";
 
然后是tcp發(fā)送
 
/// <summary>
        /// 將字符串發(fā)送給機(jī)器人
        /// </summary>
        /// <param name="str"></param>
        private void sendToRobot(string str)
        {
            string sendstr;
            str = str.Replace(" ", "");
            string[] fields = str.Split(',');
            string header = "<Sensor>", tail = "</Sensor>";//變量xml文件中的父元素
 
            sendstr = header;
            //設(shè)置xml文件中變量的值,格式:<變量名>變量值</變量名>
            foreach (string item in fields)
            {
                string[] arr = item.Split('=');
                sendstr += "<" + arr[0] + ">" + arr[1] + "</" + arr[0] + ">";
            }
            sendstr += tail;
            //這些變量的某些中間父元素與前面的不同,所以另外寫
            sendstr = sendstr + "<Sensor><Status><IsActive>FALSE</IsActive></Status></Sensor>";
            sendstr = sendstr + "<Sensor><Read><xyzabc X='10.0' Y='20.0' Z='30.0' A='40.0' B='50.0' C='60.0'></xyzabc></Read></Sensor>";
            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ī)器人程序中使用,或者通過查看變量值檢測是否正確
 
本例中的xml文件和機(jī)器人程序文件src由ETHERNETKRL軟件中自帶的測試?yán)有薷亩鴣怼2挥迷拥脑蚴牵又挥谐绦蛭募rc而沒有數(shù)據(jù)文件dat,程序里的變量都是臨時(shí)變量,無法在示教器上查詢變量的值。所以新建了一個(gè)程序,將原例子的變量定義放在dat數(shù)據(jù)文件中,處理過程放在src程序文件中。另外,對(duì)上位機(jī)發(fā)送到機(jī)器人的元素有做一些刪改。
————————————————
版權(quán)聲明:本文為CSDN博主「千年de小妖」的原創(chuàng)文章,
原文鏈接:https://blog.csdn.net/qq_29221215/article/details/95759479
在此處聯(lián)系我們或致電186-1656-9600與我們聯(lián)系,以獲取有關(guān)庫卡機(jī)器人解決方案和快速簡便的報(bào)價(jià)。
了解更多:庫卡機(jī)器人

美女免费精品视频在线观看| 欧美国产日韩在线| 精品视频在线观看一区二区三区| 国产国产人免费视频成69堂| 成人免费网站视频ww| 亚洲第一色在线| 久久久久久久免费视频| 精品久久久久久中文字幕一区| 国产一区二区精品久久91| 精品视频一区二区三区免费| 99久久精品费精品国产一区二区| 欧美大片aaaa一级毛片| 国产视频在线免费观看| 国产一区二区福利久久| 欧美激情伊人| 成人a级高清视频在线观看| 国产麻豆精品| 在线观看成人网| 日日爽天天| 黄视频网站在线免费观看| 中文字幕一区二区三区 精品| 日本在线www| 香蕉视频久久| 黄视频网站在线免费观看| 国产一区二区精品久久91| 国产原创中文字幕| 天天色成人网| 你懂的日韩| 在线观看成人网| 台湾毛片| 精品国产三级a∨在线观看| 日韩女人做爰大片| 亚洲第一页色| 久久国产影院| 欧美激情一区二区三区视频高清 | 成人高清视频在线观看| 久久国产精品只做精品| 日韩一级黄色片| 亚洲第一色在线| 国产一区二区高清视频| a级毛片免费观看网站| 欧美一级视频高清片| 国产成a人片在线观看视频| 色综合久久天天综合观看| a级黄色毛片免费播放视频| 一级毛片视频免费| 欧美一区二区三区在线观看| 免费的黄视频| 精品视频在线观看视频免费视频| 日韩免费片| 精品久久久久久中文| 99久久视频| 久久成人性色生活片| 一级女性大黄生活片免费| 精品在线观看国产| 午夜久久网| 免费的黄色小视频| 91麻豆国产福利精品| 国产精品1024永久免费视频| 亚洲第一色在线| 夜夜操网| 韩国毛片| 国产一区免费在线观看| 久久99中文字幕| 久久久久久久久综合影视网| 精品国产香蕉在线播出| 国产成人精品综合| 国产成人精品综合久久久| 精品国产一区二区三区免费 | 韩国毛片免费大片| 成人免费一级纶理片| 美女免费毛片| 日韩在线观看免费| 免费的黄视频| 亚洲 欧美 成人日韩| 欧美大片毛片aaa免费看| 韩国毛片| 亚洲不卡一区二区三区在线| 日韩中文字幕一区| 天天做人人爱夜夜爽2020| 韩国毛片基地| 色综合久久天天综线观看| 精品在线观看一区| 久久精品道一区二区三区| 香蕉视频久久| 91麻豆精品国产自产在线| 韩国毛片免费| 日日爽天天| 国产视频一区在线| 天天做人人爱夜夜爽2020毛片| 亚洲精品中文字幕久久久久久| 精品久久久久久影院免费| 91麻豆tv| 亚洲www美色| 999精品视频在线| 免费的黄色小视频| 99色视频在线观看| 可以免费看污视频的网站| 青青久久精品| 色综合久久天天综合| 国产成人精品综合久久久| 国产精品1024永久免费视频| 亚洲女人国产香蕉久久精品| 国产一区二区精品久久91| 久久精品人人做人人爽97| 韩国三级香港三级日本三级la | 国产麻豆精品视频| 国产不卡福利| 久久精品成人一区二区三区| 欧美国产日韩精品| 亚洲天堂在线播放| 国产91精品一区| 午夜在线影院| 99久久精品国产国产毛片| 青青久热| 免费一级片在线观看| 日日爽天天| 亚欧成人乱码一区二区| 欧美大片aaaa一级毛片| 国产成人精品综合| 久久99这里只有精品国产| 亚洲www美色| 国产原创视频在线| 黄色福利| 日韩在线观看免费| 日日夜夜婷婷| 九九精品久久久久久久久| 九九干| 精品久久久久久免费影院| 日韩在线观看视频免费| 欧美大片aaaa一级毛片| 色综合久久天天综合| 精品国产亚一区二区三区| 可以免费在线看黄的网站| 国产国产人免费视频成69堂| 国产精品1024在线永久免费| 国产视频一区二区在线播放| 国产高清视频免费观看| 国产原创视频在线| 日日夜夜婷婷| 99久久视频| 欧美a级大片| 青青久久网| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日本免费看视频| 日韩女人做爰大片| 亚洲 男人 天堂| 国产高清在线精品一区a| 日本伦理黄色大片在线观看网站| 免费国产在线视频| 国产亚洲精品成人a在线| 亚洲精品影院一区二区| 美女免费精品视频在线观看| 午夜欧美成人久久久久久| 韩国毛片免费大片| 国产91素人搭讪系列天堂| 色综合久久天天综合观看| 日韩av片免费播放| 国产91精品一区| 国产一区二区精品久久91| 精品视频一区二区三区| 免费一级片在线观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 久久国产精品只做精品| 日本特黄特黄aaaaa大片| 日韩专区一区| 色综合久久天天综合观看| 国产韩国精品一区二区三区| 999久久66久6只有精品| 色综合久久天天综合| 免费毛片播放| 91麻豆精品国产综合久久久| 国产一区二区精品久| 午夜精品国产自在现线拍| 久久福利影视| 亚飞与亚基在线观看| 日韩男人天堂| 日韩中文字幕在线观看视频| 精品国产一级毛片| 国产精品自拍在线观看| 香蕉视频一级| 91麻豆国产福利精品| 成人免费观看的视频黄页| 日韩女人做爰大片| 精品国产一级毛片| 国产美女在线一区二区三区| 欧美1区| 尤物视频网站在线观看| 九九干| 精品国产三级a| 99久久视频| 久久国产影视免费精品| 尤物视频网站在线观看| 国产国语对白一级毛片| 色综合久久久久综合体桃花网| 久久国产精品自由自在| 欧美日本二区| 国产原创视频在线| 色综合久久天天综合观看| 国产国语在线播放视频|