摘要:為了實現Kinect采集并處理后的數據信息能夠實時傳輸與控制外圍設備,提出了基于以太網的Kinect與西門子PLC間數據采集傳輸與控制系統設計方案。方案采用OpenNI(開放式自然交互)框架提供的標準API函數接口,可以將Kinect采集的應用場景信息在計算機上進行圖像處理分析,并通過采用C#編程構建了基于以太網的通信方式,最終實現了與PLC模塊的數據交換、決策及控制。測試結果表明,系統數據傳輸速率高,通信可靠。
關鍵詞:Kinect;以太網;OpenNI;西門子PLC
一、引言
隨著工業和科技的快速發展,各行各業對測量技術提出了更高的要求,其中按接觸方式分類可分為兩類:一是接觸式測量,二是非接觸式測量。作為非接觸測量中最常見的測量方法,視覺測量系統主要分為CCD測量系統及激光測量系統。Kinect便是基于紅外測距技術的基礎上來進行深度測量,其攝像頭可以在有光照和其他條件的環境下獲取彩色圖像,與此同時獲取被測物體的深度圖像數據,以此進行識別等其他操作。
Programmable Logic Controller簡稱為PLC,擁有可用于編程的存儲器,以便實現內部存儲。其功能非常強大,作為一種可專門為工業生產設計的編程邏輯控制器,其利用數字運算操作,來執行用戶想要執行的命令,比如順序控制、定時、邏輯運算、算術運算和計數等等一些列功能,他可以利用數字指令的輸入結果或者輸出結果來實時指揮不同的儀器或者操控工業生產過程,PLC是工業生產控制的核心部分。一般來說,PLC與計算機之間的通信用的是RS-232/RS-485串行通信。然而,對于數據量大、實時性要求高、通信距離長的控制應用,很難滿足其通信需求,為了解決這一問題,我們將傳輸速度極快的以太網通訊系統應用到控制系統中,用以保證系統快速運行。
二、系統構建及原理
本文為了實現Kinect采集并處理后的數據信息能夠實時傳輸與控制外圍設備,我們提出了基于以太網的Kinect與PLC間數據采集傳輸與控制系統設計方案。方案中采用OpenNI框架提供的標準API函數接口,可以將Kinect采集的應用場景信息在計算機上進行圖像處理與分析,并通過C#編程構建了基于以太網的通信方式,從而實現了與PLC模塊的數據交換、決策及控制。圖2-1為具體的系統構建圖。
三、系統總體設計
1、Kinect簡介
Kinect主要由3D深度傳感器、紅外線發射器和RGB彩色攝像頭三部分組成。Kinect與普通攝像機的主要區別是其具有CMOS紅外傳感器,這款傳感器不易受到背景及光照的影響,可以感知周邊環境,以避免環境給圖像帶來的影響。CMOS紅外傳感器通過黑白光譜的形式來標度被測物體的深度值,當被測物體距離傳感器越遠,圖像相應位置越黑,反之則越白。傳感器將從每個點采集到的深度信息保存,從而形成一幅深度圖像,為了實時對周圍環境進行監測,傳感器生成深度圖像流的速度達到了每秒30幀[1]。圖1為Kinect外觀圖。
2、OpenNI應用框架
OpenNI(開放自然交互) 的工作原理是利用自然交互的API來定義用戶想要使用的應用程序,其可以用多種語言來進行編譯,并且支持在不同的平臺下工作。OpenNI的主要核心AP是由一組接口形成的,可以用來編寫常用的自然交互應用程序。OpenNI主要功能是形成一個標準的API來搭建橋梁使用戶很容易通過軟件或者中間軟件便能訪問和使用儀器設備,本次試驗我們采用目前最新版OpenNI 2.1[2],OpenNI架構圖如圖3-2所示。
3、以太網通訊模型
此通訊需要使用兩個Socket來實現基于以太網的Socket網絡通信,首先需要一個Socket在客戶端機上運行(稱為ClientSocket),其次需要另一個Socket在服務器端運行(稱為ServerSocket)。在計算機與西門子1200PLC 以太網模塊通信中,將以太網模塊作為服務器,將計算機作為客戶機。經參數配置好的以太網模塊運行時打開端口,監聽客戶機對服務器的請求,服務器端口接收到連接請求后開啟服務。
4、通信控制程序的設計
4.1 西門子以太網通信模塊的設置
在進行通訊前,需要對西門子PLC進行配置,本次系統設計采用的是西門子公司生產的1200系列CPU 1214C PLC,其集成以太網通訊模塊,在使用第三方程序對PLC進行讀寫之前,需要對PLC進行權限設置,允許遠程連接PLC,以TIA PORTAL V14為例,打開設備屬性-常規選項卡-Web服務器-防護與安全-勾選允許遠程對象的通信訪問。
4.2 基于Socket的以太網通信實現
在C#中,System.Net命名空間中的所有網絡訪問類都構建在Socket的實現之上,比如TCPClient、TCPListener和UDPClient類,為需要編寫網絡訪問的開發人員提供了接口的托管實現,實現在以太網下的高速穩定的數據讀寫功能,以下為實現過程:
①建立SOCKET連接
定義SOCKET連接
mySocket = newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint my_Ip = new IPEndPoint(IPAddress.Parse(ER_IP) ,ER_Port);
mySocket Connect(my_Ip);
②PLC連接
在TCP連接正常后,需要對PLC發送特定的指令才能實現讀寫功能,且只有接收到PLC正確回復后,才可以進行數據讀寫,讀寫操作需要注意數據類型和字節長度的轉換[3]。
mySocket.Send(d_Send,16,Socket_Flag1);
四、系統測試
為了檢測系統的實用性,搭建了測試平臺對系統進行功能測試,實現了對Kinect采集的數據進行處理分析并觸發西門子1214C PLC的控制輸出。試驗表明系統數據傳輸速率較高,具有可靠的通信結果和良好的穩定性。
五、結語
本文利用Kinect實時獲取被測物體的深度圖像數據,采用C#編程環境構建了基于以太網的通信方式,實現了Kinect與PLC模塊的數據交換、決策及控制。測試結果表明,系統數據傳輸速率高,通信可靠,可擴展性好。
參考文獻
[1]張荻.Kinect應用領域的探討[J].物流工程與管理,2012,34(06):39-41.
[2]任侃,曹越,吳杰.OpenNI體感應用開發實戰[M].北京:機械工業出版社,2015.
[3]程捷.三相異步電動機測試與分析系統的開發與研究[D].青島科技大學,2017.
作者簡介:劉洪序(1989.02-),男,河北人,碩士,從事機電控制研究工作。