Какой вызов необходим для отправки данных через COM-порт с использованием класса порта OpenNETCF?

Я пытаюсь получить значение из принтера Zebra, запрашивая его с помощью этого кода:

public static string GetSettingFromPrinter(string cmd)
{
    string setting = string.Empty;
    try
    {
        BasicPortSettings bps = new BasicPortSettings();
        bps.BaudRate = BaudRates.CBR_19200;
        bps.Parity = OpenNETCF.IO.Serial.Parity.none;
        bps.StopBits = OpenNETCF.IO.Serial.StopBits.one; 

        Port serialPort = new Port("COM1:", bps);
        serialPort.Open();
        byte[] sendBytes = Encoding.ASCII.GetBytes(cmd);
        MessageBox.Show(Encoding.ASCII.GetString(sendBytes, 0, sendBytes.Length));
        serialPort.Output = sendBytes;
        serialPort.Query(); // <= this is new
        byte[] responseBytes = serialPort.Input;
        setting = GetString(responseBytes);
        serialPort.Close();
        return setting;
    }
    catch (Exception x)
    {
        MessageBox.Show(x.ToString());
        return setting;
    }
}

Однако я не вижу, куда на самом деле отправляется вывод и как это сделать. Мое лучшее предположение - это вызов метода Port.Query (), но он тоже не работает - по крайней мере, после этого ничего не устанавливается / значение Port.Input.

Я успешно передал команды принтеру, используя более старый класс SerialPort:

public static bool SendCommandToPrinter(string cmd)
{
    bool success; // init'd to false by default
    try
    {
        SerialPort serialPort = new SerialPort();
        serialPort.BaudRate = 19200;
        serialPort.Handshake = Handshake.XOnXOff;
        serialPort.Open();
        serialPort.Write(cmd);
        serialPort.Close();
        success = true;
    }
    catch // may not need a try/catch block, as success defaults to false
    {
        success = false;
    }
    return success;
}

... но мне посоветовали не использовать его из-за длинного зуба.

Я бы вернулся к этому зубастому зубу, если бы знал, как читать из старого класса SerialPort. Кто-нибудь знает, что мне нужно сделать, чтобы отправить sendBytes (и получить responseBytes)?

ОБНОВИТЬ

Я тестировал «COM1» вместо «COM1:» (я использовал последний, потому что есть сообщение, в котором говорится, что двоеточие необходимо (‹= не медицинский совет, хотя это, несомненно, верно и в этом смысле), но без« : "заметной разницы не было.

Затем я попробовал "string.Empty" вместо того, чтобы дать ему имя, и получил "OpenNETCF.IO.Serial.CommPortException: CreateFileFailed 2 ..."

Вперед ... или в сторону ...


person B. Clay Shannon    schedule 11.06.2014    source источник


Ответы (1)


FWIW, установка свойства Output немедленно отправляет данные по сети. Никакого дополнительного звонка не требуется.

person ctacke    schedule 26.03.2015
comment
Слава богу, я больше не работаю над этой архаичной технологией, но спасибо за ваш ответ. - person B. Clay Shannon; 26.03.2015