发表于:2021/6/23 8:23:22
#0楼
参数:输入12BIT,+/-10V/0-20MA,输出:11BIT,+/-10V/0-20MA。随有疑问:既然输入12BIT,去掉一位符号位,有11位二进制数表示模拟量大小,对应±2047表示+/-10V/0-20MA,为什么说明书中是±27648表示+/-10V/0-20MA?多方查找资料,随有一下理解:
PLC的CPU用16位二进制补码定点数来表示模拟量值。A/D转换的结果是按16位二进制补码形式存储,即占用一个字(两个字节)的长度。其中,最高为(第15位)为符号位,正数的符号位为0,负数的符号位为1。模拟量模块的模拟值位数(即转换精度)可以设置为9--15位(与模块的型号有关,不包括符合位)。如果模拟量值的精度小于15位,则模拟量值左移,使其最高位(符号位)在16位字的最高位(第15位),模拟量左移后未使用的低位填入“0”,这种方法称为“左对齐”。
模拟量模块为12bit 16bit,注意这里12位和16位是指的分辨率,分辨率=精度+符号位,所以分辨率与精度是不同的概念,不能混为一潭,你上述算法是错误的。如果设模拟量的精度是12位(对应的分辨率为13位,加上符号位),相当于模拟量模块13bit,未使用的低位(第0-2位)为0,相当于实际的模拟值被乘以8。下面以13bit分辨率为例说明精度、分辨率、对应模拟量模块数字化的模拟量转换值之间的关系:
13bit分辨率对应精度12bit,12bit对应的最大数字化量值为(整值,16位的符号位为0)= S1111111 1111000=32760( S位符号位,后3个0由于“左对齐”补的),相比27648相当于上溢值,通常正常范围(单极性而言)为0---27648,27648对应于满量程10V(0-10V)或20 mA(4-20 mA)。由于补0的原因,这样就相当于把32760等分成,4095份,32760与4095不存在一一对应关系,即16位二进制数中每8个对应一个4095.
所以输入12BIT,并非±2047对应+/-10V/0-20MA,是由于补0的原因,依然是±27648表示+/-10V/0-20MA。27648是额定值范围内100%的值,32767是超上限的值,比如测量一个正负10V的信号,但过来的信号也可能大于10V,超出额定值100%的信号,在一定范围内也是能测量的。大于32767的值模块就会报错。对于使用者,只要知道±27648表示+/-10V/0-20MA即可。
PLC的CPU用16位二进制补码定点数来表示模拟量值。A/D转换的结果是按16位二进制补码形式存储,即占用一个字(两个字节)的长度。其中,最高为(第15位)为符号位,正数的符号位为0,负数的符号位为1。模拟量模块的模拟值位数(即转换精度)可以设置为9--15位(与模块的型号有关,不包括符合位)。如果模拟量值的精度小于15位,则模拟量值左移,使其最高位(符号位)在16位字的最高位(第15位),模拟量左移后未使用的低位填入“0”,这种方法称为“左对齐”。
模拟量模块为12bit 16bit,注意这里12位和16位是指的分辨率,分辨率=精度+符号位,所以分辨率与精度是不同的概念,不能混为一潭,你上述算法是错误的。如果设模拟量的精度是12位(对应的分辨率为13位,加上符号位),相当于模拟量模块13bit,未使用的低位(第0-2位)为0,相当于实际的模拟值被乘以8。下面以13bit分辨率为例说明精度、分辨率、对应模拟量模块数字化的模拟量转换值之间的关系:
13bit分辨率对应精度12bit,12bit对应的最大数字化量值为(整值,16位的符号位为0)= S1111111 1111000=32760( S位符号位,后3个0由于“左对齐”补的),相比27648相当于上溢值,通常正常范围(单极性而言)为0---27648,27648对应于满量程10V(0-10V)或20 mA(4-20 mA)。由于补0的原因,这样就相当于把32760等分成,4095份,32760与4095不存在一一对应关系,即16位二进制数中每8个对应一个4095.
所以输入12BIT,并非±2047对应+/-10V/0-20MA,是由于补0的原因,依然是±27648表示+/-10V/0-20MA。27648是额定值范围内100%的值,32767是超上限的值,比如测量一个正负10V的信号,但过来的信号也可能大于10V,超出额定值100%的信号,在一定范围内也是能测量的。大于32767的值模块就会报错。对于使用者,只要知道±27648表示+/-10V/0-20MA即可。
[此贴子已经被作者于2021/8/11 9:08:20编辑过]