wjk478
级别: 正式会员
精华主题: 0
发帖数量: 5 个
工控威望: 56 点
下载积分: 299 分
在线时间: 5(小时)
注册时间: 2022-11-14
最后登录: 2024-02-05
查看wjk478的 主题 / 回贴
楼主  发表于: 2024-01-29 20:05
请教一下论坛大佬,比如寄存器中的数值:50046其中有效数字是46,放大倍数是10的5次幂即100000那么对应的浮点数值是0.00046
                                               如果数值是:30046其中有效数字是46,放大倍数是10的3次幂即1000那么对应的浮点数值是0.046
怎么实现威纶通触摸屏上显示对应的浮点数值而不是寄存器中的数值?
wjk478
级别: 正式会员
精华主题: 0
发帖数量: 5 个
工控威望: 56 点
下载积分: 299 分
在线时间: 5(小时)
注册时间: 2022-11-14
最后登录: 2024-02-05
查看wjk478的 主题 / 回贴
1楼  发表于: 2024-02-01 09:52
引用
引用第1楼梦雨天涯于2024-01-30 08:20发表的  :
那就把你的数值除以100,找到余数46,然后余数除以100000,得到0.00046就行

放大倍数不是一个固定的值是寄存器数值里决定的是可变的,寄存器里的数值是一个十进制的电压数值
wjk478
级别: 正式会员
精华主题: 0
发帖数量: 5 个
工控威望: 56 点
下载积分: 299 分
在线时间: 5(小时)
注册时间: 2022-11-14
最后登录: 2024-02-05
查看wjk478的 主题 / 回贴
2楼  发表于: 2024-02-01 10:01
引用
引用第3楼gxtmdb82164于2024-01-31 10:39发表的  :
如果只是显示的话,推荐HMI后写个脚本处理,最简单最灵活

是不是触摸屏写段宏指令对读取的数值进行一个数值转换,问题是这个数值转换思路是什么?寄存器内数值首位是决定放大倍数后几位是有效数值,放大倍数决定有效数值的小数位数
wjk478
级别: 正式会员
精华主题: 0
发帖数量: 5 个
工控威望: 56 点
下载积分: 299 分
在线时间: 5(小时)
注册时间: 2022-11-14
最后登录: 2024-02-05
查看wjk478的 主题 / 回贴
3楼  发表于: 2024-02-01 10:07
引用
引用第2楼卓发智能于2024-01-31 10:01发表的  :
分二步,PLC需要运算一下,屏有内差转换设置。

能不能屏直接读取数值对数值进行转换后再在屏上显示出来,只是现在转换的思路是什么?数值中包含放大倍数和有效数值怎么区别转换
wjk478
级别: 正式会员
精华主题: 0
发帖数量: 5 个
工控威望: 56 点
下载积分: 299 分
在线时间: 5(小时)
注册时间: 2022-11-14
最后登录: 2024-02-05
查看wjk478的 主题 / 回贴
4楼  发表于: 2024-02-05 16:12
macro_command main()
unsigned short c,a,e
unsigned char b[5]
float d
GetData(a, "MODBUS RTU (zero-based addressing)", 3x, 2, 1)
//读取寄存器数值如:34567(3是放大倍数,4567为有效数值)
DEC2ASCII(a, b[0], 5)//将34567转为ASCII码
ASCII2FLOAT(b[1], d, 4)//将4567转为浮点数
c=b[0]-48//将3的ASCII码减去48得出数字(放大倍数)
//ASCII2DEC(b[0], c, 1)
POW(10,c,e)//10的c次方赋于e
d=d/e
SetData(d, "Local HMI", LW, 0, 1)
end macro_command
谢谢大佬们的解答帮助,初步程序如上基本实现显示问题