//-------------------关于标准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/