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

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值