使用OpenNETCF Port类通过COM端口发送数据的必要调用是什么?

时间:2014-06-11 21:27:43

标签: serial-port port 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类中读取,我会回到这个snaggletooth。有人知道发送sendBytes(和接收responseBytes)需要做什么吗?

更新

我测试过&#34; COM1&#34;而不是&#34; COM1:&#34; (我使用了后者,因为有一篇文章说结肠是必要的(&lt; =不是医学建议,虽然这在某种意义上也是无效的),但是没有结果,并且#34;显着的差异。

然后我尝试了#34; string.Empty&#34;代替给它一个名字,得到了,&#34; OpenNETCF.IO.Serial.CommPortException:CreateFileFailed 2 ...&#34;

向前...或者是向侧面......

1 个答案:

答案 0 :(得分:1)

FWIW,设置Output属性会立即在线路上发送数据。无需额外的电话。