范 高 杰
(深圳市華陽國際工程設計股份有限公司,廣東 深圳 518045)
RFID(Radio Frequency Identification)即無線射頻識別技術,通過無線射頻方式進行非接觸雙向數據通信,利用無線射頻方式對記錄媒體進行讀寫,從而實現識別目標和數據交換[1]。與日常生活中常見的二維碼相比,RFID標簽具有可寫的優勢,即RFID標簽可以獨立儲存數據。RFID讀寫設備通常為手持式設備,國內目前應用較多的是采用運行Android系統的手機集成RFID讀寫器的方式,實現對RFID標簽的讀寫。Autodesk Revit是建筑結構設計中的常用設計軟件,Revit軟件具有強大的建筑、結構、機電全專業設計功能,能夠精確地設計和建造高效的建筑、結構、機電等各專業模型,并支持各專業間協同工作。同時Revit軟件提供了豐富的二次開發接口(RevitAPI),通過API接口,用戶可以對Revit軟件的功能進行擴充[2]。
本文實現的裝配式構件管理系統開發分為兩個部分:PC端以C#作為開發語言,通過對Revit軟件進行二次開發,實現了將Revit軟件作為管理系統的服務端的功能;RFID讀寫設備,以Java作為開發語言,通過RFID讀寫開發包,基于Android系統開發了移動端APP,完成RFID標簽的讀寫,并與Revit軟件服務器端進行數據交互,從而實現對Revit模型的遠程訪問。
移動端APP系統界面見圖1。系統流程圖見圖2。

Autode Revit軟件允許用戶通過應用程序編程接口(Application Programming Interface,API)對Revit中的模型進行信息讀寫,開發人員可通過任何與Microsoft.NET Framework兼容的語言完全訪問Revit API[3]。
具體到裝配式構件管理系統,需要解決2個主要問題:
1)將Revit軟件作為服務器端,客戶端能夠通過遠程訪問的方式,對Revit模型中數據進行讀寫;
2)Revit能夠根據客戶端的查詢指令,高亮顯示被查詢構件,并展示被查詢構件的屬性信息。
本文以C#為例,對上述問題的解決方案如下:
1)利用RevitAPI中的IExternalApplication接口中OnStartup函數,在Revit軟件啟動過程中加載服務器端插件,再通過在插件中注冊自定義命令,在命令中實現基于Revit模型的服務啟動和終止[4]。注冊命令主要代碼如下:
PushButton pushButtonRead =
pannelReadWrite.AddItem(new
PushButtonData("pushButtonDataRead", "啟動服務", AddInPath,
"AddIn_RFIDSever.CmdRFIDSeverQuery")) as PushButton;
pushButtonRead.LargeImage = new
BitmapImage(new
Uri(Path.Combine(ButtonIconsFolder, "Query.png"), UriKind.Absolute));
pushButtonRead.ToolTip = "啟動服務";
啟動監聽服務主要代碼如下:
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("服務器已就緒,
IP:192.168.1.35,端口號:8045 ");
}
2)Revit提供了注冊空閑事件的機制,服務端通過解析客戶端的指令,根據編號過濾出需要查詢的構件Id,加入到Revit的選擇集,實現構件的自動高亮選中,注冊空閑事件主要代碼如下:
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);
}
移動端開發主要分為三部分:APP界面開發、RFID標簽讀寫、網絡數據交互。APP交互界面利用Android系統SDK開發包完成。RFID標簽讀寫通過移動手持設備硬件服務商提供的二次開發包完成。與服務器的數據交互通過Json數據包完成。
1)交互主界面從Activity類派生,服務器設定、運輸日期設定、生產日期設定、查詢等子界面從AppCompatActivity派生,通過重載onCreate(Bundle savedInstanceState)實現界面布局、UI交互。
2)將硬件服務商提供的RFID標簽讀寫開發包導入到開發環境,通過開發包里的接口實現對RFID標簽的讀寫,設備初始化主要代碼如下:
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)與服務器端數據交互中讀取Json數據主要代碼如下:
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;
}
以某裝配式輕鋼住宅為例,系統的主要工作流程如下:


1)Revit中啟動服務端;2)移動端設置RFID標簽中的相關信息,并更新Revit中的模型信息,如圖3所示;3)移動端通過掃描RFID標簽,查詢關鍵信息,并在Revit中高亮顯示相關構件及其屬性信息,如圖4所示。工程實例表明,系統能夠實現對RFID標簽的讀寫操作,并且能夠根據移動端的查詢指令,和Revit模型進行數據交互。
本文采用RFID與Revit相結合的方式,詳細介紹了裝配式構件管理系統的開發流程,通過該系統能夠實現對裝配式建筑構件全生命周期中的精細化管理,對同類型的工程項目具有借鑒意義。