首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我无法通过SerialPort类从CardReader接收数据

我无法通过SerialPort类从CardReader接收数据
EN

Stack Overflow用户
提问于 2016-06-18 21:56:55
回答 1查看 81关注 0票数 1

我可以使用串口调试工具和Modbus协议接收数据。

以下参数相同。但是,我在DataReceived方法中设置了一个断点,但从未遇到过它。下面是我的程序:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TestBalance
{
    public partial class Form1 : Form
    {
        SerialPort sp;
        public Form1()
        {
            InitializeComponent();
            sp = new SerialPort("COM21", 9600, Parity.None, 8, StopBits.One);
            sp.Open();
            sp.ReceivedBytesThreshold = 1;
            sp.RtsEnable = true;
            sp.DtrEnable = true;
            sp.DataReceived+=sp_DataReceived;
            sp.Write("01 03 100b 0002 b109");
            Thread.Sleep(200);
            //string message= sp.ReadExisting();
            //MessageBox.Show(message);
        }

        private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string message = sp.ReadLine();
            MessageBox.Show(message);
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-06-19 07:03:20

好吧,没有太多关于你的设备如何工作的信息。我只能猜测一下你的问题所在。

如果您的设备是同步的,请确保您正在向设备发送行尾(EOL)序列。有些设备需要EOL才能发出发送数据的信号。这个EOL通常是回车符,然后是换行符,或者只是回车符。因此,您可能需要将数据更改为"01 03 100b 0002 b109\r"。请注意,我添加了一个回车。此外,您还可以使用"\n"进行换行,或者使用"\r\n"进行回车和换行。

此外,不知道您使用的是哪种设备。您最好确保串行端口设置都是正确的。确保波特率实际上应该是9600。你不能只选择你想要的东西,你正在与之交谈的设备将在你需要使用的硬件中有一个预设的波特率。

此外,请确保COM端口号正确。打开设备管理器,并确保您正在与正确的端口通信。

最后,我从来没有见过有人订阅SerialPort类,你是怎么做到的。更改您的代码以正确匹配。使用:

代码语言:javascript
复制
this.sp.DataReceived 
    += new SerialDataReceivedEventHandler(this.sp_DataReceived);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37897771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档