BizTalk Server平台上的RFID技术应用演示(vs2005 )

微软BizTalk RFID为RFID应用的推广提供了一个功能强大的平台。提供了基于XML标准和Web Services的开放式接口,它含有RFID器件设备的标准接入协议及管理工具,方便软硬件合作伙伴在本平台上进行开发、应用。作为微软的一个平台级软件,微软RFID开发服务平台不仅和微软的其他产品进行良好的集成,而且能和其他产品进行良好的集成。其作为BizTalk 2006的一个重要组件。希望通过俺的介绍,使大家能对BizTalk 2006 上做相关的RFID应用开发能作初步的了解。

 

一、DSPI 结构的介绍

图-1:微软中间件产品结构图  

BizTalk Server平台上的RFID技术应用演示(vs2005 ) 

DSPI (设备提供程序应用接口)是微软和全球四十家RFID硬件合作伙伴制定的一套标准接口。所有支持DSPI的各种(RFID、条码、IC 卡等)设备在Microsoft Windows 上即插即用。对于软件合作伙伴,微软RFID开发服务平台提供了OM/API's(对象模型/应用程序访问接口),这是为上层的各类软件解决方案服务的。OM/API's可以使用各种Managed Code(比如C#等)来实现。

 

在具体实现之前,先做平台的配置工作。

下面详细介绍RFID Manager中Provider和Devices的配置过程:

     1    配置Provider:

A 打开RFID Manager,选择Device Providers,右击并选择 New Provider;

B 在弹出的对话框,在Name处填写 Provider名称(可随意命名)此处为:Raifu

C 在File Name处,选择 Browse,选择对应的RFID硬件设备商提供的DLL

   文件,然后点击 Register,可以看见Provider Properties 的详细信息

         D 点击OK,Provider配置完成。

 

     2    配置Devices:

         A 选择Devices,右击并选择 New Devices ;

         B 选择Add single Device,并点击Next;

         C 选择Add Provider:此处选中在配置Provider时设置的名字并点击Next;

         D 选择Conect using: 此处选择TCP 协议;

Name or IP address:填写RFID设备的IP地址,此处为:192.168.7.66;

这个IP 根据设备在网络中具体的地址来配置哦

          Port:填写RFID设备的端口号,此处为:1969 并点击Next;

              端口也和IP配置一样的 呵呵

         E 选择组:默认(可以另建新设备组),并点击Next;

         F Password:无,并点击Next;

         G点击OK,Devices配置完成。

 

3           至此,RFID Manager配置完成。如图1 所示

   

BizTalk Server平台上的RFID技术应用演示(vs2005 )                   (图1)

 

二、实现的步骤与方法

   

1、 建立工程  

 

打开VS2005,并新建一个工程,同时填加一些必要的控件,最终的界面效果如图(2) 所示。

 

 

BizTalk Server平台上的RFID技术应用演示(vs2005 )注意:只是简单的演示实现方法,具体的开发,可以根据具体应用场合来实现,本人只是介绍其具体的实现方法。

 

下面是工程的代码 呵呵,,简单,粗燥,您凑活看吧

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

using Microsoft.SensorServices.Rfid.Management;

using Microsoft.SensorServices.Rfid.Design;

using System.IO.SensorServices.Rfid.Client;

using Microsoft.SensorServices.Rfid;

using Microsoft.SensorServices.Rfid.Utilities;

using Microsoft.SensorServices.Rfid.Dspi;

 

 

namespace SynchronousCommand

{

    public partial class Form1 : Form

    {

        DataTable dtTags;

        SeekOrigin seek;

        public byte[] tagId;

       

        public Form1()

        {

            InitializeComponent();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            //init devices list

            DeviceManagerProxy deviceManager = new DeviceManagerProxy();

            

            try

            {

                cbDevices.Items.Clear();

 

                DeviceDefinition[] devices = deviceManager.GetAllDevices();

 

                if (devices != null)

                {

                    for (int i = 0; i < devices.Length; i++)

                    {

                        cbDevices.Items.Add(devices[i].Name);

                    }

                }

            }

            catch (Exception ex)

            {

                ShowException(ex);

            }

 

 

            //init datatable

            InitDataTable();

        }

 

        void InitDataTable()

        {

            dtTags = new DataTable();

            DataColumn dcTagId = new DataColumn("TagId");

            DataColumn dcTagData = new DataColumn("TagData");

            DataColumn dcType = new DataColumn("Type");

            DataColumn dcSource = new DataColumn("Source");

            DataColumn dcTime = new DataColumn("Time");

 

            dtTags.Columns.Add(dcTagId);

            dtTags.Columns.Add(dcTagData);

            dtTags.Columns.Add(dcType);

            dtTags.Columns.Add(dcSource);

            dtTags.Columns.Add(dcTime);

        }

 

        void ShowException(Exception ex)

        {

            MessageBox.Show(ex.ToString());

        }

 

        private void btnGetTags_Click(object sender, EventArgs e)

        {

           using (DeviceConnection dc = new DeviceConnection(deviceName))

            {

                try

                {

                    dc.Open();

                   

                    TagDataSelector selector = new TagDataSelector();

                    selector.IsId = true;

                    selector.IsData = true;

                    selector.IsTime = true;

                    selector.IsType = true;

 

                    //curent

                    ICollection<TagReadEvent> c1 = dc.GetTags(selector);

                    foreach(TagReadEvent tag in c1)

                    {

                            DataRow row = dtTags.NewRow();

                            row["TagId"] = HexUtilities.HexEncode(tag.GetId());

                            row["TagData"] = HexUtilities.HexEncode(tag.GetData());

                            row["Source"] = tag.Source;

                            row["Time"] = tag.Time;

                            row["Type"] = tag.Type;

                            dtTags.Rows.Add(row);

                    }

 

                    gridTags.DataSource = dtTags;

                }

                catch (Exception ex)

                {

                    ShowException(ex);

                }

                finally

                {

                    dc.Close();

                }

            }

        }

 

BizTalk Server平台上的RFID技术应用演示(vs2005 )这是读到标签时的界面效果

您在具体的应用中,可以根据自己具体的要求来做地

如:

 您可以把采集到的EPC号,存入数据库,作为其他系统的数据源,

 或者设计成其他企业软件系统的数据采集子系统等等。

 

        private void btnPrintTag_Click(object sender, EventArgs e)

        {

        }

        private string deviceName

        {

            get

            {

                if (cbDevices.SelectedIndex == -1)

                    return "";

                else

                    return cbDevices.Items[cbDevices.SelectedIndex].ToString();

            }

        }

 

        private void btnWriteTag_Click(object sender, EventArgs e)

        {

            using (DeviceConnection dc = new DeviceConnection(deviceName))

            {

                try

                {

                    dc.Open();

                    byte[] AccessPassword ={ 0x0, 0x0, 0x0, 0x0 };         

                    byte[] tagId = HexUtilities.HexDecode(txtWriteTagID.Text);

                    //dc.WriteTagId(tagId, null, null);

                    dc.WriteTagId(tagId, AccessPassword, null);

                }

                catch (Exception ex)

                {

                    ShowException(ex);

                }

                finally

                {

                    dc.Close();

                }

            }

        }

 

        private void btnClearTags_Click(object sender, EventArgs e)

        {

        }

 

        private void button1_Click(object sender, EventArgs e)

        {           

            using (DeviceConnection dc = new DeviceConnection(deviceName))

            {

                try

                {

                    dc.Open();

                    txtPrintTagID.Clear();

                    int offset= Convert.ToInt32(txtStart.Text);                   

                    int length= Convert.ToInt32(txtLength.Text);

                   // byte[] tagId = HexUtilities.HexDecode(gridTags.Rows[0].Cells[0].Value.ToString());

                    byte[] data = dc.GetPartialTagData(tagId, seek , offset, length);

                    txtData.Text = HexUtilities.HexEncode(data);

                 }

                catch (Exception ex)

                {

                    ShowException(ex);

                }

                finally

                {

                    dc.Close();

                }

            }

# region getTagData

         /*   using (DeviceConnection dc = new DeviceConnection(deviceName))

            {

                try

                {

                    dc.Open();

                    txtPrintTagID.Clear();

                    byte[] AccessPassword ={ 0x0, 0x0, 0x0, 0x0 };

                    byte[] tagId = HexUtilities.HexDecode(gridTags.Rows[0].Cells[0].Value.ToString());

                    byte[] data = dc.GetTagData(tagId);                  

                    txtPrintTagID.Text = HexUtilities.HexEncode(data);

                }

                catch (Exception ex)

                {

                    ShowException(ex);

                }

                finally

                {

                    dc.Close();

                }

            }*/

# endregion getTagData

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            using (DeviceConnection dc = new DeviceConnection(deviceName))

            {

                try

                {

                    dc.Open();

                    txtPrintTagID.Clear();

                    byte[] AccessPassword ={ 0x0, 0x0, 0x0, 0x0 };

                    int offset = Convert.ToInt32(WriteStart.Text );

                   // byte[] tagId = HexUtilities.HexDecode(gridTags.Rows[0].Cells[0].Value.ToString());

                    byte[] writedata = HexUtilities.HexDecode(WriteData.Text);

                    dc.WritePartialTagData(tagId, writedata, seek, offset);               

                }

                catch (Exception ex)

                {

                    ShowException(ex);

                }

                finally

                {

                    dc.Close();

                }

            }

        }

 

        private void button3_Click(object sender, EventArgs e)

        {

          

        }

 

        private void gridTags_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)

        {

            tagId = HexUtilities.HexDecode(this.gridTags.Rows[e.RowIndex].Cells[0].FormattedValue.ToString());

        }

 

        private void button4_Click(object sender, EventArgs e)

        {

            PropertyProfile profile = new PropertyProfile();

            //general

            PropertyKey nameKey = new PropertyKey(StandardDevicePropertyGroups.General, GeneralPropertyGroup.Name);

            PropertyKey location = new PropertyKey(StandardDevicePropertyGroups.General, GeneralPropertyGroup.Location);

            PropertyKey discription = new PropertyKey(StandardDevicePropertyGroups.General, GeneralPropertyGroup.Description);

            PropertyKey vendor = new PropertyKey(StandardDevicePropertyGroups.General, GeneralPropertyGroup.Vendor);

            PropertyKey versionKey = new PropertyKey(StandardDevicePropertyGroups.General, GeneralPropertyGroup.FirmwareVersion);

            PropertyKey ntpServer = new PropertyKey(StandardDevicePropertyGroups.General, GeneralPropertyGroup.NtpServer);

            PropertyKey time = new PropertyKey(StandardDevicePropertyGroups.General, GeneralPropertyGroup.Time);

            //RF

 

            PropertyKey AirProtocolsSupported = new PropertyKey(StandardDevicePropertyGroups.RF, RFPropertyGroup.AirProtocolsSupported);

            PropertyKey AirProtocolsInUse = new PropertyKey(StandardDevicePropertyGroups.RF, RFPropertyGroup.AirProtocolsInUse);

            PropertyKey AntennaSequence = new PropertyKey(StandardDevicePropertyGroups.RF, RFPropertyGroup.AntennaSequence);

            PropertyKey Frequency = new PropertyKey(StandardDevicePropertyGroups.RF, RFPropertyGroup.Frequency);

            PropertyKey DutyCycle = new PropertyKey(StandardDevicePropertyGroups.RF, RFPropertyGroup.DutyCycle);

            PropertyKey EffectiveRange = new PropertyKey(StandardDevicePropertyGroups.RF, RFPropertyGroup.EffectiveRange);

            PropertyKey NoiseLevel = new PropertyKey(StandardDevicePropertyGroups.RF, RFPropertyGroup.NoiseLevel);

            PropertyKey NoiseLevelThreshold = new PropertyKey(StandardDevicePropertyGroups.RF, RFPropertyGroup.NoiseLevelThreshold);

            PropertyKey OperationEnvironment = new PropertyKey(StandardDevicePropertyGroups.RF, RFPropertyGroup.OperationEnvironment);

            PropertyKey PowerLevel = new PropertyKey(StandardDevicePropertyGroups.RF, RFPropertyGroup.PowerLevel);

            // PropertyKey RFModeContinuous = new PropertyKey(StandardDevicePropertyGroups.RF, RFPropertyGroup.RFModeContinuous);

            PropertyKey SessionId = new PropertyKey(StandardDevicePropertyGroups.RF, RFPropertyGroup.SessionId);

            PropertyKey rfModeContKey = new PropertyKey(StandardDevicePropertyGroups.RF, RFPropertyGroup.RFModeContinuous);

 

            // Source

            PropertyKey Enabled = new PropertyKey(StandardDevicePropertyGroups.Source, SourcePropertyGroup.Enabled);

            PropertyKey systemEnabled = new PropertyKey(StandardDevicePropertyGroups.Source, SourcePropertyGroup.SystemEnabled);

 

            //tagRead

            PropertyKey DuplicateEliminationTime = new PropertyKey(StandardDevicePropertyGroups.TagRead, TagReadPropertyGroup.DuplicateEliminationTime);

            PropertyKey RssiCutoff = new PropertyKey(StandardDevicePropertyGroups.TagRead, TagReadPropertyGroup.RssiCutoff);

 

            //commands

 

            PropertyKey requestTimeOut = new PropertyKey(StandardDevicePropertyGroups.Command, CommandPropertyGroup.RequestTimeout);

 

            //notification

 

            PropertyKey eventMode = new PropertyKey(StandardDevicePropertyGroups.Notification, NotificationPropertyGroup.EventMode);

            PropertyKey NotificationHost = new PropertyKey(StandardDevicePropertyGroups.Notification, NotificationPropertyGroup.NotificationHost);

            PropertyKey NotificationPort = new PropertyKey(StandardDevicePropertyGroups.Notification, NotificationPropertyGroup.NotificationPort);

            PropertyKey NotificationDataSelector = new PropertyKey(StandardDevicePropertyGroups.Notification, NotificationPropertyGroup.TagDataSelector);

           

            profile[nameKey] = "OK Device";

          

           // general

            profile[location] =System.IO.Directory.GetCurrentDirectory().ToString();

            profile[discription] = "Jiang su Raifu Teck Co.,LTD";

            profile[versionKey] = "23 14";

            profile[vendor] = "Raifu Teck";

            profile[time] = DateTime.Now.ToString();

            profile[ntpServer] = "RaifuServer";

        profile[Frequency] = 902.4;//freValue(resultBytes[8]);

            profile[AirProtocolsSupported] = new string[] { "ISO18000-6B", "EpcClass1Gen1", "EpcClass1Gen2" };//支持的协议;

            profile[EffectiveRange] = (double)3.2;

            profile[NoiseLevel] = (float)10.14;

            profile[NoiseLevelThreshold] = (float)20;

            profile[PowerLevel] = (float)12.34;

            profile[AirProtocolsInUse] = new string[] { "ISO18000-6B" };// strTagType(resultBytes[10]);//new string[] { "EpcClass1Gen2" }; // 当前的卡类型;

            profile[AntennaSequence] = "AntennaSequence";

            //sources

            profile[Enabled] = true;

            profile[systemEnabled] = true;

 

            // tagReads

            profile[DuplicateEliminationTime] = Convert.ToInt64(30000);

            profile[RssiCutoff] = (float)1.0;

            //commands

            profile[requestTimeOut] = 40000;

            //notification

           profile[eventMode] = true;         

           profile[NotificationPort] = 0;

        using (DeviceConnection dc = new DeviceConnection(deviceName))

            {

                try

                {

                    dc.Open();

                    dc.SetProperty(StandardDevicePropertyGroups.Command, CommandPropertyGroup.RequestTimeout, 30);

                }

                catch (Exception ex)

                {

                    ShowException(ex);

                }

                finally

                {

                    dc.Close();

                }

            }          

        }

    }

}

 

上面只是简单演示了几个效果,感性的认识或了解下RFID技术。

本人C#不是很熟悉,上面的代码也不够规范,但意思到了基本算是呵呵

采用这个技术的好处是什么呢?

可以不关心具体的RFID硬件系统了,无论是那个公司的读写设备。

例如:

您在开发RFID数据采集系统时,选的是A公司的产品,但在后期的实施中,因为某种原因,而选择了B公司的产品,按以前的做法,您是要重新写代码了。。。。。

现在嘛,这一切都不是问题了 呵呵 (前提是A 和B 公司的设备都集成到biztalk里了)

 

OK,该结束了 呵呵

有问题可以一起学习、交流,仅限RFID方面的技术哦

C#嘛,绝对是菜鸟,只是仓促的被迫的玩了几天

你可能感兴趣的:(server)