将MSComm VB6转换为C#

时间:2012-12-04 18:56:27

标签: c# vb6

我正在尝试将一些数据发送到通过串行端口工作的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函数,但我无法弄明白。你能帮忙吗?

3 个答案:

答案 0 :(得分:0)

  

可悲的是它不起作用

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

serialPort1.Write(new byte[]{2}, 0, 1);

答案 1 :(得分: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();

请注意,我没有语法检查,但只是随心所欲,所以你可能需要调整一下。

答案 2 :(得分:0)

我制作一个字节数组

byte[] bytSend;

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

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

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