2010-11-05 61 views
1

我正在C#中开发一个需要通过串行通信与矩阵开关进行通信的应用程序。串行通讯

string value = "abc"; 
serialPort1.Open(); 
serialPort1.WriteTimeout = 500; 
serialPort1.WriteLine(value); 
serialPort1.Close(); 

矩阵框的状态应该改变WriteLine(value)

这是我的问题。当我发送字符串值时,矩阵框的状态不会改变。但是,当我通过Putty发送相同的字符串(通过串行通信)时,矩阵框会正确响应。所有的串行属性都是相同的(BaudRate,DataBits,PortName等)。

我应该尝试哪些可能的解决方案?

+1

供参考:WriteLine()方法确实附加回车(十六进制0x0D​​)到线上发送的数据。我们使用SerialPort.Write并在发送之前转换为十六进制值,但如果您的命令/答复保证为ascci,unicode或其他编码,则这可能会更复杂。 – gooch 2010-11-05 23:52:56

回答

1

我会检查串口上的编码属性。它看起来像默认是ASCII。也许你的设备期待Unicode?

3

你可以发布你的代码在哪里设置SerialPort?您必须确保所有属性都是您的矩阵开关所期望的。例如:

// Setup port 
SerialPort serialPort = new SerialPort(); 
serialPort.PortName = portName; //eg. COM1 
serialPort.BaudRate = 9600; 
serialPort.StopBits = StopBits.One; 
serialPort.Parity = Parity.None; 
serialPort.DataBits = 8; 
serialPort.Handshake = Handshake.None; 
serialPort.NewLine = "\r\n"; 
serialPort.ReadTimeout = 2000; 
serialPort.WriteTimeout = 1000; 

后您已在端口上称为Open()您可以检查与serialPort.IsOpen财产的打开或关闭状态。