C#调用通讯库通讯多款PLC,三菱西门子

给大伙推荐一个PLC通讯库:HslCommunication.DLL,这个库可以轻便快速的通讯多款PLC设备比如:三菱,西门子,欧姆龙,松下,AB。还封装了MODBUS RTU/TCP协议,是不想拼写报文的工控人们的最佳选择,如还有不懂的可以私聊公众号加群讨论。.

注:此通讯库在7.0版本之前是免费的,但最新版是需要收费的,可以自行选择

1 HslCommunication如何使用 ,我这里用FX3SA-串口做测试说明

先打开自带的测试demo,选择plc对应的协议,我这里用的是三菱fx3sa串口的,进去之后改一下COM口,其他默认就行

C#调用通讯库通讯多款PLC,三菱西门子C#调用通讯库通讯多款PLC,三菱西门子C#调用通讯库通讯多款PLC,三菱西门子

选择寄存器Y0进行读取C#调用通讯库通讯多款PLC,三菱西门子选择寄存器Y0进行写入C#调用通讯库通讯多款PLC,三菱西门子

不单单只能读取的BOOL值,还可以读取其他数据类型的字节,可以自行尝试。

2 C#如何调用这个dll通讯PLC

首先还是将HslCommunication.DLL这个文件放入debug文件夹,然后添加引用并在窗体新增了几个按钮来实现连接plc和读写寄存器功能C#调用通讯库通讯多款PLC,三菱西门子

第一步:引入命名空间,选择PLC对应的型号引入,这里选择三菱C#调用通讯库通讯多款PLC,三菱西门子然后开始对应按钮写入功能,连接前先设置串口参数,连接之后判断是否连接成功,读写寄存器时会有一个返回值,里面包含了本次操作是否成功,读取出来的值,报错之后的错误代码,具体代码如下:

MelsecFxSerial melsecFx;
        private void button4_Click(object sender, EventArgs e)
        {
            // 实例化对象,指定PLC的ip地址和端口号
            melsecFx = new MelsecFxSerial();
            melsecFx.SerialPortInni(sp =>
            {
                sp.PortName = "COM3";
                sp.BaudRate = 9600;
                sp.DataBits = 7;
                sp.StopBits = System.IO.Ports.StopBits.One;
                sp.Parity = System.IO.Ports.Parity.Even;
            });
            melsecFx.Open();//连接
            //判断是否连接成功
            if (melsecFx.IsOpen())
            {
                MessageBox.Show("连接成功");
            }
        }
        private void button5_Click(object sender, EventArgs e)
        {
            //读取单个寄存器Y0,把返回的结果输出到operateResult
            OperateResult<bool> operateResult = melsecFx.ReadBool("Y0");
            if (operateResult.IsSuccess)//判断是否读取成功
            {
                MessageBox.Show("读取结果:"+operateResult.Content.ToString());
            } 
        }
        private void button6_Click(object sender, EventArgs e)
        {
            //置位寄存器Y0
            OperateResult operateResult = melsecFx.Write("Y0",true);
            if (operateResult.IsSuccess)//判断是否写入置位成功
            {
                MessageBox.Show("置位成功");
            }
        }
        private void button7_Click(object sender, EventArgs e)
        {
            //复位寄存器Y0
            OperateResult operateResult = melsecFx.Write("Y0", false);
            if (operateResult.IsSuccess)//判断是否写入置位成功
            {
                MessageBox.Show("复位成功");
            }
        }

文章里讲到的所有文档链接:https://pan.baidu.com/s/1lIZH_GjIU5UKN24m7kxvMg 提取码:gl7c