XD/XL系列PLC 以太网通讯dll

XD/XL系列PLC 以太网通讯dll
//-------------------关于标准ModbusTCP协议与信捷扩展ModbusTcp协议的说明-----------------
//--------------------------------------------------------------------------------------
//-----信捷网口PLC都支持标准的ModbusTCP协议,不过由于modbus协议地址空间有限,PLC有一部分内部对象无法通过标准ModBusTCP协议访问;
//-----从2020年3月份以后的网口PLC固件版本同时支持标准ModbusTCP协议与信捷ModbusTcp扩展协议,早期的版本只支持标准ModbusTCP协议;
//-----信捷ModbusTcp扩展协议在标准的ModbusTCP协议基础上增加了对象类型,扩容了地址范围,可以实现PLC所有内部对象的访问;
//-----为了保障其它功能的正常运行,信捷PLC对ModbusTcp客户端的对象数量做了限制,同时最多支持4个客户端对象的连接,标准协议和扩展协议都一样;
//-----ModbusTcp类指使用标准协议,MTcpExtend类指使用扩展协议;
//--------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ModbusCom
{
    /// <summary>
    /// Modbus功能库应用案例说明
    /// </summary>
    class ModbusExample
    {

        /// <summary>
        /// 针对标准ModbusTcp协议的调用
        /// </summary>
        public void ModbusTcpTest()
        {
            //--初始化ModbusTcp的对象,同时指定目标设备的IP地址,目标端口默认502,默认超时时间2000ms,这些参数也可以自己修改
            ModbusTcp MTcpObj = new ModbusTcp("192.168.88.184");
            MTcpObj.ReciveTimeout = 1500;//修改超时时间,一般不需要修改

            //--与ModbusTCP服务器建立连接,函数会返回建连接结果,如果返回结果成功就可以读写数据了
            Result result = MTcpObj.Connect();

            //--该功能库读写函数都加了锁保护,可以根据需要在多个线程中同时调用
            //--读寄存器操作,可以指定数据的读取格式--
            Result<byte[]> result1 = MTcpObj.ReadRegsByte(ModbusObjType.Reg, 1000, 100);
            Result<float[]> result2 = MTcpObj.ReadRegsFloat(ModbusObjType.InReg, 100, 80);
            //--写寄存器操作,可以指定数据的写入格式--
            ushort[] writeushort1 = new ushort[40];
            writeushort1[01] = 1535;
            writeushort1[12] = 5351;
            writeushort1[16] = 5135;
            writeushort1[31] = 5315;
            Result result3 = MTcpObj.WriteRegsUShort(300, writeushort1);
            short[] writeshort1 = new short[45];
            writeshort1[01] = 1535;
            writeshort1[12] = 5351;
            writeshort1[16] = -5135;
            writeshort1[31] = 5315;
            Result result4 = MTcpObj.WriteRegsShort(300, writeshort1);

            //--读线圈操作---
            Result<bool[]> result5 = MTcpObj.ReadCoil(ModbusObjType.InCoil, 100, 280);
            //--写线圈操作---
            bool[] writebit1 = new bool[200];
            writebit1[11] = true;
            writebit1[33] = true;
            writebit1[54] = true;
            writebit1[61] = true;
            Result result6 = MTcpObj.WriteCoil(100, writebit1);
        }

        /// <summary>
        /// 针对信捷ModbusTcp扩展协议的调用
        /// </summary>
        public void MTcpExtendTest()
        {
            //--初始化MTcpExtend的对象,同时指定目标设备的IP地址,默认超时时间2000ms,这些参数也可以自己修改
            MTcpExtend MTcpObj = new MTcpExtend("192.168.88.184");
            MTcpObj.ReciveTimeout = 1500;//修改超时时间,一般不需要修改

            //--与ModbusTCP服务器建立连接,函数会返回建连接结果,如果返回结果成功就可以读写数据了
            Result result = MTcpObj.Connect();

            //--该功能库读写函数都加了锁保护,可以根据需要在多个线程中同时调用
            //--读寄存器操作,可以指定数据的读取格式--
            Result<byte[]> result1 = MTcpObj.ReadRegsByte(XNetType.D, 1000, 100);
            Result<float[]> result2 = MTcpObj.ReadRegsFloat(XNetType.HD, 100, 80);
            //--写寄存器操作,可以指定数据的写入格式--
            ushort[] writeushort1 = new ushort[40];
            writeushort1[01] = 1535;
            writeushort1[12] = 5351;
            writeushort1[16] = 5135;
            writeushort1[31] = 5315;
            Result result3 = MTcpObj.WriteRegsUShort(XNetType.D,300, writeushort1);
            short[] writeshort1 = new short[45];
            writeshort1[01] = 1535;
            writeshort1[12] = 5351;
            writeshort1[16] = -5135;
            writeshort1[31] = 5315;
            Result result4 = MTcpObj.WriteRegsShort(XNetType.D,300, writeshort1);

            //--读线圈操作---
            Result<bool[]> result5 = MTcpObj.ReadCoil(XNetType.M, 100, 280);
            //--写线圈操作---
            bool[] writebit1 = new bool[200];
            writebit1[11] = true;
            writebit1[33] = true;
            writebit1[54] = true;
            writebit1[61] = true;
            Result result6 = MTcpObj.WriteCoil(XNetType.HM ,100, writebit1);
        }

    }
}

发布者:刘 炼,转转请注明出处:https://college.xinje.net/uncategorized/xd-xlplc-dll/1179/

扫码关注

扫码关注微信

关注我们获取最新资讯

公众号

小程序

使用微信扫码体验小程序

P_USER_微信小程序

 

分享本页
返回顶部