各位老师格雷码和二进制有什么区别,怎么转换.
时间:2022-12-17 07:30:00
我用富士的SPH由于富士的编辑,系列编辑的程序SPH符合IEC61131-3编程规范,因此基于此改为其他品牌PLC也很方便。
在精确定位控制系统中,准确测量控制对象的位置非常重要,以提高控制精度。目前,测量位置的方法主要有两种,一种是使用位置传感器,精度高,但在多路、长距离位置监控系统中,由于成本高,安装困难,不实用。二是采用光电轴角编码器电轴角编码器。根据其刻度方法和信号输出形式,光电轴角编码器可分为增量型、绝对型和混合型。绝对编码器是一种直接输出数字量的传感器。采用自然二进制或循环二进制(格雷码)进行光电转换。编码设计一般采用自然二进制、循环二进制、二进制
制作补码等。特点是不需要计数器,可以在转轴的任何位置读取与位置对应的固定数字;抗干扰能力强,无累积误差;切断电源后,位置信息不会丢失,但分辨率由二进制位数决定。根据不同的精度要求,可以选择不同的分辨率即位数。目前有10 位、11 位、12 位、13 位、14 等等。其中,绝对编码器采用循环二进制编码(即格雷码),其输出信号是一种数字排序,而不是权重码。每个人都没有确定的,不能直接比较大小和算术操作,也不能直接转换为其他信号,通过代码转换,进入自然二进制码,由上位机读取以实现相应的控制。本文重点介绍了富士处理方法。本文重点介绍富士SX二进制格雷码与自然二进制码的交换采用编程方法。
一、格雷码介绍(又称循环二进制码或反射二进制码)
在数字系统中只能识别0 1.各种数据只能转换为二进制代码进行处理。格雷代码是一种无权代码,采用绝对编码。典型的格雷代码是一种具有反射特性和循环特性的单步自补代码。它的循环和单步特性消除了随机取数时出现重大误差的可能性。它的反射和自补特性使得求反非常方便。格雷代码属于可靠性编码,是一种错误的最小化编码方法,因为自然二进制码可以直接从数/模转换器转换为模拟信号,但在某些情况下,如从十进制的3 转换成4 二进制码的每个人都要变,使数字电路产生很大的尖峰电流脉冲。格雷代码没有这个缺点,它是一个数字排序系统,所有相邻的整数在它们的数字表示中只有一个不同的数字。当任何两个相邻数之间转换时,只有一个数发生变化。它大大减少了从一个状态到下一个状态的逻辑混淆。此外,由于最大数和最小数之间只有一个数不同,通常称为格雷反射码或循环码。下表是几种自然二进制码和格雷码的对照表:
十进制数
自然二进制
格雷码
十进制
自然二进制
格雷码
0
0000
0000
8
1000
1100
1
0001
0001
9
1001
1101
2
0010
0011
10
1010
1111
3
0011
0010
11
1011
1110
4
0100
0110
12
1100
1010
5
0101
0111
13
1101
1011
6
0110
0101
14
1110
1001
7
0111
0100
15
1111
1000
二、二进制格雷码与自然二进制码的交换
1.自然二进制码转换为二进制格雷码
自然二进制码转换为二进制格雷码,其规律是保留自然二进制码的最高水平作为格雷码的最高水平,而二进制码的二进制码的高水平与二进制码的高水平,而格雷码的其余部分与二进制码的求法相似。
例如:
自然二进制编码如下:
1
0
0
1
然后将其转换为格雷代码的方法是:保持最高位1,然后将第二位0与第一位1进行变更或操作,第三位0与第二位0进行变更或操作,第四位1与第三位0进行变更或操作,结果如下:
1 1 0 1 Gray
二进制格雷码转换为自然二进制码
二进制格雷代码转换为自然二进制码,其规则是保留格雷代码的最高水平作为自然二进制码的最高水平,而二自然二进制码是高位自然二进制码,与二高位格雷代码同或不同,而自然二进制码的其余部分与次高自然二进制码相似。
例如,将格雷码1000转换为自然二进制码:
1
0
0
0
1
1
1
1
上排为格雷码,下排为自然二进制,从左到右分别为1~4位
上排第一高作为自然二进制的最高,所以下排第一填1,然后上排第二和下排第一,下排第二结果为1,上排第三和下排第二,下排第三结果为1,同样,下排第四结果为1,因此,我们得到了转换结果 如下:
1 1 1 1 Bin
富士自然二进制码与格雷码交换SX系列PLC实现方法:
1. 将自然二进制码转换为格雷码:
根据自然二进制码转换为格雷码的转换规则,实际上是将转换数右转一位,然后与转换数进行变异或操作。程序流程图如下:
保存输入数 TEMP
将TEMP右移一个,保存SHILETEMP
移位后的数据与原始数据不同或
返回异或以后的数据
功能块中的程序如下:
INPUT 输入变量类型为DWORD
TEMP 局部变量类型为DWORD
SHILETEMP 局部变量类型为DWORD
BIN_TO_GRAY 功能块返回变量返回类型DWORD
BIN_TO_GRAY:
TEMP:=INPUT;
SHILETEMP:=SHR_DWORD(TEMP,UNIT#1);
BIN_TO_GRAY:=SHILETEMP XOR INPUT;
2. 格雷代码转换为自然二进制码
根据格雷码转换为自然二进制码的转换规则,实际上是格雷码和二进制码不断变化或操作,也就是说,不断变化或操作不同的位数,如原始数据为32位A,然后先将a向右移动,与自己不同或保留值B,然后继续向右移动a,与B不同或保留aC,依次类推,直到A=到目前为止。程序流程图如下:
保存输入数 TEMP,INPUT1
如果输入为0,直接返回数据0后退出
如果TEMP不等于1,然后循环,否则返回数据
TEMP右移1位,与输入值不断变化或
功能块中的程序如下:
INPUT 输入变量类型为DWORD
TEMP 局部变量类型为DWORD
INPUT1 局部变量类型为DWORD
GRAY_TO_BIN 功能块返回变量返回类型DWORD
GRAY_TO_BIN:
TEMP:=INPUT;
INPUT1:=INPUT;
IF TEMP=DWORD#0 THEN
INPUT1:=DWORD#0;
GRAY_TO_BIN:=INPUT1;
RETURN;
END_IF;
WHILE TEMP<>DWORD#1 DO
TEMP:=SHR_DWORD(TEMP,UINT#1);
INPUT1:=TEMP XOR INPUT1;
END_WHILE;
GRAY_TO_BIN:=INPUT1;
富士的上述代码SX系列PLC因为富士的中试没有问题,中试没有问题SX系列PLC完全支持ST编程代码模式,所以基本上可以应用于西门子而不进行修改S7系列的PLC中。
由于三菱的PLC自然二进制码转换为格雷码指令已经包含在内GRY格雷码转换为自然二进制码指令GBIN,因此,上述代码应用于三菱系列PLC没有意义,请使用三菱PLC由于西门子和富士的指令,本身附带的指令SX系列PLC没有附带的转换指令,所以我写了上来补充SX系列指令不足。