張喜紅 王玉香
(亳州職業(yè)技術學院, 安徽 亳州 236800)
隨著計算機技術的發(fā)展,多媒體教室的應用逐漸普及[1]。計算機、投影機是學校多媒體教室必備的基礎性硬件設備,這類設備大多使用壽命有限、配件價格較高。如,普通投影機燈泡的使用壽命僅4 000 h左右,激光投影機燈泡的使用壽命僅20 000 h左右,且使用時若操作不當極易導致燈泡損壞[2]。在學校多媒體教室設備日常管理中,規(guī)范使用,按需開關機,有助于延長設備使用壽命。目前,大多學校采用多媒體教室外配專屬中控設備的方式來實現(xiàn)統(tǒng)一管理。亳州職業(yè)技術學院即采用此種方式在實際使用當中發(fā)現(xiàn)存在以下問題:中控設備的配置增加了建設成本;中控設備的接入增加了系統(tǒng)施工、布線的復雜程度;后期維修、維護相對困難。為了避免這些問題,我們基于Python語言重新設計了一套多媒體教室管理系統(tǒng)。Python語言具有模塊豐富、語法簡潔、跨平臺性能較好等優(yōu)勢[3],因此基于Python的系統(tǒng)穩(wěn)定性良好,使用成本不高。
多媒體教室管理系統(tǒng)的硬件由總控計算機、路由器、各教室計算機、投影機等組成(見圖1) 。教室的多媒體設備包括教室計算機和投影機,各教室計算機支持網(wǎng)卡喚醒啟動,教室計算機與投影機之間通過RS232串行總線連接,教室計算機可通過串行總線向投影機發(fā)送控制指令,最終實現(xiàn)投影機的開啟與關閉。每臺教室計算機和總控計算機通過路由器連接,形成局域網(wǎng)。
圖1 多媒體教室管理系統(tǒng)硬件組成結構
開始管理系統(tǒng)設計之前,首先需確定以下問題:(1) 采用什么方式控制各教室計算機的自動開啟和關閉;(2) 確定課表分析功能是由教室計算機實現(xiàn),還是由總控計算機實現(xiàn);(3) 如何控制投影機按需、按時完成開啟和關閉等操作。
現(xiàn)有管理方式是通過外配中控硬件來實現(xiàn)教室計算機的自動開啟和關閉等操作。對于教室計算機,是通過斷電器聯(lián)接計算機電源開機觸發(fā)線實現(xiàn)計算機的開關機控制,長期使用對硬件的損傷較大。對于投影機,是通過單片機模塊的串口通信實現(xiàn)控制,且大多采用無應答檢查控制方式,可靠性低。因此,省去中控設備,并實現(xiàn)自動控制是系統(tǒng)改造的重點工作。
當前各教室計算機支持網(wǎng)卡喚醒功能,因此,在不額外增加設備的情況下,各教室計算機的開機操作可通過網(wǎng)卡遠程喚醒來實現(xiàn)。如果由總控計算機完成所有課表的分析,并有針對性地實時喚醒各教室計算機,將導致總控計算機的運算分析工作量過大。為了保證實時性,總控計算機應滿足較高的硬件配置要求。為了控制改造成本,課表分析任務、投影機的開關機控制都由當前各教室計算機來完成。
基于以上考慮,確定系統(tǒng)工作流程:
(1) 總控計算機依據(jù)當前季度的作息時間,在每節(jié)課上課前5 min內(nèi)向全校多媒體教室發(fā)送網(wǎng)絡喚醒開機指令,開啟各多媒體教室計算機。
(2) 各多媒體教室計算機開機后,運行程序,讀取并分析本地存放的本教室課表文件。若當前未安排課程,則執(zhí)行計算機的關機指令,立即關閉本教室計算機。
(3) 若當前時段安排有課程,則通過串口開啟投影機,并以一定的時間間隔周期性檢查是否已到下課時間。若下課時間到,就先通過串口向投影機發(fā)送關機指令,關閉投影機,然后執(zhí)行計算機關機指令,立即關閉本教室計算機。
總控計算機的主要任務是依據(jù)當前季度的作息時間,在每節(jié)課前通過網(wǎng)絡喚醒技術提前啟動多媒體教室計算機。實現(xiàn)這一功能,應首先確定開機時間節(jié)點的獲取方式,然后完成網(wǎng)絡喚醒功能的程序設計。開機時間節(jié)點通過讀取Excel文件得到,以適應上課時間的變化。首先,將各節(jié)次上課時間與提前開機時間設置值按圖2所示格式存放于Excel文件中,待總控端程序啟動后,通過Python語言中xlrd模塊的相應函數(shù)將Excel 文件中的開機時間列表文件讀入;接著,程序駐留于后臺保持運行,其間按照一定的時間間隔,通過Python語言中time模塊的time.localtime()方法,周期性提取系統(tǒng)時間,并與從Excel文件中讀入的時間安排進行比對,若相符即可通過網(wǎng)絡喚醒技術遠程啟動多媒體教室計算機。通過Python語言中xlrd模塊讀取圖2所示Excel文件,以獲取上課時間節(jié)點。
圖2 上課時間安排
函數(shù)代碼如下:
def Read_Class_time(class_path):#讀取本季度各節(jié)的上課時間
# class_path為表格文件的存放路徑
data=xlrd.open_workbook(class_path)
table=data.sheets()[0]#讀取表格文件的Sheet1表
# 獲取Sheet1表的第2列數(shù)據(jù),得到開機時間節(jié)點數(shù)據(jù)
Class_time=table.col_values(1)
# 獲取Sheet1表的第3列的第1個數(shù)據(jù),得到提前開機時間值
Difference_time =table.col(2)[0].value
# 計算開機時間,并把開機時間轉化為以“時”為單位的時間列表
value_list = []
for t in range(0,10):
h=int(24*3600*Class_time[t]/3600)#時
m=int(24*3600*Class_time[t]%3600/60)#分
#以“時”為單位整合時間列表,便于與系統(tǒng)時間比較
value=h+m/60.0-Difference_time/60.0
value_list.append(value)
return value_list #返回開機時間列表
通過Python語言time模塊獲取總控計算機系統(tǒng)時間,其函數(shù)代碼如下:
def get_current_time():#獲取當前電腦時間
current_time=list(time.localtime())#獲取總控計算機系統(tǒng)時間
hour=current_time[3]#提取“時”
minute=current_time[4]#提取“分”
value=hour+minute/60.0#統(tǒng)一變換為以“時”為單位的數(shù)據(jù),以便后續(xù)比較
return value
網(wǎng)絡喚醒啟動,是由總機通過網(wǎng)絡對各分機傳送規(guī)定內(nèi)容的編碼包來實現(xiàn),編碼包用16進制格式表示為:“FF FF FF FF FF FF +16次目標機MAC地址”。同時,網(wǎng)絡喚醒具有明顯的廣播特征,通常采用UDP協(xié)議來實現(xiàn)[4-5]。通過Python提供的socket模塊,簡單配置參數(shù)后便可實現(xiàn)UDP網(wǎng)絡通信[6]。采用Python設計網(wǎng)絡喚醒功能,其函數(shù)代碼如下:
import socket#導入模塊
import binascii
#ip參數(shù)為主機IP地址,PORT為通信端口號,MAC_List為各目標機MAC地址列表
def UDP_Broadcast_Tx(IP,POTR,MAC_List):
#初始化“套接字”為UDP連接
my_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
my_socket.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
#廣播各目標機喚醒數(shù)據(jù)包
for i in mac:
#構造各目標機的開機魔術數(shù)據(jù)包
data=binascii.unhexlify(′FF′ * 6 + i * 16)
#發(fā)送數(shù)據(jù)包
my_socket.sendto(data,(ip,port))
my_socket.close()#關閉網(wǎng)絡連接
教室計算機程序的功能是,依據(jù)本教室的課表按時開關投影機。具體的實現(xiàn)過程如下:
(1) 將本教室的課表按圖3所示模板來設計,存放于教室計算機本地磁盤中。
辛迪·舍曼(Cindy Sherman)、杰夫·昆斯(Jeff Koons)和托恩·霍克斯(Teun Hocks)親自步入鏡頭前;霍埃爾-彼得·威特金(Joel-Peter Witkin)和喬·甘茨(Joe Gantz)則創(chuàng)造出不時使人震驚的敘述體場景。阿瑟·特雷斯(Arthur Tress)和戴維·萊維索爾(David Levinthal)長于縮微場景;卡魯姆·科爾萬(Calum Colvin)和維克托·施勒格(Victor Schrager)則擅長靜物攝影。
(2) 教室計算機被喚醒啟動后,自動啟動教室計算機端的程序,通過Python的datetime模塊,首先獲取系統(tǒng)的當前日期與時間,并提取分解出當前周次與時間。
(3) 通過xlrd模塊的相關函數(shù),讀取課表文件中的節(jié)次時間安排,并與當前時間作比對,得到當前時間對應節(jié)次。
(4) 以周次與節(jié)次為行、列索引讀取課表信息。若當前單元格為空,則將課程標記變量置為‘0’,代表無課,于是執(zhí)行關閉計算機指令;若當前單元格不為空,則將課程標記置為‘1’,代表有課,于是執(zhí)行開啟投影機指令。
(5) 程序在后臺駐留,并以一定的時間間隔周期性地比較系統(tǒng)時間與課表文件中的下課時間。若下課時間到,則依次執(zhí)行關閉投影機和關閉計算機的指令。其中,計算機的關機操作通過os模塊的os.system(“shutdown -s -t 0”)方法實現(xiàn)。
圖3 教室課表模板
鑒于原有教室計算機與投影機已布設有串行連接線,本次設計中教室計算機對投影機的控制將通過RS232串行總線來實現(xiàn)。通常,投影機在出廠時標配RS232串口,并提供串口控制指令碼及參數(shù)表。如日電NP-CR3125X投影機的通信波特率為38 400,串行口開、關機指令碼分別是02-00-00-00-00-02、02-01-00-00-00-03,且控制成功后會返回應答碼,開、關機的應答碼分別是22-00-01-20-00-43、22-01-01-20-00-44。
Python語言中實現(xiàn)串口控制的模塊是serial模塊。應用serial模塊設計串口控制程序,主要內(nèi)容包括串口的初始化和串口的發(fā)送與接收。
(1) 串口的初始化。串口的初始化內(nèi)容主要包括端口號及波特率、位長、停止位等參數(shù)的設置。
初始化與指令發(fā)送函數(shù)代碼如下:
#串口初始化函數(shù)
def serial_init(COM,Baudrate,ByteSize,Stopbits,Timeout):
serial_COM = serial.Serial(COM)#設置端口號,如:COM=′COM1′
serial_COM.setBaudrate(Baudrate)#設置波特率,如:Baudrate=38 400
serial_COM.setByteSize(ByteSize)#設置位數(shù),如:ByteSize=8
serial_COM.setStopbits(Stopbits)#設置停止位,如:Stopbits=1
serial_COM.setTimeout(Timeout)#設置接收超時,如:Timeout=0.5 s
print serial_COM.portstr
time.sleep(1)#等1 s穩(wěn)定
returnserial_COM
#串口開、關機指令發(fā)送函數(shù)
def serial_Tx(serial_COM,Command):
for i in range(1,3):#最多發(fā)3次,未收到應答提示控制失敗
# 通過串口發(fā)送控制命令
serial_COM.write(Command)#開機指令:Command=″x02x00x00x00x00x02″.encode(′utf-8′)
#關機指令:Command=″x02x01x00x00x00x03″.encode(′utf-8′)
if(serial_COM.read(6)!=″ ″):#接收投影機返回的6字節(jié)應答信號
print(″投影機控制成功!″)
return 1
print(″投影機控制成功!″)
showinfo(title=′提示′,message=′程序控制可能出錯,請您用遙控器操控投影機′)
return 0
在Pycharm 2016.3.3開發(fā)環(huán)境下,采用python 2.7版本設計、調(diào)試總控計算機與教室計算機程序;然后,再借助py2exe將所設計程序編譯打包成exe可執(zhí)行文件[7],安裝對應的總控計算機與106臺教室計算機??偪赜嬎銠C與教室計算機的CPU型號為Intel(R) Core(TM) i3-4160 3.6GHz,內(nèi)存大小為4 GiB,操作系統(tǒng)為Win7-64位。通過Windows系統(tǒng)自帶任務計劃程序安排功能,將總控計算機與教室計算機的exe程序設為開機自啟動模式。最后,進入教室計算機的BIOS系統(tǒng),開啟允許網(wǎng)絡喚醒功能。在為期1周的運行測試過程中,總控計算機能夠?qū)崟r喚醒106臺教室計算機。其中,有105臺計算機能夠按照課表實時開啟和關閉投影機;有1臺計算機,因其系統(tǒng)時間設置有誤,未能按課表安排的上課時間正常開機。
我們以亳州職業(yè)技術學院現(xiàn)有多媒體教室布設結構為基礎,針對外配中控管理方式維護不便的問題,設計了基于Python的多媒體教室管理系統(tǒng)。在該系統(tǒng)中應用了Python的datetime 、xlrd 、socket等模塊,使總控計算機可以依照Excel文件中預設的時間節(jié)點喚醒各教室計算機;同時,應用了Python的serial等模塊,使教室計算機可以通過串口按照Excel課表安排完成按時開關機的工作。在實際測試中,系統(tǒng)運行良好,在一定程度上減少了教室管理員的工作量。所設計的軟件是以本地計算機系統(tǒng)時間為操控設備的基準時間,因此在實際應用中需注意主板電池、系統(tǒng)時間設置的匹配性。