Я пытаюсь связаться с источником питания Pinnacle Plus + через канал RS232, но получаю
нет ответа от подразделения.
Устройство настроено на адрес 1 и скорость передачи 9600.
Код в C #
Вот что я сделал:
SerialPort PinnacleSerialPort = new SerialPort("COM3", 9600, Parity.Odd, 8, StopBits.One);
PinnacleSerialPort.ReadTimeout = 3000;
PinnacleSerialPort.Open();
byte[] b = { 8, 128, 136 };
PinnacleSerialPort.Write(b, 0, b.Length);
Thread.Sleep(1000);
try
{
int bytes = PinnacleSerialPort.BytesToRead;//RETURNS 0 (ZERO)
Console.WriteLine(string.Format("Bytes to read: {0}", bytes));
byte[] comBuffer = new byte[bytes];
PinnacleSerialPort.Read(comBuffer, 0, bytes);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
Согласно документации пакет состоит из:
заголовок, команда, байты данных (если есть), контрольная сумма.
Заголовок (1 байт): первые 3 бита - это количество байтов данных. В моем случае это 0 = 000
последние 5 бит - это номер блока адреса. В моем случае это 1 = 00001
Полный заголовок будет 00001 000 или десятичным 8
Байты данных: они опущены, так как они не нужны для этой команды
Команда (1 байт): это номер команды. В моем случае это 10000000 = 128
Контрольная сумма (1 байт): это XOR в моем случае заголовка и байтов команды, который равен 10001000 = 136
На основании этой информации я создал и отправил следующий массив байтов []:
byte[] b = {8, 128, 136}
Ответ должен состоять из 4 символов ASCII: «PLUS»;
Однако я вообще не получаю ответа.
Я пробовал другие команды, но также не получил ответа.
Если у кого-то есть опыт работы с этим устройством, пожалуйста, посоветуйте, что я делаю не так.
Действительно ценю.
Alex