从data0到data28全是int型,读取到c#中转化为29个2进制数组
时间: 2025-03-20 14:16:49 浏览: 30
如果您的目标是从 PLC 的数据块中读取 `data0` 到 `data28` 共计 29 个整数型变量 (`int`),然后将它们逐个转化为二进制形式并存储为长度固定的二进制数组(通常一个整数会表示为 16 位或 32 位),您可以按照以下步骤操作。
以下是基于 C# 编写的解决方案示例:
---
### 解决方案
#### 1. **引入必要的库**
我们可以继续使用上一个问题提到的 S7 协议相关库(比如 `S7.Net`)。首先确保已安装该库。
```bash
Install-Package S7.Net
```
#### 2. **编写代码**
##### 示例代码:
```csharp
using System;
using System.Linq;
namespace ReadPLCDataToIntBinaryArrays
{
class Program
{
static void Main(string[] args)
{
// 假设已经从 PLC 中获取了 29 个 int 类型的数据到数组中
int[] plcDatas = GetPlcIntDataFromDb();
// 打印原始数据
Console.WriteLine("原始整数数据:");
foreach (var num in plcDatas)
{
Console.Write($"{num} ");
}
Console.WriteLine("\n");
// 将每个整数转为固定大小的二进制字符串(这里假设每个整数占 16 位)
const int bitsPerInteger = 16; // 每个整数占用多少位
bool[][] binaryResults = new bool[plcDatas.Length][];
for(int i=0;i<plcDatas.Length;i++)
{
binaryResults[i] = ConvertIntToBoolArray(plcDatas[i], bitsPerInteger);
}
// 输出结果
Console.WriteLine("转化后的二进制布尔数组:");
for(int i=0;i<binaryResults.Length;i++)
{
Console.WriteLine($"data{i}: {string.Join("",binaryResults[i].Select(b=>b?"1":"0"))}");
}
}
/// <summary>
/// 获取 PLC 数据模拟函数(实际应替换为您自己的 PLC 通信代码)
/// </summary>
/// <returns>返回一组整数</returns>
private static int[] GetPlcIntDataFromDb()
{
Random random = new Random();
return Enumerable.Range(0, 29).Select(_ => random.Next(-1000, 1000)).ToArray();
}
/// <summary>
/// 将整数转换为指定长度的布尔数组
/// </summary>
/// <param name="value">待转换的整数值</param>
/// <param name="bitsCount">期望的位数</param>
/// <returns></returns>
private static bool[] ConvertIntToBoolArray(int value, int bitsCount)
{
bool[] result = new bool[bitsCount];
unchecked
{
uint unsignedValue = (uint)value;
for (int i = 0; i < bitsCount; i++)
{
result[bitsCount - i - 1] = ((unsignedValue >> i) & 1u) == 1u;
}
}
return result;
}
}
}
```
---
### 说明
- 我们创建了一个名为 `ConvertIntToBoolArray` 的辅助方法,用于将单个整数拆解为其二进制表达式,并将其存储在一个布尔数组中。
- 主体部分通过循环依次处理所有来自 PLC 的整数数据项,并调用上述方法生成对应的结果。
- 最终我们打印出每组布尔值组成的字符串以便于观察。
---
阅读全文
相关推荐


















