初始化上传
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
using System;
|
||||
|
||||
namespace SharpModbus
|
||||
{
|
||||
public class ModbusF01ReadCoils : IModbusCommand
|
||||
{
|
||||
private readonly byte slave;
|
||||
private readonly ushort address;
|
||||
private readonly ushort count;
|
||||
|
||||
public byte Code { get { return 1; } }
|
||||
public byte Slave { get { return slave; } }
|
||||
public ushort Address { get { return address; } }
|
||||
public ushort Count { get { return count; } }
|
||||
public int RequestLength { get { return 6; } }
|
||||
public int ResponseLength { get { return 3 + ModbusUtils.BytesForBools(count); } }
|
||||
|
||||
public ModbusF01ReadCoils(byte slave, ushort address, ushort count)
|
||||
{
|
||||
this.slave = slave;
|
||||
this.address = address;
|
||||
this.count = count;
|
||||
}
|
||||
|
||||
public void FillRequest(byte[] request, int offset)
|
||||
{
|
||||
request[offset + 0] = slave;
|
||||
request[offset + 1] = 1;
|
||||
request[offset + 2] = ModbusUtils.High(address);
|
||||
request[offset + 3] = ModbusUtils.Low(address);
|
||||
request[offset + 4] = ModbusUtils.High(count);
|
||||
request[offset + 5] = ModbusUtils.Low(count);
|
||||
}
|
||||
|
||||
public object ParseResponse(byte[] response, int offset)
|
||||
{
|
||||
var bytes = ModbusUtils.BytesForBools(count);
|
||||
Tools.AssertEqual(response[offset + 0], slave, "Slave mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 1], 1, "Function mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 2], bytes, "Bytes mismatch got {0} expected {1}");
|
||||
return ModbusUtils.DecodeBools(response, offset + 3, count);
|
||||
}
|
||||
|
||||
public object ApplyTo(IModbusModel model)
|
||||
{
|
||||
return model.getDOs(slave, address, count);
|
||||
}
|
||||
|
||||
public void FillResponse(byte[] response, int offset, object value)
|
||||
{
|
||||
var bytes = ModbusUtils.BytesForBools(count);
|
||||
response[offset + 0] = slave;
|
||||
response[offset + 1] = 1;
|
||||
response[offset + 2] = bytes;
|
||||
var data = ModbusUtils.EncodeBools(value as bool[]);
|
||||
ModbusUtils.Copy(data, 0, response, offset + 3, bytes);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("[ModbusF01ReadCoils Slave={0}, Address={1}, Count={2}]", slave, address, count);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
using System;
|
||||
|
||||
namespace SharpModbus
|
||||
{
|
||||
public class ModbusF02ReadInputs : IModbusCommand
|
||||
{
|
||||
private readonly byte slave;
|
||||
private readonly ushort address;
|
||||
private readonly ushort count;
|
||||
|
||||
public byte Code { get { return 2; } }
|
||||
public byte Slave { get { return slave; } }
|
||||
public ushort Address { get { return address; } }
|
||||
public ushort Count { get { return count; } }
|
||||
public int RequestLength { get { return 6; } }
|
||||
public int ResponseLength { get { return 3 + ModbusUtils.BytesForBools(count); } }
|
||||
|
||||
public ModbusF02ReadInputs(byte slave, ushort address, ushort count)
|
||||
{
|
||||
this.slave = slave;
|
||||
this.address = address;
|
||||
this.count = count;
|
||||
}
|
||||
|
||||
public void FillRequest(byte[] request, int offset)
|
||||
{
|
||||
request[offset + 0] = slave;
|
||||
request[offset + 1] = 2;
|
||||
request[offset + 2] = ModbusUtils.High(address);
|
||||
request[offset + 3] = ModbusUtils.Low(address);
|
||||
request[offset + 4] = ModbusUtils.High(count);
|
||||
request[offset + 5] = ModbusUtils.Low(count);
|
||||
}
|
||||
|
||||
public object ParseResponse(byte[] response, int offset)
|
||||
{
|
||||
var bytes = ModbusUtils.BytesForBools(count);
|
||||
Tools.AssertEqual(response[offset + 0], slave, "Slave mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 1], 2, "Function mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 2], bytes, "Bytes mismatch got {0} expected {1}");
|
||||
return ModbusUtils.DecodeBools(response, offset + 3, count);
|
||||
}
|
||||
|
||||
public object ApplyTo(IModbusModel model)
|
||||
{
|
||||
return model.getDIs(slave, address, count);
|
||||
}
|
||||
|
||||
public void FillResponse(byte[] response, int offset, object value)
|
||||
{
|
||||
var bytes = ModbusUtils.BytesForBools(count);
|
||||
response[offset + 0] = slave;
|
||||
response[offset + 1] = 2;
|
||||
response[offset + 2] = bytes;
|
||||
var data = ModbusUtils.EncodeBools(value as bool[]);
|
||||
ModbusUtils.Copy(data, 0, response, offset + 3, bytes);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("[ModbusF02ReadInputs Slave={0}, Address={1}, Count={2}]", slave, address, count);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
using System;
|
||||
|
||||
namespace SharpModbus
|
||||
{
|
||||
public class ModbusF03ReadHoldingRegisters : IModbusCommand
|
||||
{
|
||||
private readonly byte slave;
|
||||
private readonly ushort address;
|
||||
private readonly ushort count;
|
||||
|
||||
public byte Code { get { return 3; } }
|
||||
public byte Slave { get { return slave; } }
|
||||
public ushort Address { get { return address; } }
|
||||
public ushort Count { get { return count; } }
|
||||
public int RequestLength { get { return 6; } }
|
||||
public int ResponseLength { get { return 3 + ModbusUtils.BytesForWords(count); } }
|
||||
|
||||
public ModbusF03ReadHoldingRegisters(byte slave, ushort address, ushort count)
|
||||
{
|
||||
this.slave = slave;
|
||||
this.address = address;
|
||||
this.count = count;
|
||||
}
|
||||
|
||||
public void FillRequest(byte[] request, int offset)
|
||||
{
|
||||
request[offset + 0] = slave;
|
||||
request[offset + 1] = 3;
|
||||
request[offset + 2] = ModbusUtils.High(address);
|
||||
request[offset + 3] = ModbusUtils.Low(address);
|
||||
request[offset + 4] = ModbusUtils.High(count);
|
||||
request[offset + 5] = ModbusUtils.Low(count);
|
||||
}
|
||||
|
||||
public object ParseResponse(byte[] response, int offset)
|
||||
{
|
||||
var bytes = ModbusUtils.BytesForWords(count);
|
||||
Tools.AssertEqual(response[offset + 0], slave, "Slave mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 1], 3, "Function mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 2], bytes, "Bytes mismatch got {0} expected {1}");
|
||||
return ModbusUtils.DecodeWords(response, offset + 3, count);
|
||||
}
|
||||
|
||||
public object ApplyTo(IModbusModel model)
|
||||
{
|
||||
return model.getWOs(slave, address, count);
|
||||
}
|
||||
|
||||
public void FillResponse(byte[] response, int offset, object value)
|
||||
{
|
||||
var bytes = ModbusUtils.BytesForWords(count);
|
||||
response[offset + 0] = slave;
|
||||
response[offset + 1] = 3;
|
||||
response[offset + 2] = bytes;
|
||||
var data = ModbusUtils.EncodeWords((ushort[])value);
|
||||
ModbusUtils.Copy(data, 0, response, offset + 3, bytes);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("[ModbusF03ReadHoldingRegisters Slave={0}, Address={1}, Count={2}]", slave, address, count);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
using System;
|
||||
|
||||
namespace SharpModbus
|
||||
{
|
||||
public class ModbusF04ReadInputRegisters : IModbusCommand
|
||||
{
|
||||
private readonly byte slave;
|
||||
private readonly ushort address;
|
||||
private readonly ushort count;
|
||||
|
||||
public byte Code { get { return 4; } }
|
||||
public byte Slave { get { return slave; } }
|
||||
public ushort Address { get { return address; } }
|
||||
public ushort Count { get { return count; } }
|
||||
public int RequestLength { get { return 6; } }
|
||||
public int ResponseLength { get { return 3 + ModbusUtils.BytesForWords(count); } }
|
||||
|
||||
public ModbusF04ReadInputRegisters(byte slave, ushort address, ushort count)
|
||||
{
|
||||
this.slave = slave;
|
||||
this.address = address;
|
||||
this.count = count;
|
||||
}
|
||||
|
||||
public void FillRequest(byte[] request, int offset)
|
||||
{
|
||||
request[offset + 0] = slave;
|
||||
request[offset + 1] = 4;
|
||||
request[offset + 2] = ModbusUtils.High(address);
|
||||
request[offset + 3] = ModbusUtils.Low(address);
|
||||
request[offset + 4] = ModbusUtils.High(count);
|
||||
request[offset + 5] = ModbusUtils.Low(count);
|
||||
}
|
||||
|
||||
public object ParseResponse(byte[] response, int offset)
|
||||
{
|
||||
var bytes = ModbusUtils.BytesForWords(count);
|
||||
Tools.AssertEqual(response[offset + 0], slave, "Slave mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 1], 4, "Function mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 2], bytes, "Bytes mismatch got {0} expected {1}");
|
||||
return ModbusUtils.DecodeWords(response, offset + 3, count);
|
||||
}
|
||||
|
||||
public object ApplyTo(IModbusModel model)
|
||||
{
|
||||
return model.getWIs(slave, address, count);
|
||||
}
|
||||
|
||||
public void FillResponse(byte[] response, int offset, object value)
|
||||
{
|
||||
var bytes = ModbusUtils.BytesForWords(count);
|
||||
response[offset + 0] = slave;
|
||||
response[offset + 1] = 4;
|
||||
response[offset + 2] = bytes;
|
||||
var data = ModbusUtils.EncodeWords(value as ushort[]);
|
||||
ModbusUtils.Copy(data, 0, response, offset + 3, bytes);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("[ModbusF04ReadInputRegisters Slave={0}, Address={1}, Count={2}]", slave, address, count);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
using System;
|
||||
|
||||
namespace SharpModbus
|
||||
{
|
||||
public class ModbusF05WriteCoil : IModbusCommand
|
||||
{
|
||||
private readonly byte slave;
|
||||
private readonly ushort address;
|
||||
private readonly bool value;
|
||||
|
||||
public byte Code { get { return 5; } }
|
||||
public byte Slave { get { return slave; } }
|
||||
public ushort Address { get { return address; } }
|
||||
public bool Value { get { return value; } }
|
||||
public int RequestLength { get { return 6; } }
|
||||
public int ResponseLength { get { return 6; } }
|
||||
|
||||
public ModbusF05WriteCoil(byte slave, ushort address, bool state)
|
||||
{
|
||||
this.slave = slave;
|
||||
this.address = address;
|
||||
this.value = state;
|
||||
}
|
||||
|
||||
public void FillRequest(byte[] request, int offset)
|
||||
{
|
||||
request[offset + 0] = slave;
|
||||
request[offset + 1] = 5;
|
||||
request[offset + 2] = ModbusUtils.High(address);
|
||||
request[offset + 3] = ModbusUtils.Low(address);
|
||||
request[offset + 4] = ModbusUtils.EncodeBool(value);
|
||||
request[offset + 5] = 0;
|
||||
}
|
||||
|
||||
public object ParseResponse(byte[] response, int offset)
|
||||
{
|
||||
Tools.AssertEqual(response[offset + 0], slave, "Slave mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 1], 5, "Function mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(ModbusUtils.GetUShort(response, offset + 2), address, "Address mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 4], ModbusUtils.EncodeBool(value), "Value mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 5], 0, "Pad mismatch {0} expected:{1}");
|
||||
return null;
|
||||
}
|
||||
|
||||
public object ApplyTo(IModbusModel model)
|
||||
{
|
||||
model.setDO(slave, address, value);
|
||||
return null;
|
||||
}
|
||||
|
||||
public void FillResponse(byte[] response, int offset, object value)
|
||||
{
|
||||
FillRequest(response, offset);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("[ModbusF05WriteCoil Slave={0}, Address={1}, Value={2}]", slave, address, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
using System;
|
||||
|
||||
namespace SharpModbus
|
||||
{
|
||||
public class ModbusF06WriteRegister : IModbusCommand
|
||||
{
|
||||
private readonly byte slave;
|
||||
private readonly ushort address;
|
||||
private readonly ushort value;
|
||||
|
||||
public byte Code { get { return 6; } }
|
||||
public byte Slave { get { return slave; } }
|
||||
public ushort Address { get { return address; } }
|
||||
public ushort Value { get { return value; } }
|
||||
public int RequestLength { get { return 6; } }
|
||||
public int ResponseLength { get { return 6; } }
|
||||
|
||||
public ModbusF06WriteRegister(byte slave, ushort address, ushort value)
|
||||
{
|
||||
this.slave = slave;
|
||||
this.address = address;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public void FillRequest(byte[] request, int offset)
|
||||
{
|
||||
request[offset + 0] = slave;
|
||||
request[offset + 1] = 6;
|
||||
request[offset + 2] = ModbusUtils.High(address);
|
||||
request[offset + 3] = ModbusUtils.Low(address);
|
||||
request[offset + 4] = ModbusUtils.High(value);
|
||||
request[offset + 5] = ModbusUtils.Low(value);
|
||||
}
|
||||
|
||||
public object ParseResponse(byte[] response, int offset)
|
||||
{
|
||||
Tools.AssertEqual(response[offset + 0], slave, "Slave mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 1], 6, "Function mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(ModbusUtils.GetUShort(response, offset + 2), address, "Address mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(ModbusUtils.GetUShort(response, offset + 4), value, "Value mismatch got {0} expected {1}");
|
||||
return null;
|
||||
}
|
||||
|
||||
public object ApplyTo(IModbusModel model)
|
||||
{
|
||||
model.setWO(slave, address, value);
|
||||
return null;
|
||||
}
|
||||
|
||||
public void FillResponse(byte[] response, int offset, object value)
|
||||
{
|
||||
FillRequest(response, offset);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("[ModbusF06WriteRegister Slave={0}, Address={1}, Value={2}]", slave, address, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using System;
|
||||
|
||||
namespace SharpModbus
|
||||
{
|
||||
public class ModbusF15WriteCoils : IModbusCommand
|
||||
{
|
||||
private readonly byte slave;
|
||||
private readonly ushort address;
|
||||
private readonly bool[] values;
|
||||
|
||||
public byte Code { get { return 15; } }
|
||||
public byte Slave { get { return slave; } }
|
||||
public ushort Address { get { return address; } }
|
||||
public bool[] Values { get { return ModbusUtils.Clone(values); } }
|
||||
public int RequestLength { get { return 7 + ModbusUtils.BytesForBools(values.Length); } }
|
||||
public int ResponseLength { get { return 6; } }
|
||||
|
||||
public ModbusF15WriteCoils(byte slave, ushort address, bool[] values)
|
||||
{
|
||||
this.slave = slave;
|
||||
this.address = address;
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
public void FillRequest(byte[] request, int offset)
|
||||
{
|
||||
FillResponse(request, offset, null);
|
||||
var bytes = ModbusUtils.EncodeBools(values);
|
||||
request[offset + 6] = (byte)bytes.Length;
|
||||
ModbusUtils.Copy(bytes, 0, request, offset + 7, bytes.Length);
|
||||
}
|
||||
|
||||
public object ParseResponse(byte[] response, int offset)
|
||||
{
|
||||
Tools.AssertEqual(response[offset + 0], slave, "Slave mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 1], 15, "Function mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(ModbusUtils.GetUShort(response, offset + 2), address, "Address mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(ModbusUtils.GetUShort(response, offset + 4), values.Length, "Coil count mismatch got {0} expected {1}");
|
||||
return null;
|
||||
}
|
||||
|
||||
public object ApplyTo(IModbusModel model)
|
||||
{
|
||||
model.setDOs(slave, address, values);
|
||||
return null;
|
||||
}
|
||||
|
||||
public void FillResponse(byte[] response, int offset, object value)
|
||||
{
|
||||
response[offset + 0] = slave;
|
||||
response[offset + 1] = 15;
|
||||
response[offset + 2] = ModbusUtils.High(address);
|
||||
response[offset + 3] = ModbusUtils.Low(address);
|
||||
response[offset + 4] = ModbusUtils.High(values.Length);
|
||||
response[offset + 5] = ModbusUtils.Low(values.Length);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("[ModbusF15WriteCoils Slave={0}, Address={1}, Values={2}]", slave, address, values);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using System;
|
||||
|
||||
namespace SharpModbus
|
||||
{
|
||||
public class ModbusF16WriteRegisters : IModbusCommand
|
||||
{
|
||||
private readonly byte slave;
|
||||
private readonly ushort address;
|
||||
private readonly ushort[] values;
|
||||
|
||||
public byte Code { get { return 16; } }
|
||||
public byte Slave { get { return slave; } }
|
||||
public ushort Address { get { return address; } }
|
||||
public ushort[] Values { get { return ModbusUtils.Clone(values); } }
|
||||
public int RequestLength { get { return 7 + ModbusUtils.BytesForWords(values.Length); } }
|
||||
public int ResponseLength { get { return 6; } }
|
||||
|
||||
public ModbusF16WriteRegisters(byte slave, ushort address, ushort[] values)
|
||||
{
|
||||
this.slave = slave;
|
||||
this.address = address;
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
public void FillRequest(byte[] request, int offset)
|
||||
{
|
||||
FillResponse(request, offset, null);
|
||||
var bytes = ModbusUtils.EncodeWords(values);
|
||||
request[offset + 6] = (byte)bytes.Length;
|
||||
ModbusUtils.Copy(bytes, 0, request, offset + 7, bytes.Length);
|
||||
}
|
||||
|
||||
public object ParseResponse(byte[] response, int offset)
|
||||
{
|
||||
Tools.AssertEqual(response[offset + 0], slave, "Slave mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(response[offset + 1], 16, "Function mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(ModbusUtils.GetUShort(response, offset + 2), address, "Address mismatch got {0} expected {1}");
|
||||
Tools.AssertEqual(ModbusUtils.GetUShort(response, offset + 4), values.Length, "Register count mismatch got {0} expected {1}");
|
||||
return null;
|
||||
}
|
||||
|
||||
public object ApplyTo(IModbusModel model)
|
||||
{
|
||||
model.setWOs(slave, address, values);
|
||||
return null;
|
||||
}
|
||||
|
||||
public void FillResponse(byte[] response, int offset, object value)
|
||||
{
|
||||
response[offset + 0] = slave;
|
||||
response[offset + 1] = 16;
|
||||
response[offset + 2] = ModbusUtils.High(address);
|
||||
response[offset + 3] = ModbusUtils.Low(address);
|
||||
response[offset + 4] = ModbusUtils.High(values.Length);
|
||||
response[offset + 5] = ModbusUtils.Low(values.Length);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("[ModbusF16WriteRegisters Slave={0}, Address={1}, Values={2}]", slave, address, values);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user