范 高 杰
(深圳市華陽國際工程設(shè)計(jì)股份有限公司,廣東 深圳 518045)
RFID(Radio Frequency Identification)即無線射頻識別技術(shù),通過無線射頻方式進(jìn)行非接觸雙向數(shù)據(jù)通信,利用無線射頻方式對記錄媒體進(jìn)行讀寫,從而實(shí)現(xiàn)識別目標(biāo)和數(shù)據(jù)交換[1]。與日常生活中常見的二維碼相比,RFID標(biāo)簽具有可寫的優(yōu)勢,即RFID標(biāo)簽可以獨(dú)立儲存數(shù)據(jù)。RFID讀寫設(shè)備通常為手持式設(shè)備,國內(nèi)目前應(yīng)用較多的是采用運(yùn)行Android系統(tǒng)的手機(jī)集成RFID讀寫器的方式,實(shí)現(xiàn)對RFID標(biāo)簽的讀寫。Autodesk Revit是建筑結(jié)構(gòu)設(shè)計(jì)中的常用設(shè)計(jì)軟件,Revit軟件具有強(qiáng)大的建筑、結(jié)構(gòu)、機(jī)電全專業(yè)設(shè)計(jì)功能,能夠精確地設(shè)計(jì)和建造高效的建筑、結(jié)構(gòu)、機(jī)電等各專業(yè)模型,并支持各專業(yè)間協(xié)同工作。同時Revit軟件提供了豐富的二次開發(fā)接口(RevitAPI),通過API接口,用戶可以對Revit軟件的功能進(jìn)行擴(kuò)充[2]。
本文實(shí)現(xiàn)的裝配式構(gòu)件管理系統(tǒng)開發(fā)分為兩個部分:PC端以C#作為開發(fā)語言,通過對Revit軟件進(jìn)行二次開發(fā),實(shí)現(xiàn)了將Revit軟件作為管理系統(tǒng)的服務(wù)端的功能;RFID讀寫設(shè)備,以Java作為開發(fā)語言,通過RFID讀寫開發(fā)包,基于Android系統(tǒng)開發(fā)了移動端APP,完成RFID標(biāo)簽的讀寫,并與Revit軟件服務(wù)器端進(jìn)行數(shù)據(jù)交互,從而實(shí)現(xiàn)對Revit模型的遠(yuǎn)程訪問。
移動端APP系統(tǒng)界面見圖1。系統(tǒng)流程圖見圖2。
Autode Revit軟件允許用戶通過應(yīng)用程序編程接口(Application Programming Interface,API)對Revit中的模型進(jìn)行信息讀寫,開發(fā)人員可通過任何與Microsoft.NET Framework兼容的語言完全訪問Revit API[3]。
具體到裝配式構(gòu)件管理系統(tǒng),需要解決2個主要問題:
1)將Revit軟件作為服務(wù)器端,客戶端能夠通過遠(yuǎn)程訪問的方式,對Revit模型中數(shù)據(jù)進(jìn)行讀寫;
2)Revit能夠根據(jù)客戶端的查詢指令,高亮顯示被查詢構(gòu)件,并展示被查詢構(gòu)件的屬性信息。
本文以C#為例,對上述問題的解決方案如下:
1)利用RevitAPI中的IExternalApplication接口中OnStartup函數(shù),在Revit軟件啟動過程中加載服務(wù)器端插件,再通過在插件中注冊自定義命令,在命令中實(shí)現(xiàn)基于Revit模型的服務(wù)啟動和終止[4]。注冊命令主要代碼如下:
PushButton pushButtonRead =
pannelReadWrite.AddItem(new
PushButtonData("pushButtonDataRead", "啟動服務(wù)", AddInPath,
"AddIn_RFIDSever.CmdRFIDSeverQuery")) as PushButton;
pushButtonRead.LargeImage = new
BitmapImage(new
Uri(Path.Combine(ButtonIconsFolder, "Query.png"), UriKind.Absolute));
pushButtonRead.ToolTip = "啟動服務(wù)";
啟動監(jiān)聽服務(wù)主要代碼如下:
public void Start(){
var socketThread = new Thread(() =>{
Socket socket = new
Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
IPAddress ip =
IPAddress.Parse("192.168.1.35");
IPEndPoint iep = new
IPEndPoint(IPAddress.Any, 8045);
socket.Bind(iep);
socket.Listen(6);
socket.BeginAccept(new
AsyncCallback(Accept), socket);});
socketThread.Start();
Console.WriteLine("服務(wù)器已就緒,
IP:192.168.1.35,端口號:8045 ");
}
2)Revit提供了注冊空閑事件的機(jī)制,服務(wù)端通過解析客戶端的指令,根據(jù)編號過濾出需要查詢的構(gòu)件Id,加入到Revit的選擇集,實(shí)現(xiàn)構(gòu)件的自動高亮選中,注冊空閑事件主要代碼如下:
void SubscribeToIdling(UIApplication uiapp){
if (m_hIdling == null){
m_hIdling = new
EventHandler
uiapp.Idling += m_hIdling;
}
}
加入選擇集主要代碼如下:
void addSelection(ElementId id){
Selection selection =
uiApp.ActiveUIDocument.Selection;
List
List
aryId.Add(id);
selection.SetElementIds(nullListId);
}
移動端開發(fā)主要分為三部分:APP界面開發(fā)、RFID標(biāo)簽讀寫、網(wǎng)絡(luò)數(shù)據(jù)交互。APP交互界面利用Android系統(tǒng)SDK開發(fā)包完成。RFID標(biāo)簽讀寫通過移動手持設(shè)備硬件服務(wù)商提供的二次開發(fā)包完成。與服務(wù)器的數(shù)據(jù)交互通過Json數(shù)據(jù)包完成。
1)交互主界面從Activity類派生,服務(wù)器設(shè)定、運(yùn)輸日期設(shè)定、生產(chǎn)日期設(shè)定、查詢等子界面從AppCompatActivity派生,通過重載onCreate(Bundle savedInstanceState)實(shí)現(xiàn)界面布局、UI交互。
2)將硬件服務(wù)商提供的RFID標(biāo)簽讀寫開發(fā)包導(dǎo)入到開發(fā)環(huán)境,通過開發(fā)包里的接口實(shí)現(xiàn)對RFID標(biāo)簽的讀寫,設(shè)備初始化主要代碼如下:
public void InitUHF() {
android.hardware.uhf.magic.reader.init(C5U);
android.hardware.uhf.magic.reader.Open(C5U);
if
(reader.SetTransmissionPower(1950) != 0x11)
{
reader.SetTransmissionPower(1950);
}
DevBeep.init(App.this);
}
3)與服務(wù)器端數(shù)據(jù)交互中讀取Json數(shù)據(jù)主要代碼如下:
JSONObject getJsonData(){
JSONObject json = new JSONObject();
try{
json.put("Method", "SetInstallDate");
json.put("LabelId",editLabelId.getText().toString
());
json.put("InstallDate",editInstallDate.getText().to
String());
}
catch (JSONException e){
e.printStackTrace();
}
return json;
}
以某裝配式輕鋼住宅為例,系統(tǒng)的主要工作流程如下:
1)Revit中啟動服務(wù)端;2)移動端設(shè)置RFID標(biāo)簽中的相關(guān)信息,并更新Revit中的模型信息,如圖3所示;3)移動端通過掃描RFID標(biāo)簽,查詢關(guān)鍵信息,并在Revit中高亮顯示相關(guān)構(gòu)件及其屬性信息,如圖4所示。工程實(shí)例表明,系統(tǒng)能夠?qū)崿F(xiàn)對RFID標(biāo)簽的讀寫操作,并且能夠根據(jù)移動端的查詢指令,和Revit模型進(jìn)行數(shù)據(jù)交互。
本文采用RFID與Revit相結(jié)合的方式,詳細(xì)介紹了裝配式構(gòu)件管理系統(tǒng)的開發(fā)流程,通過該系統(tǒng)能夠?qū)崿F(xiàn)對裝配式建筑構(gòu)件全生命周期中的精細(xì)化管理,對同類型的工程項(xiàng)目具有借鑒意義。