#region Function 3 - Read Registers
public bool SendFc3(byte address, ushort start, ushort registers, ref short[] values)
{
//Ensure port is open:
if (serialPort.IsOpen)
{
//Clear in/out buffers:
serialPort.DiscardOutBuffer();
serialPort.DiscardInBuffer();
//Function 3 request is always 8 bytes:
if (MyGlobals.serial_mode == MyGlobals.MODBUS_RTU)
{
byte[] message = new byte[1 + 1 + 2 + 2 + 2];
byte[] response = new byte[1 + 1 + 1 + (2 * registers) + 2];
//Build outgoing modbus message:
BuildMessage(address, (byte)3, start, registers, ref message);
try
{
serialPort.Write(message, 0, message.Length);
GetResponse(ref response);
}
catch (Exception err)
{
modbusStatus = "Error in read event: " + err.Message;
return false;
}
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 = "CRC error";
return false;
}
}
else
{
modbusStatus = "Serial port not open";
return false;
}
}
#endregion
여기선 사전 검사 를 하는거라고 생각하면 된다
사이즈를 만들고 이제 밑에 빌드 메세지로 간다
#region Build Message
public void BuildMessage(byte address, byte type, ushort start, ushort registers, ref byte[] message)
{
//Array to receive CRC bytes:
byte[] CRC = new byte[2];
byte[] message2 = new byte[20];
message2 = null;
if (MyGlobals.serial_mode == MyGlobals.MODBUS_RTU)
{
message[0] = address;
message[1] = type;
message[2] = (byte)(start >> 8);
message[3] = (byte)start;
message[4] = (byte)(registers >> 8);
message[5] = (byte)registers;
GetCRC(message, ref CRC);
message[message.Length - 2] = CRC[0];
message[message.Length - 1] = CRC[1];
}
else //Ascii - FC3
{
}
send_message = null;
for (int i = 0; i < message.Length; i++)
{
send_message += message[i] + " ";
}
//send_message+= null;
}
#endregion
빈 메세지를 받고 기에 값을 넣기 시작한다
'[ 충남인력개발원 ] (2019) > ┗C#' 카테고리의 다른 글
8일차 모스키토 사용 (0) | 2020.04.16 |
---|---|
6일차 C#과 ModBus (0) | 2020.04.13 |
3일차 코드 모두버스의 대하여 (0) | 2020.04.08 |
2일차 코드?? (0) | 2020.04.07 |
1일차 C# 윈폼 EXCEL 데이터 컴파일 (0) | 2020.02.24 |