pjf
級(jí)別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 640 個(gè)
工控威望: 714 點(diǎn)
下載積分: 2049 分
在線時(shí)間: 290(小時(shí))
注冊(cè)時(shí)間: 2007-01-11
最后登錄: 2024-12-17
查看pjf的 主題 / 回貼
樓主  發(fā)表于: 2008-04-10 20:42
各位老師格雷碼和二進(jìn)制有什么區(qū)別,怎么轉(zhuǎn)換.
cvlsam
富士低壓,POD(觸摸屏),PLC專賣
級(jí)別: VIP會(huì)員

精華主題: 3 篇
發(fā)帖數(shù)量: 6777 個(gè)
工控威望: 38380 點(diǎn)
下載積分: 4203 分
在線時(shí)間: 9537(小時(shí))
注冊(cè)時(shí)間: 2006-09-13
最后登錄: 2024-12-22
查看cvlsam的 主題 / 回貼
1樓  發(fā)表于: 2008-04-10 21:25
我使用富士的SPH系列編輯的程式,因爲(wèi)富士的SPH符合IEC61131-3編程規(guī)範(fàn),因此依據(jù)如此改爲(wèi)其它品牌的PLC也十分之方便。
在精確定位控制系統(tǒng)中,為了提高控制精度,準(zhǔn)確測(cè)量控制對(duì)象的位置是十分重要的。目前,測(cè)量位置的方法主要有2種,其一是使用位置傳感器,此方法精度高,但是在多路,長(zhǎng)距離位置監(jiān)控系統(tǒng)中,由于成本昂貴且安裝困難,因此并不實(shí)用。其二是采用光電軸角編碼器進(jìn)行精確位置控制,光電軸角編碼器根據(jù)其刻度方法及信號(hào)輸出形式,可分為增量式、絕對(duì)式以及混合式三種。而絕對(duì)式編碼器是直接輸出數(shù)字量的傳感器,它是利用自然二進(jìn)制或循環(huán)二進(jìn)制(格雷碼)方式進(jìn)行光電轉(zhuǎn)換的,編碼的設(shè)計(jì)一般是采用自然二進(jìn)制碼、循環(huán)二進(jìn)制碼、二
進(jìn)制補(bǔ)碼等。特點(diǎn)是不要計(jì)數(shù)器,在轉(zhuǎn)軸的任意位置都可讀出一個(gè)固定的與位置相對(duì)應(yīng)的數(shù)字碼;抗干擾能力強(qiáng),沒用累積誤差;電源切斷后位置信息不會(huì)丟失,但分辨率是由二進(jìn)制的位數(shù)決定的,根據(jù)不同的精度要求,可以選擇不同的分辨率即位數(shù)。目前有10 位、11 位、12 位、13 位、14 位或更高位等多種。其中采用循環(huán)二進(jìn)制編碼(即格雷碼)的絕對(duì)式編碼器,其輸出信號(hào)是一種數(shù)字排序,不是權(quán)重碼,每一位沒有確定的大小,不能直接進(jìn)行比較大小和算術(shù)運(yùn)算,也不能直接轉(zhuǎn)換成其他信號(hào),要經(jīng)過一次碼變換,變成自然二進(jìn)制碼,在由上位機(jī)讀取以實(shí)現(xiàn)相應(yīng)的控制。而在碼制變換中有不同的處理方式,本文著重介紹富士SX系列中使用編程的方法對(duì)二進(jìn)制格雷碼與自然二進(jìn)制碼的互換。

一、格雷碼(又叫循環(huán)二進(jìn)制碼或反射二進(jìn)制碼)介紹
在數(shù)字系統(tǒng)中只能識(shí)別0 和1,各種數(shù)據(jù)要轉(zhuǎn)換為二進(jìn)制代碼才能進(jìn)行處理,格雷碼是一種無權(quán)碼,采用絕對(duì)編碼方式,典型格雷碼是一種具有反射特性和循環(huán)特性的單步自補(bǔ)碼,它的循環(huán)、單步特性消除了隨機(jī)取數(shù)時(shí)出現(xiàn)重大誤差的可能,它的反射、自補(bǔ)特性使得求反非常方便。格雷碼屬于可靠性編碼,是一種錯(cuò)誤最小化的編碼方式,因?yàn),自然二進(jìn)制碼可以直接由數(shù)/模轉(zhuǎn)換器轉(zhuǎn)換成模擬信號(hào),但某些情況,例如從十進(jìn)制的3 轉(zhuǎn)換成4 時(shí)二進(jìn)制碼的每一位都要變,使數(shù)字電路產(chǎn)生很大的尖峰電流脈沖。而格雷碼則沒有這一缺點(diǎn),它是一種數(shù)字排序系統(tǒng),其中的所有相鄰整數(shù)在它們的數(shù)字表示中只有一個(gè)數(shù)字不同。它在任意兩個(gè)相鄰的數(shù)之間轉(zhuǎn)換時(shí),只有一個(gè)數(shù)位發(fā)生變化。它大大地減少了由一個(gè)狀態(tài)到下一個(gè)狀態(tài)時(shí)邏輯的混淆。另外由于最大數(shù)與最小數(shù)之間也僅一個(gè)數(shù)不同,故通常又叫格雷反射碼或循環(huán)碼。下表為幾種自然二進(jìn)制碼與格雷碼的對(duì)照表:

十進(jìn)制數(shù)
自然二進(jìn)制
格雷碼
十進(jìn)制
自然二進(jìn)制
格雷碼
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

二、二進(jìn)制格雷碼與自然二進(jìn)制碼的互換

1、自然二進(jìn)制碼轉(zhuǎn)換成二進(jìn)制格雷碼
自然二進(jìn)制碼轉(zhuǎn)換成二進(jìn)制格雷碼,其法則是保留自然二進(jìn)制碼的最高位作為格雷碼的最高位,而次高位格雷碼為二進(jìn)制碼的高位與次高位相異或,而格雷碼其余各位與次高位的求法相類似。
例如:
自然二進(jìn)制編碼如下:
1
0
0
1
那么轉(zhuǎn)換為格雷碼的方法是:保留最高位1,然后將第二位0與第一位1做異或操作,第三位的0與第二位的0做異或操作,第四位的1與第三位的0做異或操作,得到結(jié)果如下:
1  1  0  1  Gray


2、二進(jìn)制格雷碼轉(zhuǎn)換成自然二進(jìn)制碼
二進(jìn)制格雷碼轉(zhuǎn)換成自然二進(jìn)制碼,其法則是保留格雷碼的最高位作為自然二進(jìn)制碼的最高位,而次高位自然二進(jìn)制碼為高位自然二進(jìn)制碼與次高位格雷碼相異或,而自然二進(jìn)制碼的其余各位與次高位自然二進(jìn)制碼的求法相類似。
例如將格雷碼1000轉(zhuǎn)換為自然二進(jìn)制碼:

1
0
0
0
1
1
1
1
上排為格雷碼,下排為自然二進(jìn)制,從左到右分別為1~4位
將上排的第一位高位作為自然二進(jìn)制的最高位,因此在下排的第一位填入1,然后以上排第二位與下排第一位做異或操作,得到下排第二位結(jié)果為1,將上排第三位與下排第二位做異或操作,得到下排第三位的結(jié)果為1,同理,下排第四位的結(jié)果為1,因此,我們得到了轉(zhuǎn)換結(jié)果 如下:
1  1  1  1  Bin

三、自然二進(jìn)制碼與格雷碼互換在富士SX系列PLC中的實(shí)現(xiàn)方法:

1. 自然二進(jìn)制碼轉(zhuǎn)換為格雷碼:
根據(jù)自然二進(jìn)制碼轉(zhuǎn)換為格雷碼的轉(zhuǎn)換規(guī)則,實(shí)際上就是將轉(zhuǎn)換數(shù)右移一位后與轉(zhuǎn)換數(shù)做異或操作。程序流程圖如下:

          保存輸入數(shù) TEMP

將TEMP右移一位,保存SHILETEMP

將移位后的數(shù)據(jù)與原數(shù)據(jù)作異或

返回異或后的數(shù)據(jù)

功能塊中的程序如下:
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. 格雷碼轉(zhuǎn)換為自然二進(jìn)制碼
根據(jù)格雷碼轉(zhuǎn)換為自然二進(jìn)制碼的轉(zhuǎn)換規(guī)則,實(shí)際上就是不斷的將格雷碼與二進(jìn)制數(shù)做異或操作,也就是說,不斷的和本身的不同位數(shù)做異或操作,如原數(shù)據(jù)為32位的A,那么先將A向右移動(dòng)一位,與本身進(jìn)行異或,然后保留值為B,那么繼續(xù)將A向右移動(dòng)一位,與B進(jìn)行異或,保留為C,依次類推,直到A=1為止。程序流程圖如下:

保存輸入數(shù)  TEMP,INPUT1

如果輸入數(shù)為0,那么直接返回?cái)?shù)據(jù)0后退出

如果TEMP不等于1,那么循環(huán),否則返回?cái)?shù)據(jù)

        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中試驗(yàn)沒有問題,由于富士的SX系列PLC完全支持ST代碼方式的編程,因此基本上可以不做修改的應(yīng)用在西門子的S7系列的PLC中。
由于三菱的PLC中已經(jīng)包含了自然二進(jìn)制碼轉(zhuǎn)換為格雷碼指令GRY以及格雷碼轉(zhuǎn)換為自然二進(jìn)制碼指令GBIN,因此上述代碼應(yīng)用于三菱系列的PLC已經(jīng)沒有意義,請(qǐng)使用三菱PLC本身附帶的指令,因?yàn)槲鏖T子以及富士的SX系列PLC并沒有附帶轉(zhuǎn)換指令,因此本人書寫了上述代碼用于補(bǔ)充SX系列的指令不足。
sjm213
有小知識(shí),無大學(xué)問。
級(jí)別: 論壇版主

精華主題: 7 篇
發(fā)帖數(shù)量: 5212 個(gè)
工控威望: 7436 點(diǎn)
下載積分: 158993 分
在線時(shí)間: 3172(小時(shí))
注冊(cè)時(shí)間: 2007-11-21
最后登錄: 2024-12-22
查看sjm213的 主題 / 回貼
2樓  發(fā)表于: 2008-04-11 09:33
很少見到,沒有注意過。
向樓上致敬,太詳細(xì)了。
wanghuhong
級(jí)別: 網(wǎng)絡(luò)英雄

精華主題: 2 篇
發(fā)帖數(shù)量: 1546 個(gè)
工控威望: 10487 點(diǎn)
下載積分: 10861 分
在線時(shí)間: 903(小時(shí))
注冊(cè)時(shí)間: 2006-12-31
最后登錄: 2024-12-22
查看wanghuhong的 主題 / 回貼
3樓  發(fā)表于: 2008-04-11 10:56
[font=宋體]

[size=7頂了,沒看到過.
zhengyueyong
級(jí)別: *
精華主題: * 篇
發(fā)帖數(shù)量: * 個(gè)
工控威望: * 點(diǎn)
下載積分: * 分
在線時(shí)間: (小時(shí))
注冊(cè)時(shí)間: *
最后登錄: *
查看zhengyueyong的 主題 / 回貼
4樓  發(fā)表于: 2008-04-11 11:08
引用
引用第2樓sjm213于2008-04-11 09:33發(fā)表的  :
很少見到,沒有注意過。
向樓上致敬,太詳細(xì)了。
雪花飄飄
級(jí)別: VIP會(huì)員

精華主題: 1 篇
發(fā)帖數(shù)量: 2620 個(gè)
工控威望: 2044 點(diǎn)
下載積分: 6759 分
在線時(shí)間: 3548(小時(shí))
注冊(cè)時(shí)間: 2007-09-03
最后登錄: 2024-12-17
查看雪花飄飄的 主題 / 回貼
5樓  發(fā)表于: 2008-04-11 14:39
向一樓致敬。很好呀。
pjf
級(jí)別: 家園?
精華主題: 0
發(fā)帖數(shù)量: 640 個(gè)
工控威望: 714 點(diǎn)
下載積分: 2049 分
在線時(shí)間: 290(小時(shí))
注冊(cè)時(shí)間: 2007-01-11
最后登錄: 2024-12-17
查看pjf的 主題 / 回貼
6樓  發(fā)表于: 2008-04-11 20:01
謝謝這位cvlsam老師,向您致敬
大俠來也
級(jí)別: *
精華主題: * 篇
發(fā)帖數(shù)量: * 個(gè)
工控威望: * 點(diǎn)
下載積分: * 分
在線時(shí)間: (小時(shí))
注冊(cè)時(shí)間: *
最后登錄: *
查看大俠來也的 主題 / 回貼
7樓  發(fā)表于: 2008-04-12 00:23
看看就好
542868779
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 183 個(gè)
工控威望: 276 點(diǎn)
下載積分: 444 分
在線時(shí)間: 303(小時(shí))
注冊(cè)時(shí)間: 2008-03-01
最后登錄: 2024-12-21
查看542868779的 主題 / 回貼
8樓  發(fā)表于: 2008-04-16 16:59
引用
引用第7樓pjf于2008-04-11 20:01發(fā)表的  :
謝謝這位cvlsam老師,向您致敬
wanglong
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 307 個(gè)
工控威望: 414 點(diǎn)
下載積分: 1532 分
在線時(shí)間: 407(小時(shí))
注冊(cè)時(shí)間: 2008-04-20
最后登錄: 2023-10-24
查看wanglong的 主題 / 回貼
9樓  發(fā)表于: 2008-04-21 21:18
高手。向你致敬