| 作者 | 主题 |
|---|---|
|
xinshiji168 侠圣
经验值:2369 发帖数:664 精华帖:1 |
楼主
主题:绝对值编码器接1200的问题
绝对值编码器接在卷扬机轴端,想在程序中看到小车移动的距离,10位格雷码,程序该怎么做呢?谢谢了!
|
|
伊默 至圣 经验值:19238 发帖数:4259 精华帖:118 |
5楼
主题:回复:绝对值编码器接1200的问题
格雷码转二进制的方法很多的,网上一查就知道了,自己写个FB/FC就可以转换了。
以下是我写的一个FC,用来将格雷码转换成二进制, 提供了三种方法,不过我实际在现场只用了而且只验证了第一种方法。 FUNCTION "FC_GrayToDecimal" : UInt { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_INPUT GrayInput : UInt; END_VAR VAR_TEMP Num : Int; TempResult : UInt; END_VAR BEGIN (*Method 1*) #TempResult := #GrayInput; #TempResult := #TempResult XOR SHR(IN:=#TempResult,N:=16); #TempResult := #TempResult XOR SHR(IN:=#TempResult,N:=8 ); #TempResult := #TempResult XOR SHR(IN:=#TempResult,N:=4 ); #TempResult := #TempResult XOR SHR(IN:=#TempResult,N:=2 ); #TempResult := #TempResult XOR SHR(IN:=#TempResult,N:=1 ); #FC_GrayToDecimal := #TempResult; (* (*Method 2*) #TempResult := #GrayInput; FOR #Num := 1 TO 15 DO #TempResult := #TempResult XOR SHR(IN:=#TempResult,N:=1 ); END_FOR; #FC_GrayToDecimal := #TempResult; (*Method 3*) #TempResult.X15 := #GrayInput.X15; #TempResult.X14 := #GrayInput.X14 XOR #TempResult.X15; #TempResult.X13 := #GrayInput.X13 XOR #TempResult.X14; #TempResult.X12 := #GrayInput.X12 XOR #TempResult.X13; #TempResult.X11 := #GrayInput.X11 XOR #TempResult.X12; #TempResult.X10 := #GrayInput.X10 XOR #TempResult.X11; #TempResult.X9 := #GrayInput.X9 XOR #TempResult.X10; #TempResult.X8 := #GrayInput.X8 XOR #TempResult.X9 ; #TempResult.X7 := #GrayInput.X7 XOR #TempResult.X8 ; #TempResult.X6 := #GrayInput.X6 XOR #TempResult.X7 ; #TempResult.X5 := #GrayInput.X5 XOR #TempResult.X6 ; #TempResult.X4 := #GrayInput.X4 XOR #TempResult.X5 ; #TempResult.X3 := #GrayInput.X3 XOR #TempResult.X4 ; #TempResult.X2 := #GrayInput.X2 XOR #TempResult.X3 ; #TempResult.X1 := #GrayInput.X1 XOR #TempResult.X2 ; #TempResult.X0 := #GrayInput.X0 XOR #TempResult.X1 ; *) END_FUNCTION
I can do it
|