lander
级别: 探索解密
精华主题: 0
发帖数量: 111 个
工控威望: 148 点
下载积分: 762 分
在线时间: 39(小时)
注册时间: 2021-02-20
最后登录: 2024-11-11
查看lander的 主题 / 回贴
楼主  发表于: 2023-03-11 08:43
我请教一个问题,我这边需要把INT (有符号的整数 -32768----32767)转换成WORD(0-65535),编一个子程序也可以,如何操作?
lander
级别: 探索解密
精华主题: 0
发帖数量: 111 个
工控威望: 148 点
下载积分: 762 分
在线时间: 39(小时)
注册时间: 2021-02-20
最后登录: 2024-11-11
查看lander的 主题 / 回贴
1楼  发表于: 2023-03-11 10:28
引用
引用第1楼圆又圆于2023-03-11 09:01发表的  :
可以试试转成ascii,再转成十六进制

请具体指导一下,谢谢。
lander
级别: 探索解密
精华主题: 0
发帖数量: 111 个
工控威望: 148 点
下载积分: 762 分
在线时间: 39(小时)
注册时间: 2021-02-20
最后登录: 2024-11-11
查看lander的 主题 / 回贴
2楼  发表于: 2023-03-11 10:47
我其实是在做一个modbus RTU 通讯,写入只能是一个16位的数,我输入是实数,然后我转换成整数,当我输入超过32767是,它就变负了,(-32768---+32767),然后这个负数写进去,设备就不认识了,所以我想问问如何才能写进去变成0-65535,而不是-32768-+32767  ,普通的整数VW  好像不能大于32767,大了就变负数。
lander
级别: 探索解密
精华主题: 0
发帖数量: 111 个
工控威望: 148 点
下载积分: 762 分
在线时间: 39(小时)
注册时间: 2021-02-20
最后登录: 2024-11-11
查看lander的 主题 / 回贴
3楼  发表于: 2023-03-11 11:06
这是通讯协议,我需要读和写
lander
级别: 探索解密
精华主题: 0
发帖数量: 111 个
工控威望: 148 点
下载积分: 762 分
在线时间: 39(小时)
注册时间: 2021-02-20
最后登录: 2024-11-11
查看lander的 主题 / 回贴
4楼  发表于: 2023-03-11 11:10
引用
引用第5楼lander于2023-03-11 11:06发表的  :
这是通讯协议,我需要读和写
附件: CS系列产品研华MODBUS协议1.1.pdf (235 K) 下载次数:48
网站提示: 请不要用迅雷下载附件,容易出错
lander
级别: 探索解密
精华主题: 0
发帖数量: 111 个
工控威望: 148 点
下载积分: 762 分
在线时间: 39(小时)
注册时间: 2021-02-20
最后登录: 2024-11-11
查看lander的 主题 / 回贴
5楼  发表于: 2023-03-11 11:28
引用
引用第8楼hstec2002于2023-03-11 11:23发表的  :
直接十六进制读写不香?

因为我要在触摸屏上设置10进制数,比如200ML,我不能直接设置一个16进制,那样他们看不懂
lander
级别: 探索解密
精华主题: 0
发帖数量: 111 个
工控威望: 148 点
下载积分: 762 分
在线时间: 39(小时)
注册时间: 2021-02-20
最后登录: 2024-11-11
查看lander的 主题 / 回贴
6楼  发表于: 2023-03-13 21:52
还是没搞出来,困惑了。
lander
级别: 探索解密
精华主题: 0
发帖数量: 111 个
工控威望: 148 点
下载积分: 762 分
在线时间: 39(小时)
注册时间: 2021-02-20
最后登录: 2024-11-11
查看lander的 主题 / 回贴
7楼  发表于: 2023-03-14 15:00
引用
引用第11楼bdmogui于2023-03-14 08:36发表的  :
可能不太明白你要表达的意思,VW既可以是INT也可是WORD,可以试试符号变量,不要用绝对地址

我刚刚去用你的方法,用符号变量,200SMART 默认就是有符号的,还是不行。
lander
级别: 探索解密
精华主题: 0
发帖数量: 111 个
工控威望: 148 点
下载积分: 762 分
在线时间: 39(小时)
注册时间: 2021-02-20
最后登录: 2024-11-11
查看lander的 主题 / 回贴
8楼  发表于: 2023-03-14 15:38
即使你手动输入16进制的数,是可以写进去了,但是读出瞬时流量是一个大于32767的数的时候,也不能参与运算,不能转换成浮点,因为大于32767就报错了,其实错误就是在于触摸屏写入一个大于32767的浮点数,就无法进行公式换算,一旦转换成整数,就报错。不知道还有没有好的办法,已经问了很多人了。
lander
级别: 探索解密
精华主题: 0
发帖数量: 111 个
工控威望: 148 点
下载积分: 762 分
在线时间: 39(小时)
注册时间: 2021-02-20
最后登录: 2024-11-11
查看lander的 主题 / 回贴
9楼  发表于: 2023-03-16 10:13
引用
引用第15楼hstec2002于2023-03-16 08:55发表的  :
看是否你想要的。

感谢兄台给的方案,已经搞定,再次感谢。
lander
级别: 探索解密
精华主题: 0
发帖数量: 111 个
工控威望: 148 点
下载积分: 762 分
在线时间: 39(小时)
注册时间: 2021-02-20
最后登录: 2024-11-11
查看lander的 主题 / 回贴
10楼  发表于: 2023-03-18 08:11
引用
引用第17楼zyt888于2023-03-17 14:52发表的  :
你符号定义成Word数据类型就可以,如果想在程序中进行计算,就要转成DINT后再使用
或者直接使用DINT数据,多少范围都满足你用,然后用mov指令把高字转到通讯寄存器里

感谢指点,谢谢。