我想在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功能块读取(需要Instrument Control Toolbox):
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;
1 回答
我最好把DINT分成两个WORD
然后我可以在matlab中重新构建它 .
这里的要点不是使用数学而是使用位掩码 .