2017-08-24 77 views
2

我正在使用名爲以太網工業協議(EIP)的協議,並使用它來發送和接收來自可編程邏輯控制器(PLC)的數據。C#中的動態類型加載#

數據以十六進制值形式發送,最大爲2字節大小。所以當我詢問在PLC的存儲區中存儲了什麼時,我得到一個2字節的十六進制值。

目前我使用硬編碼的方法來解析返回的數據。 我在看的是能夠使用配置文件或其他東西來告訴什麼字節串應該看起來像。

比方說,我有3個溫度讀數和產品類型,3個溫度是浮點,每個使用4個字節,產品類型是一個整數。 如果我想改變它,我需要改變程序..

我該讀什麼可以改變這個例如配置文件,而不是重寫應用程序? 我希望能夠說我有這種類型的x個實例,然後程序應該解析它。

該程序將所有讀取的數據保存到MySql數據庫中。 這是一個代碼snipet,它解析來自PLC的值。

Krakk = (BitConverter.ToUInt16(data, bIndex)); bIndex += 2; 
Small = (BitConverter.ToUInt16(data, bIndex)); bIndex += 2; 
Medium = (BitConverter.ToUInt16(data, bIndex)); bIndex += 2; 
Large = (BitConverter.ToUInt16(data, bIndex)); bIndex += 2; 

如果我使用一個配置文件我想說的東西線: 名,UINT,規模和程序然後應該閱讀。所以例如 - > Krakk,uint16,2然後程序會知道它應該改變這個:Krakk =(BitConverter.ToUInt16(data,bIndex)); bIndex + = 2;

+0

目前尚不清楚你需要這種動態。如果你要寫一個不同的類型,那仍然是「改變程序」。你爲什麼要指定類型的*實例*的數量?看起來很合理,有多種類型,一種用於讀取每種數據 - 這很好。你可能有一個配置文件來說明使用哪種類型。但是事後並不清楚你會怎麼做,這使得很難提供更具體的信息。 –

+0

目前我只是將這些值存儲在數據庫中,以便我們可以查看爲每個產品收集的數據。 我希望將來能夠做的是添加一個新的PLC並告訴程序我期望從PLC獲得什麼,然後從那裏解析它。 –

+0

好的,但我還是不太明白你想要配置什麼。也許如果你能舉一個你想提供的配置的例子,以及你試圖實現它的程度如何...... –

回答

0

即使我認爲你已經回答自己,但這裏是我的回答與一些細節: 您可能需要創建四個屬性的新自定義配置節(How to Create and Access a Custom Configuration)如下:

  1. ReadingName (接受字符串值並表示您想要讀取的實例名稱
    )。
  2. 開始索引(接受整數值,並表示從中開始讀取實例的數據字節的起始索引。)
  3. 長度(接受整數值,表示實例的數據的字節數。)
  4. 數據類型。

在app.config文件中,您應該爲要讀取的每個實例添加一節,然後在您的程序中應讀取這些值並相應地執行操作。

+1

我會研究這一點,看看它是否是我需要的。 我有點知道我想要什麼,但我現在的經驗不足。 –