我想在 PLC 上通过 MODBUS 发布一个 DINT 变量(dintTest),以使用 Matlab 仪器控制工具箱读取它。事实证明,Matlab 可以读取 Modbus 变量,但只能读取 INT16。所以我想将 DINT 变量拆分为 IEC 中的两个 INT 变量。我找到了这个解决方案,但这只允许 +- 0 ... 32767^2 的值:
dintTest := -2;
b := dintTest MOD 32767;
a := dintTest / 32767;
result := 32767 * a + b;
c := DINT_TO_INT(b); // publish over modbus
d := DINT_TO_INT(a); // publish over modbus
整个 DINT 范围的解决方案是什么?谢谢!
编辑:我在 simulink 中使用 matlab 功能块阅读(需要仪器控制工具箱):
function Check = MBWriteHoldingRegs(Values,RegAddr)
coder.extrinsic('modbus');
m = modbus('tcpip', '192.169.237.17');
coder.extrinsic('write');
write(m,'holdingregs',RegAddr,double(Values),'int16');
Check = Values;