[英]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.