2012-12-04 82 views
0

我正尝试将一些数据发送到通过串行端口工作的LCD显示器。此代码完成了VB6的工作,但我需要将其转换为C#。可悲的是它不起作用。有任何想法吗?将MSComm 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功能,但我无法弄清楚。你能帮忙吗?

回答

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(); 

请注意,我没有” t语法检查这个,但只是自由的,所以你可能需要调整一下。

0

可悲的是它不工作

鉴于这种宽泛的表述,我会以为这是因为Chr数据类型之间的差异返回0和255,即一个字节之间的值。

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

使一个字节数组

byte[] bytSend; 

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

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

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