看到我的箱子里有一块信捷PLC(XC3-60),于是接一个绝对值编码器玩玩 点击:3010 | 回复:5



乖乖小笨熊

    
  • 精华:2帖
  • 求助:0帖
  • 帖子:1210帖 | 11287回
  • 年度积分:2461
  • 历史总积分:62658
  • 注册:2006年8月05日
发表于:2017-03-25 21:21:15
楼主

看到我的箱子里有一块信捷PLC(XC3-60),于是接一个绝对值编码器玩玩:

主要测试语言编程处理格雷码(其实信捷本身带有格雷码转换指令)


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进行异或,保留为C,依次类推,直到A=1为止。程序流程图如下:

保存输入数  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;

上述代码在信捷XC3系列PLC中试验没有问题

1分不嫌少!


楼主最近还看过



今生缘

  • [版主]
  • 精华:45帖
  • 求助:22帖
  • 帖子:4835帖 | 10148回
  • 年度积分:78
  • 历史总积分:111147
  • 注册:2011年3月02日
发表于:2017-03-25 22:37:18
1楼

真会玩,东西也不少           

矛头小子

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 180回
  • 年度积分:0
  • 历史总积分:554
  • 注册:2009年6月16日
发表于:2017-04-18 16:51:02
2楼

楼主技术过硬!!!!!!

fuyin345

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 219回
  • 年度积分:0
  • 历史总积分:110
  • 注册:2014年6月11日
发表于:2018-04-21 15:30:39
3楼
真会玩,东西也不少  

lai晓

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 19回
  • 年度积分:0
  • 历史总积分:76
  • 注册:2018年8月11日
发表于:2018-08-11 15:11:18
4楼

非常感谢楼主分享 谢谢

wei0864

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 61回
  • 年度积分:0
  • 历史总积分:101
  • 注册:2018年8月13日
发表于:2018-08-21 08:40:33
5楼

谢谢楼主分享!!!!!


热门招聘
相关主题

官方公众号

智造工程师