[西门子] 西门子1200的数据转换比较问题

[复制链接]
查看263 | 回复0 | 2024-7-22 09:03:56 | 显示全部楼层 |阅读模式

PLC内的数据分为很多种类型,如BOOL,CHAR,INT,DINT ,REAL,LREAL,STRING等等。
有的数据类型可以互相转换
如INT类型可以隐式转换为DINT类型。
DINT类型也可以显式转换为INT类型。



在PLC中新建立一个DB块,用于存放数据



由于在PLC内,INT类型占用16Bit,而DINT类型占用32Bit,则可以通过将INT类型直接赋值给DINT类型即可,不会报警告和错误。


若将32Bit的数据放置到16Bit的数据中,则会有提示。

代码下面有一条黄色波浪线,代表警告,此操作会导致数据丢失。

若我们定义的DINT类型范围为0-1000,小于INT类型的数据长度,则完全可以在不产生警告的情况下,将DINT数据转换为INT类型数据,这就用到显式转换。
如下图所示,当我们知道我们需要转换的数据可能会存在精度问题,并且可以接受由于精度问题导致的数据丢失,则系统不会给我们警告。

此条程序和上条的作用一致,通过使用DINT_TO_INT方法,将DINT类型的dintTemp显式转换为INT类型的intTemp



然而,并不是所有的数据都适用这种方式,以下方式:

以下方法,介绍如何进行WORD类型的REAL类型高16Bit和REAL类型数据进行比较


在设备调试中,需要和设备B进行交互,通过读取设备B内的数据判断是否将数据发送给B设备。发送给设备B的数据只能是REAL类型,然而,从设备B侧读取的数据,只能是16位WORD类型。


这意味着,当我写入设备数据为REAL类型的"1.0"我读取此地址的数据只是高16Bit和低16Bit的数据。


由于REAL类型的“1.0”存放的数据只是在高16Bit,低16Bit为0,所以,仅仅需要比较高16Bit和REAL类型“1.0”的关系即可。



PLC中有可按位寻址的寄存器M,例如M100,可以定义MW100和MD100,定义REAL类型的MD100,将REAL类型的1.0传送到MD100,即可实现读取MW100和仪表读取上来的16Bit数据进行比较。



若通过类型转换,将读取上来的16Bit数据通过INT_TO_REAL方式转换,转换的结果并非需要比较的数值。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则