C#上位机读取PLC报警

我目前见到的PLC工程师会把报警点位存储在D或者M,M的话就是布尔值0和1嘛,D的话因为是16位的(也有32位)只能以short类型(或者byte[])读取出来再按位转换成布尔数组进行循环判断,为了方便一般都会让PLC工程师将报警点位写在一起,不连续的报警点位只是增加了读取的复杂度。。连续的点位可以批量进行读取,如果地址很分散,就会增加通信负荷。如果必须使用离散地址,可以在 PLC 内部先整理数据​(如用 M 继电器映射到连续的 D 寄存器),再批量上传。另外关于报警读取,一般都会以一个总报警点位进行轮询判断,只有当总报警为True的时候,才会去读取相关报警点位,查询是哪个点位触发了报警。

bool[] 报警信息;
short n = 0;
for (int i = 0; i < 25; i++)
  {
      for (int j = 0; j < 8; j++)
         {
            报警信息[n] = (报警byte[i] & (1 << j)) != 0;//位与操作,判断当前位是不是true
            n++;
          }
  }
获取的报警布尔值去查找对应报警信息
posted @ 2025-06-17 19:44  悲伤的攻城狮  阅读(118)  评论(0)    收藏  举报