外围设备的数据是INT16类型的补码,比如0xCD93实际是指-12909。
我查了西门子手册,只有一个指令NEG跟补码有关,但是闹不清它是把外围设备的补码转成它可以识别的十进制,还是把外围设备的原码转成它自己的补码。我被绕晕了。
由于外围设备发来的是16位整数,我就用博图里的word数据块来接收,但是闹不清此word会以补码,还是会以原码、反码的形式保存接收下来的这个整数。
如果博图的Word数据块以补码的形式保存了一个数据,那么怎么转换成实数?
如果博图的Word数据块以反码的形式保存了一个数据,那么怎么转换成实数?
如果博图的Word数据块以原码的形式保存了一个数据,那么怎么转换成实数?
是一定要转换成实数的,因为它最张得除以100,才能成为人类可以理解的物理意义,比如电流、电压和压力等等。
--------------------------------------------
以4位整数为例(16位的道理一样)来说原码、反码和补码:
比如HMI发来-2这个数字,其实是发来1010这个一串开关量。第一个1表示负数,后面的010表示2。
博图的word块(假设是4位的)接收到后,如果保存格式是原码,则是1010,
如果保存格式是反码,则是0101(与原码完全相反).
如果保存格式是补码,则是0110。这个数字是反码加上1,即0101+0001=0110。

