我有很多问题试图让串口接收正确的消息。它不断截断消息。这是我的代码,我会尽力详细说明代码。SerialPort类问题
public SerialComms(SerialPort sp)
{
this.sp = sp;
this.sp.Open();
this.sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
do
{
Console.WriteLine("port open waiting message");
Console.ReadKey();
} while(!_terminate);
this.sp.Close();
}
void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string dataReceived;
StringComparer strComp = StringComparer.OrdinalIgnoreCase;
SerialPort sp = (SerialPort)sender;
int i = sp.BytesToRead;
byte[] _byte = new byte[i];
char[] _char = new char[i];
sp.read(_byte, 0, i);
dataReceived = Encoding.UTF8.GetString(_byte);
//dataReceived = new string(_char);
//dataReceived = sp.ReadExisting();
if (strComp.Equals("00000000000000"), dataReceived))
_terminate = true;
Console.WriteLine(dataReceived);
}
现在我有我们用来测试我们的串行网络公司在生产与传统的软件 - 我知道这运行正常的测试项目。我已将串行监视器连接到端口,并且通过传输的消息没有任何问题。当我第一次发送信息如时,它通常会很好,而在接收端,监视器显示它正在通过;但是,当它打印到控制台时,会在第一条消息之后被截断。我附上了通过端口监视器和控制台输出的消息的屏幕截图(显示的笑脸和心脏是正在转换的前缀字节 - 为什么它是我不知道的心脏和笑脸)
好吧,我无法发布图片,因为我没有足够的信誉来这样做。我会写下输出到下面的控制台(在这种情况下,由于某种原因它也截断了第一条消息):()
在串口监视器上传输的消息如下(我发送它三在每个消息发送之间有几秒'延迟时间'):
02 31 32 33 34 35 36 37 38 39 30 31 32 33 34 03 .123456789。
02 31 32 33 34 35 36 37 38 39 30 31 32 33 34 03 0.123456789。
02 31 32 33 34 35 36 37 38 39 30 31 32 33 34 03 0.123456789。
在控制台我收到了以下(该☺和♥字符是02和03 ,它们是STX和ETX信息是标准为我们传输):
☺123456
789♥
☺
4♥
☺
4♥
这个问题让我疯狂!请帮忙!遗留的是使用过时的MSCommLib,我们正在转向.Net 4
我换成你的占位符与真实的符号,如果我扭转他们请纠正。对于截图,提供链接到像http://imgur.com/这样的网站,而更高级别的用户可以将链接转换为图像。 –