自学内容网 自学内容网

记录|使用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类型的值。这种方法可以正确地解析字符串中的浮点数,因此不会引发异常。


原文地址:https://blog.csdn.net/qq_41714549/article/details/140660267

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!