杜 彬
(山西職業(yè)技術學院,山西 太原 030006)
電氣設備的運行狀態(tài)控制是當前物聯(lián)網(wǎng)應用專業(yè)的重要技術領域之一,實現(xiàn)對物聯(lián)網(wǎng)控制系統(tǒng)的結構、工作原理以及運行機制的全過程現(xiàn)場模擬演示,對加強大學生的技術積累、提升對物聯(lián)網(wǎng)控制理論的理解能力有著重要的意義[1]?;诰W(wǎng)絡繼電器設備構建的物聯(lián)網(wǎng)控制系統(tǒng)在物聯(lián)網(wǎng)教學過程中的應用,為高校自主建設優(yōu)質(zhì)的物聯(lián)網(wǎng)教學環(huán)境、提升物聯(lián)網(wǎng)應用專業(yè)技術人才培養(yǎng)的工作效率和質(zhì)量提供了可靠的技術支持。
繼電器設備作為傳統(tǒng)的電路控制設備,被廣泛應用于自動化控制領域中,其工作原理是通過弱電信號操控電子開關的工作狀態(tài)間接完成對強電流電路的連接與斷開控制,以此控制各類電氣設備的電源電路的通斷狀態(tài)[2]。傳統(tǒng)的繼電器設備的控制信號為高低電平信號,在通過軟件控制時,需要編程實現(xiàn)由計算機指令到控制電平的轉(zhuǎn)換,同時還需要布設專用的線路,系統(tǒng)結構復雜且實現(xiàn)過程繁瑣。隨著計算機網(wǎng)絡技術與微型芯片技術的高速發(fā)展,網(wǎng)絡繼電器作為一種整合了網(wǎng)絡接口、微型處理器和電路控制器的新型設備,實現(xiàn)了通過網(wǎng)絡遠程接收控制信號的功能,無需布設專用的連接線路;同時微型處理器技術的引入,使網(wǎng)絡繼電器設備本身集成了從計算機應用層的指令到物理層的控制電平信號的復雜轉(zhuǎn)換功能,計算機程序僅需要通過網(wǎng)絡向繼電器設備發(fā)送遵循TCP協(xié)議制訂的控制指令集即可完成對繼電器上的各個電子開關的實時控制,更加便于實現(xiàn)對各類電氣設備的控制。
高校所開設的物聯(lián)網(wǎng)課程具有內(nèi)容覆蓋面廣、課程案例多且類型復雜的特征,因此在實訓教學中使用的物聯(lián)網(wǎng)控制系統(tǒng)應具備控制方式簡便化、架構模塊化、工作流程簡潔化的特點,使系統(tǒng)擁有足夠的靈活性與可擴展性,以便能夠根據(jù)不同階段課程內(nèi)容的變化對相應的功能進行快速調(diào)整[3]。同時,系統(tǒng)的設計還應充分考慮實訓課程建設的成本控制問題,盡量在現(xiàn)有的網(wǎng)絡環(huán)境與計算機硬件設備上完成系統(tǒng)核心模塊的部署與實施。
關于物聯(lián)網(wǎng)控制系統(tǒng)的功能需求分析如下:
1) 系統(tǒng)應具備同時接入并實時控制20個以上電氣設備的啟動或停止的能力,同時應具備進一步擴展設備接入數(shù)量的能力。
2) 系統(tǒng)的控制軟件模塊與硬件設備模塊應實現(xiàn)良好的低耦合性,軟件的控制指令應具備通用性,能夠根據(jù)硬件設備數(shù)量的變化靈活調(diào)整,硬件設備根據(jù)課程內(nèi)容所進行的調(diào)整與重組,不應引發(fā)軟件的重構。
3) 系統(tǒng)運行過程中,用戶對各個電氣設備的操作過程應能夠進行實時記錄和可靠存儲,以用于課后的總結和分析。
4) 系統(tǒng)的控制軟件模塊部署在服務器計算機中,控制指令通過RJ45接口接入以太網(wǎng)絡發(fā)送,基于局域網(wǎng)絡實現(xiàn)遠程實時控制電氣設備的功能。
2.1 物聯(lián)網(wǎng)控制系統(tǒng)模型的架構
本文所提出的物聯(lián)網(wǎng)控制系統(tǒng)的結構如圖1所示,由用戶模塊、服務模塊、控制模塊、設備模塊四部分構成。其中用戶模塊作為控制終端,為用戶提供設備控制指令的發(fā)送與操作日志的記錄功能。服務模塊由系統(tǒng)數(shù)據(jù)庫和實時監(jiān)測程序兩部分組成,用戶所發(fā)送的指令首先被記錄在數(shù)據(jù)庫中,再由實時監(jiān)測程序負責讀取并通過網(wǎng)絡向控制模塊發(fā)送TCP數(shù)據(jù)包??刂颇K由多臺網(wǎng)絡繼電器設備構成,網(wǎng)絡繼電器設備的數(shù)量根據(jù)設備模塊中的電氣設備數(shù)量靈活調(diào)整,控制模塊作為系統(tǒng)運行的核心,負責與設備模塊之間建立直接連接,接收并自動解析控制模塊發(fā)送的數(shù)據(jù)包,根據(jù)解析后的命令控制各電氣設備的電路通斷狀態(tài)。設備模塊由多臺電氣設備構成,電氣設備的類型與數(shù)量可根據(jù)物聯(lián)網(wǎng)課程內(nèi)容進行靈活的規(guī)劃與調(diào)整,以準確模擬不同的物聯(lián)網(wǎng)應用場景中的設備工作過程,各電氣設備的啟動電路接入到網(wǎng)絡繼電器所搭載的各個電子開關中,根據(jù)用戶模塊所發(fā)送的控制指令單獨進行啟動或停止操作。對于需要部署大量電氣設備來實現(xiàn)的復雜應用場景,可通過在控制模塊中增加網(wǎng)絡繼電器設備的方式提供更多的電子開關接口來完成。
圖1 物聯(lián)網(wǎng)控制系統(tǒng)模型架構圖
1) 用戶模塊中的指令發(fā)送與日志管理功能都基于JSP對數(shù)據(jù)庫的訪問機制實現(xiàn),首先通過JSP頁面向服務模塊提交指令代碼、發(fā)送時間等信息并存儲于數(shù)據(jù)庫的指令表中為服務模塊的指令處理操作提供數(shù)據(jù),而在生成操作日志時,將指令表中的相關內(nèi)容下載至JSP頁面中并顯示。
2) 服務模塊,本文選用MySQL數(shù)據(jù)庫在服務模塊中保存各種操作指令,基于Python設計的管理程序以1秒鐘為間隔不斷讀取數(shù)據(jù)庫中指令表的內(nèi)容,指令表的數(shù)據(jù)格式如表1所示。在發(fā)現(xiàn)有新的未執(zhí)行指令被提交時,立即對指令內(nèi)容進行解析,獲取網(wǎng)絡繼電器的IP地址、電子開關序號和開關狀態(tài)碼后,向指定的網(wǎng)絡繼電器IP地址發(fā)送TCP數(shù)據(jù)包,控制網(wǎng)絡繼電器中指定的電子開關的狀態(tài)。TCP數(shù)據(jù)包發(fā)送完成后,將數(shù)據(jù)表中該指令的處理狀態(tài)設置為1,表示為“已處理”。
表1 操作指令表構成
3) 控制模塊與設備模塊的實現(xiàn)原理如圖2所示,以物聯(lián)網(wǎng)控制系統(tǒng)中常見的驅(qū)動電機設備的啟動過程為例,首先將驅(qū)動電機的電源供電線路截斷后接入到網(wǎng)絡繼電器上的某一電子開關接口中,電子開關在默認情況下為斷開狀態(tài),此時驅(qū)動電機因供電線路中斷而處于靜止待命狀態(tài);當網(wǎng)絡繼電器的RJ45接口從網(wǎng)絡中接收到包含控制指令的TCP數(shù)據(jù)包后,自動解析數(shù)據(jù)包并獲取電子開關編號與狀態(tài)碼,開啟指定的電子開關使驅(qū)動電機的供電線路處于連通狀態(tài),從而啟動驅(qū)動電機并開始運轉(zhuǎn)。
圖2 控制模塊與設備模塊實現(xiàn)原理圖
本文所提出的物聯(lián)網(wǎng)控制系統(tǒng)模型方案中,網(wǎng)絡繼電器設備選用了海凌科電子的HLKSW16A型16路網(wǎng)絡繼電器,單個設備可提供16個電子開關,每個開關均支持220 V電壓和10 A電流的電路,能夠?qū)ΜF(xiàn)有的物聯(lián)網(wǎng)教學中所使用到的絕大部分電氣設備的供電電路進行控制。同時,該型設備支持修改本機IP地址,當物聯(lián)網(wǎng)系統(tǒng)中需要擴展接入更多的電氣設備時,在系統(tǒng)所在的以太網(wǎng)絡中接入多臺網(wǎng)絡繼電器設備并設置相應的IP地址即可。
系統(tǒng)數(shù)據(jù)庫采用MySQL設計,用戶模塊的數(shù)據(jù)訪問操作基于JSP-jdbc實現(xiàn),而控制模塊的數(shù)據(jù)訪問操作基于Python-MySQLdb實現(xiàn),向網(wǎng)絡繼電器發(fā)送TCP數(shù)據(jù)包的操作基于Python-Socket實現(xiàn)。
1) JSP中實現(xiàn)訪問MySQL數(shù)據(jù)庫的關鍵代碼
<%@ page import="java.sql.*"%> //調(diào)用數(shù)據(jù)庫訪問接口,*號表示調(diào)用該接口下的所有類
String Drstr="com.mysql.jdbc.Driver"; //指定
jdbc數(shù)據(jù)庫訪問驅(qū)動程序
Class.forName(Drstr); //加載驅(qū)動程序
Connection Cs=DriverManager.getConnection("數(shù)據(jù)庫訪問地址/庫名稱","賬號","密碼"); //連接數(shù)據(jù)庫
Statement Reqobj=Cs.createStatement(); //創(chuàng)建數(shù)據(jù)庫訪問對象
String Cmd="select fd1fd2…fdnfrom cmdtable"; //創(chuàng)建SQL命令,其中fd為字段序列
ResultSet datas=Reqobj.executeQuery(cmd); //執(zhí)行SQL命令并返回結果
2) Python中實現(xiàn)訪問MySQL數(shù)據(jù)庫的關鍵代碼
Import MySQLdb //調(diào)用數(shù)據(jù)庫訪問模塊
Cs=MySQLdb.connect("數(shù)據(jù)庫訪問地址","用戶名","密碼","庫名稱",charset=′utf8 ′) //連接數(shù)據(jù)庫
Crs=Cs.cursor() //創(chuàng)建數(shù)據(jù)庫游標
Crs.execute("select fd1fd2…fdnfrom cmdtable") //執(zhí)行SQL命令
Datas=Crs.fetchone() //從游標中獲取數(shù)據(jù)
3) Python中實現(xiàn)發(fā)送TCP數(shù)據(jù)包的關鍵代碼
import socket //調(diào)用socket模塊
Skobj=socket.socket(socket.AF_INET,socket.SOCK_STREAM) //創(chuàng)建Socket對象
Skobj.connect((′網(wǎng)絡繼電器IP地址′,′ 端口號′)) //建立與網(wǎng)絡繼電器之間的TCP連接
while True:
Cmd=′1201′ //設置控制指令:電子開關序號為12,狀態(tài)為1(開啟)
Skobj.send(cmd) //發(fā)送控制指令
Skobj.close()#關閉TCP連接
本文以網(wǎng)絡繼電器技術為基礎,整合了計算機網(wǎng)絡技術與軟件開發(fā)技術,構建了物聯(lián)網(wǎng)控制系統(tǒng)模型,系統(tǒng)采用模塊化的設計方案,在實現(xiàn)了對電氣設備的遠程控制功能的同時,還具備良好的結構擴展能力,便于在使用過程中根據(jù)教學內(nèi)容靈活調(diào)整系統(tǒng)架構與擴展硬件設備數(shù)量及種類。