0

我正在尝试将一些数据发送到通过串行端口工作的 LCD 显示器。这段代码在 VB6 上完成了这项工作,但我需要将它转换为 C#。可悲的是它不起作用。有任何想法吗?

VB6(示例)

MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
MSComm1.Output = Chr(2)
MSComm1.Output = Trim(Text1.Text)

C#(示例)

var serialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
serialPort1.Open();
serialPort1.Write(((char)2).ToString());
serialPort1.Write(textbox1.Text);
serialPort1.Close();

我认为问题出在 serialPort1.Write 函数上,但我想不通。你能帮忙吗?

4

3 回答 3

0

可悲的是它不起作用

鉴于这个广泛的陈述,我将假设它是数据类型之间的差异,因为Chr返回一个介于 0 和 255 之间的值,即一个字节。

serialPort1.Write(new byte[]{2}, 0, 1);
于 2012-12-04T19:06:25.100 回答
0

首先,试试这个辅助扩展方法,让编写单字节控制代码更容易

public static void Write(this SerialPort sp, byte b)
{
   sp.Write(new byte[]{b}, 0, 1);
}

然后将您的代码更改为:

var serialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
serialPort1.Encodeing = System.Text.Encoding.Default;
serialPort1.Open();
serialPort1.Write(2);
serialPort1.Write(textbox1.Text.Trim());
serialPort1.Close();

请注意,我没有对此进行语法检查,而是随意进行了检查,因此您可能需要对其进行一些调整。

于 2012-12-05T12:55:59.863 回答
0

我做一个字节数组

byte[] bytSend;

我用要发送的数据填充字节数组然后我用以下命令发送数据

sp.Write(bytSend, 0,bytSend.GetUpperBound(0) + 1);

从我的头顶,所以没有真正的测试项目给你,对不起

于 2012-12-06T15:07:21.473 回答