给串口发送数据问题

麦田追风 2008-06-15 08:48:55
我收集了一些GPS数据在t.txt文档中,现在要将这里面的数据通过虚拟串口发给一个PC版的导航软件。
但我这发送有点问题,点一下就发送一部分数据,再点一下又发送一部分
请问下如何才能让程序自动一步一步发啊~~?请赐教

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
using System.IO;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
SerialPort _serialPort;
string filename = @"E:\t.txt";
StreamWriter sw = null;
bool _continue = true;


public Form1()
{
InitializeComponent();
}

private void InitPort()
{
StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;

// Create a new SerialPort object with default settings.

_serialPort = new SerialPort();

// Allow the user to set the appropriate properties.

_serialPort.PortName = "COM5";//SetPortName(_serialPort.PortName);
_serialPort.BaudRate = 4800;// SetPortBaudRate(_serialPort.BaudRate);
_serialPort.Parity = Parity.None;// SetPortParity(_serialPort.Parity);
_serialPort.DataBits = 8;//SetPortDataBits(_serialPort.DataBits);
_serialPort.StopBits = StopBits.One;// SetPortStopBits(_serialPort.StopBits);
_serialPort.Handshake = Handshake.RequestToSend;// SetPortHandshake(_serialPort.Handshake);
_serialPort.RtsEnable = true;
// Set the read/write timeouts

_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;

_serialPort.Open();
}

public void Read()
{
while (_continue)
{
try
{
//string message = _serialPort.ReadLine();
string message = _serialPort.ReadLine();
sw.Write(message);
//Console.WriteLine(message);
}
catch (TimeoutException) { }
}
sw.Close();
}

private void Form1_Load(object sender, EventArgs e)
{
InitPort();
}

private void btnRead_Click(object sender, EventArgs e)
{
_continue = true;
sw = new StreamWriter(filename, true);

Thread readThread = new Thread(Read);
readThread.Start();
}

private void btnStop_Click(object sender, EventArgs e)
{
_continue = false;
}

private void btnWrite_Click(object sender, EventArgs e)
{
StreamReader sr = new StreamReader(filename);

while (sr.Peek() != -1)
{
string message = sr.ReadLine();
//try
//{
_serialPort.WriteLine(message);
//}
//catch (TimeoutException) { }
}

sr.Close();
}

}
}
...全文
97 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
麦田追风 2008-06-16
  • 打赏
  • 举报
回复
写到缓冲区就行了
用_serialPort.WriteLine(message);
liangchencf 2008-06-16
  • 打赏
  • 举报
回复
msdn中关于WriteLine方法有一段解释:
如果输入缓冲区中的字节数太多,并且 Handshake 设置为 XOnXOff,则 SerialPort 对象可能会在等待设备准备接受更多数据的过程中引发 TimeoutException。

写入的输出包括 NewLine 字符串。
估计就是你发送的太快了吧。没有做过.net的串口,那个Handshake 可能能解决你这个问题,用汇编的时候都是用中断去做的。
-狙击手- 2008-06-16
  • 打赏
  • 举报
回复
搞个定时器,定时分析txt是否要发送 ?
MBWQ 2008-06-16
  • 打赏
  • 举报
回复
你怎么知道只发送了一部分?
还有没看到你往写串口的指令
难道.net不用writefile??没玩过.net飘过

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧