【发布时间】:2016-06-25 14:43:22
【问题描述】:
我正在创建一个软件包,它一次接收 16 个布尔值,将它们放入一个位数组中,然后将它们发送到 PLC 以供 PLC 解包和使用。我的问题有两个:
1) 如果我创建一个 BitArray(16),它会只占用 16 位数据还是 BitArray 对象会自动在其中包含额外数据作为对象的一部分(我假设它只有 16 位但找不到到目前为止,它确实得到了很好的确认)和
2) PLC 需要一个 16 位整数(短整数),以便通信耦合器在必要时工作,因此我想我可以简单地将 BitArray 转换为短整数,但我需要一个 1 和 0 的列表,而不是“真”和“假”——那么最好的方法是什么?下面是我想到的一些示例代码:
/* Pack bits into a container to send them as one item */
var bitContainer_1 = new BitArray(16);
bitContainer_1[0] = result.Toggle_Signal;
bitContainer_1[1] = result.Auto_RFO;
bitContainer_1[2] = result.Spare_1;
bitContainer_1[3] = result.Spare_2;
bitContainer_1[4] = result.HMI_Horn_Necessary;
bitContainer_1[5] = result.HMI_Horn_Urgent;
bitContainer_1[6] = result.HMI_Horn_Emergency;
bitContainer_1[7] = result.Spare_3;
bitContainer_1[8] = result.Sys_1_Auto_Ready;
bitContainer_1[9] = result.Sys_1_Auto_Active;
bitContainer_1[10] = result.Spare_4;
bitContainer_1[11] = result.Spare_5;
bitContainer_1[12] = result.Sys_2_Auto_Ready;
bitContainer_1[13] = result.Sys_2_Auto_Active;
bitContainer_1[14] = result.Spare_6;
bitContainer_1[15] = result.Spare_7;
short packagedBits_1 = Convert.ToInt16(bitContainer_1);
我认为我可以在进入 bitContainer 之前对布尔值做一些事情,将它们转换为 1 或 0,但发现这似乎不起作用,所以我想看看我的任何/所有选项可能是什么避免很多if(true){var = 1} else{var = 0} 类型的场景,因为我对这种类型的任务相当不熟悉。由于这些通信将负责机器行为,因此减少打包和发送它们的开销和时间至关重要。
【问题讨论】:
-
您始终可以使用枚举并将其标记为标志:stackoverflow.com/questions/8447/…
-
我的一个同事总是对枚举感兴趣,我什至从没想过要使用它们哈哈。这两个看起来都是很好的基础 - 我会尝试一下,当我发现什么最有效时更新帖子,谢谢!