[英]I can't receive data from CardReader with SerialPort class
我可以使用带Modbus协议的串口调试工具接收数据。
以下参数是相同的。 但是,我在DataReceived
方法中设置了一个断点,但从未遇到过。 以下是我的计划:
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);
}
}
}
好的,没有关于你的设备如何工作的太多信息。 我只能猜测你的问题可能是什么。
如果您的设备是同步的,请确保您正在向设备发送行结束(EOL)序列。 某些设备需要EOL才能发出数据发送信号。 这种EOL通常是回车,然后是换行,或者只是回车。 因此,您可能需要将数据更改为"01 03 100b 0002 b109\\r"
。 请注意,我添加了回车符。 此外,您可以使用"\\n"
进行换行,或使用"\\r\\n"
进行回车和换行。
此外,不知道您正在使用什么类型的设备。 您最好确保所有串行端口设置都正确。 确保波特率实际上应该是9600.您不能只选择您想要的任何内容,您正在与之通信的设备将在您需要使用的硬件内部具有预设的波特率。
此外,请确保您的COM
端口号正确。 打开设备管理器并确保您正在与正确的端口通信。
最后,我从未见过有人订阅了SerialPort
类,你是怎么做到的。 更改您的代码以正确匹配此处的MSDN示例 。 采用:
this.sp.DataReceived
+= new SerialDataReceivedEventHandler(this.sp_DataReceived);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.