我可以使用串口调试工具和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);
}
}
}发布于 2016-06-19 07:03:20
好吧,没有太多关于你的设备如何工作的信息。我只能猜测一下你的问题所在。
如果您的设备是同步的,请确保您正在向设备发送行尾(EOL)序列。有些设备需要EOL才能发出发送数据的信号。这个EOL通常是回车符,然后是换行符,或者只是回车符。因此,您可能需要将数据更改为"01 03 100b 0002 b109\r"。请注意,我添加了一个回车。此外,您还可以使用"\n"进行换行,或者使用"\r\n"进行回车和换行。
此外,不知道您使用的是哪种设备。您最好确保串行端口设置都是正确的。确保波特率实际上应该是9600。你不能只选择你想要的东西,你正在与之交谈的设备将在你需要使用的硬件中有一个预设的波特率。
此外,请确保COM端口号正确。打开设备管理器,并确保您正在与正确的端口通信。
最后,我从来没有见过有人订阅SerialPort类,你是怎么做到的。更改您的代码以正确匹配。使用:
this.sp.DataReceived
+= new SerialDataReceivedEventHandler(this.sp_DataReceived);https://stackoverflow.com/questions/37897771
复制相似问题