Я пытаюсь получить значение из принтера 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 ..."
Вперед ... или в сторону ...