You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用Snap7读取PLC char数组时空字符过滤失效问题排查

问题原因

你的过滤条件完全没生效,核心问题有两个:

  • 你调用S7.GetCharsAt时指定读取1个字符,这个方法返回的永远是长度为1的字符串,不可能等于长度为0的空字符串"",所以你写的c != ""判断恒成立,等于完全没做非空校验。
  • PLC里char数组的空值根本不是C#概念里的空串,未赋值的位置存的是ASCII码为0的空字符'\0',部分场景下也会填充空格,这两种字符打印到控制台看起来和空值一模一样,但实际既不是""也不是你要过滤的"?",自然会全部被拼接到结果里。
修复代码

直接取读取到的单个字符做值判断,不要拿长度为1的字符串和空串比:

String sealNumber = "";
for (int i = 90; i < 108; i++)
{
    String c = S7.GetCharsAt(bufferLineToRead, i, 1);
    char current = c[0];
    // 过滤空字符、空格、问号
    if (current != '\0' && current != ' ' && current != '?')
    {
        Console.WriteLine("STRINGA " + c);
        sealNumber += c;
    }
}
注意事项

如果后续读取出现乱码,先核对PLC侧的字符编码:西门子S7系列普通CHAR数组默认是ASCII编码,WCHAR类型才是UTF-16编码,调用Snap7读取方法时不要传错编码参数,避免字符识别错误导致过滤失效。

内容的提问来源于stack exchange,提问作者Nicola Rigoni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 11:33:21