找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
还有,DB6.DBD0是32位的,但是character数据好像只有8位,位数不一样,如何传送到DB7.DBD0里
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
1、为什么要改成character才能正确显示为500?
这就首先要谈存储:存储在计算机(广义的)的一切,都是以二进制为基础。字符型数据是以ASCII码存储的。字符型‘500’存储在计算机是“35H/30H/30H”,按字符一个一个取ASCII码。你可以把你图中的参数类型选为:Hexadecimal。你一定可以看到上面三个字节的数据(理应是4个字符,为什么只显示500这3个字符,你可以研究一下)。字符型数据类型,长度是8位,也就是说按字节寻址,你使用了DB1.DBD0这一包含4个字节的变量,那软件按字节理解为字符。
计算机上存储内容一定,显示为什么数据,依赖你定义的的数据类型。例如PLC内DB1.DD0存储:40H/40H/00H/00H。你把他显示为Decimal,则显示为:+1077936128,若你把它定义为浮点数则是:3.0。(1.1B*2e1=符号位0+指数位10000000B+小数位10000000000000000000000B合计32位)
所以,PLC实际通信接收到的是ASCII码,并不是浮点数本身(500.0的浮点数为43FA0000H)。至于第三方设备怎么把浮点数变化为ASCII码传送出去的,要去看该第三方设备的说明书。
2、设备之间通信交换数据有两种数据格式,一种传递源码也就是直接以16进制数传递,例如Modbus RTU通信,一种是ASCII码。可以从常见的串口调试助手上看到。接收方必须以发送方的方式来理解所接受的信号。通信电缆上传递电平信号形成的数据20H,按ASCII码理解就是空格,按16进制理解就是32.
ACSII传递数据明显比16进制低,32按16进制就是一个字节20H,按ASCII码则需2个字节存储33H/32H.传输效率低了一半。但ASCII可以传递控制字符、符号等。
3、在PLC上要明确字符型和字符串型数据存储格式是不同的。
多个字符型构成的变量,可以理解为字符数组。而字符串存储是除了存储字符串里的每一个字符外,还有一个字节存储其长度,这个字节位于字符串占用存储空间的首字节。
所有的转换功能块都是以字符串为目标,而不是字符数组。因此对字符数组使用功能块,需要在字符数组前一个字节写上字符长度,并且以该字节作为字符串首地址引用在程序中。
4、Char_Int则是将4个ASCII码(连续的4个字节)转换为整数(INT),然后可以使用I-DI、DI-R转换为实数也就是浮点数。
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!