我有一个usb设备,应该在查询时发送一个号码。
我得到的指示是:
我到处都找过了,不能理解我在读什么,因为我不知道如何从这个单位得到回应。
libusb是我需要研究的东西吗?我以为它是.NET早期版本的库。提前谢谢。
这是我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace SerialPortTest
{
public partial class Form1 : Form
{
System.IO.Ports.SerialPort counter = new SerialPort("COM5", 9600, Parity.None, 8, StopBits.One);
public Form1()
{
InitializeComponent();
}
private void btnWrite_Click_1(object sender, EventArgs e)
{
// Get a list of serial port names.
string[] ports = System.IO.Ports.SerialPort.GetPortNames();
lblOut.Text = ("The following serial ports were found:");
// Display each port name to the console.
txtOut.Clear();
foreach (string port in ports)
{
txtOut.Text = (port);
}
}
private void Form1_KeyDown_1(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.A)
{
//configuring the serial port
//serialPort1.PortName = "COM5";
//serialPort1.BaudRate = 9600;
//serialPort1.DataBits = 8;
//serialPort1.Parity = Parity.None;
//serialPort1.StopBits = StopBits.One;
//Open the serial port
serialPort1.Open();
//Write data to serial port
serialPort1.Write(Keys.Escape.ToString());
//Read data from serial port
//string[] number;
//counter.DataReceived += counter.ReadExisting();
//counter.ReadLine();
//new SerialDataReceivedEventHandler(counter_DataReceived);
txtOut.Text = counter.ReadLine();
//Close the serial port
serialPort1.Close();
}
}
//private static SerialDataReceivedEventHandler counter_DataReceived(object sender, SerialDataReceivedEventArgs e)
//{
// //throw new NotImplementedException();
// SerialPort sp = (SerialPort)sender;
// string indata = sp.ReadExisting();
// return (sp.ReadExisting());
//}
}}
发布于 2012-11-18 21:11:59
counter.ReadLine()只在读取换行符时才会返回,根据您给出的规范,这是永远不会发生的。
在第一个输入之后,您需要返回一个字节的输出,因此您应该读取一个字节。然后,您需要发送一个c,之后您将不得不阅读,直到遇到一个<。
所以像这样的事情应该有效:
SerialPort serialPort = new SerialPort("COM5", 9600, Parity.None, 8, StopBits.One);
var esc = new byte { 27 };
var c = new byte { 99 };
serialPort.Write(esc, 0, 1);
serialPort.ReadTo(">"); // Or ReadByte() and check if the byte read has a value of 62
serialPort.Write(c, 0, 1);
string data = serialPort.ReadTo("<");然后,您可以将数据字符串解析为您期望的任何格式。
https://stackoverflow.com/questions/13444370
复制相似问题