欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 记录|使用HslCommunication库进行写入Real数据的坑

记录|使用HslCommunication库进行写入Real数据的坑

2024/10/24 17:33:12 来源:https://blog.csdn.net/qq_41714549/article/details/140660267  浏览:    关键词:记录|使用HslCommunication库进行写入Real数据的坑

项目场景:

现在已经通过HslCommunication连接上了PLC,需要对DB1.DBD10的位置处进行数据写入。
在这里插入图片描述


问题描述

但是进行将12.2写入指定位置DB1.DBD10时,发现无法从博图中实时检测到数据的写入。
下面是我当时错误的数据写入方法:【主要是值varValue的转换处理问题】

WriteDataToPLC函数,这是自己封装的,调用这个函数时,给varValue传入的是“12.2”,即objcet varValue = "12,2"

        public string WriteDataToPLC(string varAddress, object varValue,string type){switch (type){case "bool": this.Plc.Write(varAddress, (bool)varValue);break;case "float":this.Plc.Write(varAddress,float)varValue); break;}}

发现运行错误,去查看底层的Write()函数,发现它最终传的值是float类型,而我上面的(float)varValue不也是强制转换为float类型嘛。

在这里插入图片描述

解决方案:

后来我想到,还有一种方式,就改成下面的方式,结果运行通了【如下代码}

        public string WriteDataToPLC(string varAddress, object varValue,string type){switch (type){case "bool": this.Plc.Write(varAddress, (bool)varValue);break;case "float":this.Plc.Write(varAddress, float.Parse(varValue.ToString())); break;}}

原因分析:

为什么我在C#编程中,Object varValue="12.2"的时候,(float)varValue就解析不了成float类型,而float.Parse(varValue.ToString()) 却可以呢

人工智能回答:

在C#中,当你使用(float)varValue进行类型转换时,实际上是将一个Object类型的变量强制转换为float类型。然而,由于Object类型的变量实际上存储的是一个字符串对象,而不是一个浮点数,所以这种转换会导致运行时错误。

而当你使用float.Parse(varValue.ToString())时,首先通过varValue.ToString()将Object类型的变量转换为字符串表示形式,然后使用float.Parse()方法将字符串解析为float类型的值。这种方法可以正确地解析字符串中的浮点数,因此不会引发异常。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com