2017-08-24 71 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

我会研究这一点,看看它是否是我需要的。 我有点知道我想要什么,但我现在的经验不足。 –