C# 使用C从Com1端口读取数据#
我正在尝试编写一个程序,可以读取通过COM1连接的当前电子秤(Mettler Toldeo pg802-S)的输入。根据目前的代码,我可以列出所有提供的COM,但在规模推动下,我无法将其列出 电子秤位于COM1上,因此我正在尝试获取电子秤正在推送的数据。使用WinWedget,我可以使用Com1、2400波特率、偶数奇偶校验、七个数据位、一个停止位、无流控制、1024个输入缓冲区大小和512个输出缓冲区大小来推送结果。我如何通过这种方式获取数据C# 使用C从Com1端口读取数据#,c#,serial-port,C#,Serial Port,我正在尝试编写一个程序,可以读取通过COM1连接的当前电子秤(Mettler Toldeo pg802-S)的输入。根据目前的代码,我可以列出所有提供的COM,但在规模推动下,我无法将其列出 电子秤位于COM1上,因此我正在尝试获取电子秤正在推送的数据。使用WinWedget,我可以使用Com1、2400波特率、偶数奇偶校验、七个数据位、一个停止位、无流控制、1024个输入缓冲区大小和512个输出缓冲区大小来推送结果。我如何通过这种方式获取数据 using System; using Syste
using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;
namespace SerialPortWrite{
class GetSerialData{
static void Main(string[] args){
Form1 form1 = new Form1();
form1.ShowDialog();
Console.WriteLine("Program Started For COM1...");
// List all COMS
ListComPorts();
// Read this COM.
var reader = new ArduinoSerialReader("COM1");
// Read COM input.
Console.ReadLine();
}
static void ListComPorts(){
// Get a list of port names.
string[] ports = SerialPort.GetPortNames();
Console.WriteLine("The following serial ports were found:");
// Get all COM ports to list out.
foreach (string port in ports){
Console.WriteLine(port);
}
}
}
// Get input.
public class ArduinoSerialReader : IDisposable{
private SerialPort _serialPort;
public ArduinoSerialReader(string portName){
_serialPort = new SerialPort(portName);
_serialPort.Open();
_serialPort.DataReceived += serialPort_DataReceived;
}
void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e){
Console.WriteLine(_serialPort.ReadLine());
}
public void Dispose(){
if (_serialPort != null){
_serialPort.Dispose();
}
}
}
}
要从c#中的串行端口接收数据,可以使用
SerialPort
class。您可以使用单独的线程从端口连续读取数据并对其进行处理。请参见下面的示例代码:
void readFromSerial()
{
SerialPort sp;
try
{
string[] ports = SerialPort.GetPortNames(); // get all the available port names in string array
if (ports.Length > 0)
{
// create SerialPort object
sp = new SerialPort(ports[0], 2400, Parity.Even, 7, StopBits.One);
sp.Open();
string str = "";
// infinite loop to read data byte by byte. you can also use for loop to read constant amount of bytes
while (true)
{
// sp.ReadByte is blocking read, it will wait until a byte is available for reading
byte data = (byte)sp.ReadByte();
Console.Write(" "+data);
str += data + " ";
}
}
}
catch(Exception ex)
{}
finally
{
if (sp != null && sp.IsOpen())
sp.Close();
}
}
然后像这样创建一个单独的线程
Thread t = new Thread(new ThreadStart(readFromSerial));
t.Start();
要从c#中的串行端口接收数据,可以使用
SerialPort
class。您可以使用单独的线程从端口连续读取数据并对其进行处理。请参见下面的示例代码:
void readFromSerial()
{
SerialPort sp;
try
{
string[] ports = SerialPort.GetPortNames(); // get all the available port names in string array
if (ports.Length > 0)
{
// create SerialPort object
sp = new SerialPort(ports[0], 2400, Parity.Even, 7, StopBits.One);
sp.Open();
string str = "";
// infinite loop to read data byte by byte. you can also use for loop to read constant amount of bytes
while (true)
{
// sp.ReadByte is blocking read, it will wait until a byte is available for reading
byte data = (byte)sp.ReadByte();
Console.Write(" "+data);
str += data + " ";
}
}
}
catch(Exception ex)
{}
finally
{
if (sp != null && sp.IsOpen())
sp.Close();
}
}
然后像这样创建一个单独的线程
Thread t = new Thread(new ThreadStart(readFromSerial));
t.Start();
我开发了一个用于将电子秤连接到c#的库,该库有一个组件,可配置用于所有电子秤的continuos通信,需要命令或不需要发送到电子秤的命令,实际上可以使用arduino电子秤模拟器和JUSTA LS7510A指示器进行尝试,该指示器是其库的代码
我开发了一个用于将电子秤连接到c#的库,该库有一个组件,可配置用于所有电子秤的连续通信,需要命令或不需要发送到电子秤的命令,实际上可以尝试使用arduino电子秤模拟器和指示灯JUSTA LS7510A,其库代码为on
因此,您已经知道您需要的COM连接设置。到底是什么阻止您在代码中使用这些设置?您的代码没有端口设置。这是第一个问题。第二个问题:据我所知,大多数天平都要求您向天平发送特定格式的数据包以获得响应。但是,有些秤在秤键盘上输入项目编号后会发送EAN-13代码。你们有哪种型号的?(在第一种情况下,此程序无法工作,因为您不向端口发送任何内容,并且响应主要以二进制数据而不是文本的形式发送。)我不确定,即使对于第二种类型,中的代码是否也能工作。(我家里没有串行端口。)@Julo是正确的,我相信这应该是一个答案。因此,您已经知道您需要的COM连接设置。到底是什么阻止您在代码中使用这些设置?您的代码没有端口设置。这是第一个问题。第二个问题:据我所知,大多数天平都要求您向天平发送特定格式的数据包以获得响应。但是,有些秤在秤键盘上输入项目编号后会发送EAN-13代码。你们有哪种型号的?(在第一种情况下,此程序无法工作,因为您不向端口发送任何内容,并且响应主要以二进制数据而不是文本的形式发送。)我不确定,即使对于第二种类型,中的代码是否也能工作。(我家里没有串行端口。)@Julo是正确的,我相信这应该是一个答案。