c# 開發一個基於硬件交互的SDK(DLL)

     作爲上位機與硬件交互產品,經常需要提供硬件產品SDK給客戶,客戶根據SDK進行二次開發的情況,今天就寫一個如何簡單的SDK,並基於串口交互(有些基於tcp網絡),只是提供一個思路。

一、定義一個上位機與硬件的交互協議類: 如下

namespace devicedapi
{
    public class datapro
    {
        private byte Datahead;       //數據包頭,
        private byte DataLen;        //數據包長度,數據包從‘長度’字節後面開始的字節數,不包含‘長度’字節本身
        private byte DevId;         //設備id
        private byte DataOpCmd;          //控制指令
        private byte[] DataParam;      //數據包命令參數,部分命令無參數
        private byte   DataCheck;          //校驗和,除校驗和本身外所有字節的校驗和
        private byte[] Dataframe;  //完整數據包

        //設置屬性
        public byte[] DevDatafullframe
        {
            get
            {
                return Dataframe;
            }
        }

        public byte[] DevDataParam
        {
            get
            {
                return DataParam;
            }
        }

        public byte DevicedId
        {
            get
            {
                return DevId;
            }
        }

        public byte Cmd
        {
            get
            {
                return DataOpCmd;
            }
        }

        public byte DevDatahead
        {
            get
            {
                return Datahead;
            }
        }
        
        public datapro()
        {

        }

        // 數據包組裝  //有時候需要無參數組裝
         public datapro(byte DevId, byte DataOpCmd, byte[] DataParam)
         {
            //do sonmgthing...
            //得到 this.DevDatafullframe
         }

         // 數據包拆分
         public datapro(byte[] DevDatafullframe)
         {
            //do sonmgthing...
            //得到各個屬性值
         }

        // 數據包校驗
         public byte CheckSum(byte[] DataParam, int nLen)
          {
            //do sonmgthing...
            //得到 DataCheck        
          }
}
}

二、SDK設備操作方法類

   1、必須定義委託方法,提供給調用者自定義去實現(類似C語言回調函數留出接口)

namesopace devicedapi
{
  //定義一個處理數據的委託
  public delegate void DataHandleCallback(datapro msgdata);
  
  public class devAPI
  {
   //給用戶一個實現回調函數的接口
    public DataHandleCallback  UserdataHandleCallback
    private SerialPort mySerialPort;  //實例化一個串口
	
   //初始化
   public devAPI()
   {
      mySerialPort = new SerialPort();   

      mySerialPort.DataReceived+=new SerialDataReceivedEventHandler(ReceivedComData);  //串口接收函數 
   }
	
   // 打開串口連接設備
   public opencom()
   {
   }

   //關閉串口 
   public closecom()
   {
   
   
   }
   //發送數據給設備
   public sendmsg()
   {
   
   
   }
   
   private void ReceivedComData(object sender, SerialDataReceivedEventArgs e)
   {
     //1.獲取數據長度,按數據協議解析出一幀數據 msgdata
	 //2.驗證一幀數據正確性
     //3.調用回調函數處理數據 
	  DataHandleCallback(msgdata);
	
   }
    // 操作設備的各個方法
   public func1()
   {
     //組裝數據
	  sengmsg();
   }

    // 操作設備的各個方法
   public func2()
   {
     //組裝數據
	  sengmsg();   
   }

      // 操作設備的各個方法
   public func3()
   {
     //組裝數據
	  sengmsg();
   }
 
  }

}

三、將上兩個類生成一個庫類的工程 導出一個DEVAPI.DLL文件,就可以新建一個工程 ,實例調用。

1、引用dll 

2、實例化一個設備類

3、實現用戶數據處理接口


namespace mydevice
{
	public class newdev
	{
	   private devicedapi.devAPI device ;

	   //初始化訪問讀寫器實例

	   device = new devicedapi.devAPI();

	  //實現回調函數
       device.DataHandleCallback = myhandle;
	 
	  //...
	 
      private void AnalyData(devicedapi.datapro msgdata)
      {
       //自定義處理接收數據
      } 
	
	 
	 //用戶操作函數
	 public myfunc1()
	 {
	  device.func1();
	 }
	 
	 //用戶操作函數
	 public myfunc2()
	 {
	  device.func2();
	 }
	 
	 //用戶操作函數
	 public myfunc3()
	 {
	  device.func3();
	 }
	 	 	 
	}



}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章