3004|4

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

给串口发送数据问题 [复制链接]

我收集了一些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();
        }

    }
}

最新回复

msdn中关于WriteLine方法有一段解释: 如果输入缓冲区中的字节数太多,并且 Handshake 设置为 XOnXOff,则 SerialPort 对象可能会在等待设备准备接受更多数据的过程中引发 TimeoutException。 写入的输出包括 NewLine 字符串。 估计就是你发送的太快了吧。没有做过.net的串口,那个Handshake 可能能解决你这个问题,用汇编的时候都是用中断去做的。   详情 回复 发表于 2008-6-16 22:47
点赞 关注

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你怎么知道只发送了一部分?
还有没看到你往写串口的指令
难道.net不用writefile??没玩过.net飘过
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
写到缓冲区就行了
用_serialPort.WriteLine(message);
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
搞个定时器,定时分析txt是否要发送 ?
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

5
 
msdn中关于WriteLine方法有一段解释:
如果输入缓冲区中的字节数太多,并且 Handshake 设置为 XOnXOff,则 SerialPort 对象可能会在等待设备准备接受更多数据的过程中引发 TimeoutException。

写入的输出包括 NewLine 字符串。
估计就是你发送的太快了吧。没有做过.net的串口,那个Handshake 可能能解决你这个问题,用汇编的时候都是用中断去做的。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表