范 高 杰
(深圳市华阳国际工程设计股份有限公司,广东 深圳 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相结合的方式,详细介绍了装配式构件管理系统的开发流程,通过该系统能够实现对装配式建筑构件全生命周期中的精细化管理,对同类型的工程项目具有借鉴意义。