C# SerialPort DSR / DTR и CTS/RTS рукопожатие


Я пытаюсь связаться с устройством, используя класс C#/.NET SerialPort.

Документация по взаимодействию с устройством описана здесь.

Документация по RS232


Я использую нуль-модемный кабель с переключением TX/RX и всеми контактами рукопожатия (проверено).

Я ожидал бы, что следующий код C# будет работать, но я не получаю никакого ответа (от низкого до высокого) от камеры, с которой я пытаюсь взаимодействовать. Хотя я уверен, что проблема заключается в коде. Этот камера работает с другими "ПК". Почему я никогда не получу DsrHolding (null modem cable, so DTR high from camera), чтобы стать истинным в моем коде?

static void Main(string[] args)
{
    var serialPort = new SerialPort("COM5");

    // start the DSR/DTR handshake
    // we are using a null modem cable, so DTR/DSR is switched
    serialPort.DtrEnable = true;
    while (!serialPort.DsrHolding)
    {
        // probally should timeout instead of infinite wait
        Thread.Sleep(10);
        Console.WriteLine("Waiting for the DTR line to go high.");
    }


    // start the RTS/CTS handshake
    // we are using a null modem cable, so RTS/CTS is switched
    serialPort.RtsEnable = true;
    while (!serialPort.CtsHolding)
    {
        // probally should timeout instead of infinite wait
        Thread.Sleep(10);
        Console.WriteLine("Waiting for the RTS line to go high.");
    }

    // read/write
    //serialPort.Write("Some command");
    //var response = serialPort.ReadChar();
    //while (response != stopBit)
    //    response = serialPort.ReadChar();

    // close the connection because we have written/read our data

    // start the DSR/DTR handshake
    // we are using a null modem cable, so DTR/DSR is switched
    serialPort.DtrEnable = false;
    while (serialPort.DsrHolding)
    {
        // probally should timeout instead of infinite wait
        Thread.Sleep(10);
        Console.WriteLine("Waiting for the DTR line to go low.");
    }


    // start the RTS/CTS handshake
    // we are using a null modem cable, so RTS/CTS is switched
    serialPort.RtsEnable = false;
    while (serialPort.CtsHolding)
    {
        // probally should timeout instead of infinite wait
        Thread.Sleep(10);
        Console.WriteLine("Waiting for the RTS line to go low.");
    }
}
2 2

2 ответа:

Вы пробовали использовать прямой кабель? Камера уже может позаботиться о том, какие булавки нужно скрестить.

Вы пропускаете serialPort.Open(); в своем коде