记录|使用HslCommunication通讯库链接PLC

9 篇文章 0 订阅
3 篇文章 0 订阅


前言

官方文档:
HslCommunication的在线文档
额外参考文章:
VS使用Nuget教程详解 Visual studio 安装第三方的组件库

     自己学了如何用S7.Net链接PLC后,公司领导希望我会用HslCommunication库链接PLC。所以,学的快的永远有活做啊。。。


一、相关基础知识铺路

1. HslCommunication

  • 它是个通讯库,内部有很多链接方式,不只是可以连接西门子的产品。【但我目前用西门子做记录】
  • 需要掌握一定的C#编程能力

2. NuGet


二、实际链接操作

Step1. 安装HslCommunication

方法1:

在这里插入图片描述

方法2:

Install-Package HslCommunication

在这里插入图片描述


Step2. 引入空间名

    using HslCommunication;
    using HslCommunication.Profinet.Siemens;

Step3. 调用编写方法

我个人是喜欢单独创建个Manager文件夹,在这个文件夹中创建个EquipConrolManager这个类,对连接和连接后的读取方法进行管理。
在这里插入图片描述
在这个EquipControlManager.cs这个类中引入Hsl的空间名后,创建个连接方法,在这个连接方法中进行连接。

using HslCommunication;
using HslCommunication.Profinet.Siemens;

        private SiemensS7Net Plc = null;

        /// <summary>
        /// 连接PLC
        /// </summary>
        /// <param name="ipAddress"></param>
        /// <param name="cpuType"></param>
        /// <returns></returns>
        public string ConnectPLC(string ipAddress, string cpuType)
        {
            try
            {
                SiemensPLCS siemensPLCS = (SiemensPLCS)Enum.Parse(typeof(SiemensPLCS), cpuType); 
                Plc = new SiemensS7Net(siemensPLCS, ipAddress);
                return "连接成功";
            }
            catch (Exception ex)
            {
                return $"连接失败,{ex.Message}";
            }
        }

由于我创建的界面【如下图所示】中,ipAddress和cpuType都是通过文本框来传递的,也就是获得的是string类型的数据,所以上面的代码中要将string的cpuType进行转换为SiemensPLCS类型,这是应为SiemensS7Net的cpuType参数的类型就是SiemensS7Net。
在这里插入图片描述

三、读取操作

1. 注意

  • Hsl的方式进行读取数据的方式,是直接通过DW0,DB

2. OperateResult泛型

以ReadBool()为例,其原本定义为:
OperateResult< bool> ReadBool(string address){……};
返回类型是OperateResult< T >

那么使用ReadBool函数时,需要用个OperateResult< bool>类型的变量接收。例如:

OperateResult<bool> result = ReadBool("地址");

那么此时该如何获取这个bool值呢?需要通过result.Content 属性来实现

bool value = result.Content;

补充下,更常见的写法,是要结合result.IsSuccess属性的。如下:

if(result.IsSuccess)
{
	bool value = result.Content;
}
else
{
	//处理错误情况
	Console.WriteLine( "读取PLC失败,原因:" + result.Message;
	MessageBox.Show(result.Message);
}

3. 自己读取地址时的恶心事

首先,是我学艺不精,弄不懂地址的哪些事。。。后来摸索出了基于HslCommunication读取地址的一些解法。

首先,我想读取DB块中的转换值,地址的偏移量事6.0。
在这里插入图片描述
而我采用的HSl读取函数为:

OperateResult<float> result = Plc.ReadFloat(varAddress);
if (result.IsSuccess)
{
    return result.Content;
}

这里的传入地址值真的太磨人了,ReadFloat原函数如下:
在这里插入图片描述
后来我发现一个可以确认我 这个地址到底是D6还是W6的方法,就是将这个值应用到博图的Main函数中,如下:
在这里插入图片描述
可以看到,相对地址是%DB1.DBD6,绝对地址是DB1.DBD6。
接着我将%DB1.DBD6,DB1.DBD6,DBD6,D6这些值带进去实验,结果DB1.DBD6通过了。

方法虽然笨了些,但是真的是傻瓜式的操作了。


自问自答

HslCommunication库和S7.net之间有啥区别,为啥我感觉自己用它链接PLC s71200时候很相似?这两个库是包含关系吗

搜索结果:没有直接的包含关系,但HslCommunication库中包含了一个用于操作西门子S7协议的SiemensS7Net类


更新时间

  • 2024.07.23:创建
  • 2024.07.24:补充读取操作和地址填写
  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值