Dziękuję za wszelką pomoc. Już poradziłem sobie.
Dla zainteresowanych podaje kod:
short[] values = new short[Convert.ToInt32(1)]; //nie wiem co dokładnie ma być tutaj, ale działa.
ushort pollStart = Convert.ToUInt16( rejestr początkowy );
ushort pollLength = Convert.ToUInt16( ilosc rejestrow );
if (mb.Open(Port, Predkosc komunikacji, 8, Parity.None, StopBits.One))
{
mb.SendFc4( adres urządzenia , pollStart, pollLength, ref values);
oraz po dopisaniu funkcji 4 (SendFc4) do programu z http://www.codeproject.com/Articles/20929/Simple-Modbus-Protocol-in-C-NET
public bool SendFc4(byte address, ushort start, ushort registers, ref short[] values)
{
//Ensure port is open:
if (sp.IsOpen)
{
//Clear in/out buffers:
sp.DiscardOutBuffer();
sp.DiscardInBuffer();
//Function 3 request is always 8 bytes:
byte[] message = new byte[8];
//Function 3 response buffer:
byte[] response = new byte[5 + 2 * registers];
//Build outgoing modbus message:
BuildMessage(address, (byte)4, start, registers, ref message);
//Send modbus message to Serial Port:
try
{
sp.Write(message, 0, message.Length);
GetResponse(ref response);
}
catch (Exception err)
{
modbusStatus = "Error in read event: " + err.Message;
return false;
}
//Evaluate message:
if (CheckResponse(response))
{
//Return requested register values:
for (int i = 0; i < (response.Length - 5) / 2; i++)
{
values[i] = response[2 * i + 3];
values[i] <<= 8;
values[i] += response[2 * i + 4];
}
modbusStatus = "Read successful";
return true;
}
else
{
modbusStatus = "CRC error";
return false;
}
}
else
{
modbusStatus = "Serial port not open";
return false;
}
}
Wszystko działa.
Pozdrawiam