恭喜,你发布的帖子
发布于 2022-12-12 22:29:28
5楼
既然聊GATHER和SCATTER这一对儿指令。那么:
所有的数字量的控制字/状态字的位定义都是一样的。
对于N台驱动,就可构建WORD类型的数组DriverSTW1(N)以及DriverZSW1(N)等等。
通过SCATTER可将这个Word类型的数组转成 drvSTW( 0..N, 0..15)的位数组。
这个数组的N,0;都是相同命令/状态定义;可以构成一个个字/双字,这个字的每一位代表了0-N驱动的一个定义的命令/状态。
要实现,这里就牵扯到 转置 运算。
1200编程如何来处理这种二维数组的转置呢?
我之前的一个项目是这样做的,用SCATHER指令读取状态字,解析出位 ,这样在做顺控逻辑的时候,得到的位变量的上升沿触发相应的动作指令或者子程序。还可以通过转化得到一个故障位a1,其余驱动的故障位命名为a2,a3,a4,依次类推,我可以将这几个故障位用GATHER再转化成一个word变量A,这样我就可以通过变量A的值,知道是哪一台驱动器报了故障。同样的,所有驱动器的运行信号也可以直接汇总成一个WORD变量B。这样做是因为第三方SCADA系统需要直接读取WORD变量来获取某一台驱动的运行或者故障信号,这样所有驱动器的运行和故障用两个WORD来进行交互。我也不知道您说的转置是不是这个意思,还是其它的什么做法?
请填写推广理由: