繁体   English   中英

将MSComm VB6转换为C#

[英]Convert MSComm VB6 to C#

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

可悲的是它不起作用

考虑到这一宽泛的陈述,我将假定这是数据类型之间的差异,因为Chr返回的值介于0到255之间,即一个字节。

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

首先,尝试使用此辅助程序扩展方法,使编写一字节控制代码更容易

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

请注意,我没有语法检查,只是徒手处理,因此您可能需要对其进行一些调整。

我做一个字节数组

byte[] bytSend;

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

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

从我的头顶开始,所以没有适合您的真实测试项目,对不起

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM