一路向前hg
相互学习,共同进步!
级别: 略有小成
精华主题: 0
发帖数量: 229 个
工控威望: 303 点
下载积分: 917 分
在线时间: 145(小时)
注册时间: 2019-12-07
最后登录: 2024-08-04
查看一路向前hg的 主题 / 回贴
楼主  发表于: 2024-07-16 09:36
各位工控友友,有做过总线通讯ABB机器人通讯负数的案例吗,想半天没想到怎么转换。浮点数倒简单,总线通讯给整数 ABB侧除100给num数据就可以了,但负数没想到怎么处理,求大神解
斗志不能低
快乐修狗
级别: 正式会员
精华主题: 0
发帖数量: 12 个
工控威望: 57 点
下载积分: 2144 分
在线时间: 29(小时)
注册时间: 2023-02-07
最后登录: 2024-11-07
查看快乐修狗的 主题 / 回贴
1楼  发表于: 2024-07-16 16:50
加一个符号位,if 负数  then   Y=0-X  else  Y=X
楼主留言:
感谢分享!
叶上初阳
级别: 正式会员
精华主题: 0
发帖数量: 21 个
工控威望: 67 点
下载积分: 106 分
在线时间: 7(小时)
注册时间: 2024-03-08
最后登录: 2024-11-14
查看叶上初阳的 主题 / 回贴
2楼  发表于: 2024-07-17 08:31
简单点的用IF判断个大于0小于0,大于零直接输出,小于0用abs做个绝对值输出,再输出个正数负数信号,到了输入端再转换正负数。复杂点应该不用另外另外加正负信号,得把正负数用byte表示,转换成二进制做个bit的移位,前边设置一个判断正负,之后用01表示正负值移位保存到byte里,再转换回到十进制,应该不会超出组信号的表示范围,想到了这么个法子,不知道行不行,我一会试试去。
楼主留言:
热心助人!
真实的你,在于怎么选择。。。工业机器人
叶上初阳
级别: 正式会员
精华主题: 0
发帖数量: 21 个
工控威望: 67 点
下载积分: 106 分
在线时间: 7(小时)
注册时间: 2024-03-08
最后登录: 2024-11-14
查看叶上初阳的 主题 / 回贴
3楼  发表于: 2024-07-17 10:12
不用byte打包数据,多此一举,直接移位就行,组输出范围不够扩一下。
      IF a_num_test1>=0 THEN
            b_num_test1:=0;
            c_dnum_test1:=BitLShDnum(NumToDnum(b_num_test1),12);
            c_dnum_test1:=BitOrDnum(c_dnum_test1,NumToDnum(a_num_test1));
            d_num_test1:=DnumToNum(c_dnum_test1);
            SetGO io_gout_num,d_num_test1;
      ELSE
            b_num_test1:=1;
            c_dnum_test1:=BitLShDnum(NumToDnum(b_num_test1),12);
            e_num_test1:=Abs(a_num_test1);
            c_dnum_test1:=BitOrDnum(c_dnum_test1,NumToDnum(e_num_test1));
            d_num_test1:=DnumToNum(c_dnum_test1);
            SetGO io_gout_num,d_num_test1;
      ENDIF
大概这么个意思,只需要一个信号,不需要分正负两种信号输出。但是相当于做了个编码,得在PLC端解码。
楼主留言:
好贴好贴!
本帖最近评分记录:
  • 下载积分:+1(捡到一块钱) 热心助人!
  • 真实的你,在于怎么选择。。。工业机器人