C# C串行端口接收和确认
现在我又回来了,我正在做一个小项目,试图接收并确认接收到的数据,以便从COM1设备获取下一组数据 基本上,该设备是摩托罗拉MC1000手持式条形码扫描设备,其上的软件与该程序相连,该程序不再工作,而是通过串行方式发送数据输出,通过连接端口,然后手动将%0发送到设备以从内存输出所有数据,我成功地手动将数据取出 到目前为止,我已经编写了一个程序来连接到com设备,打开com端口,并接收缓冲区信息,但我需要发送一个自动确认以获取所有数据 数据格式为条码数量 以下是我目前的代码:C# C串行端口接收和确认,c#,serial-port,C#,Serial Port,现在我又回来了,我正在做一个小项目,试图接收并确认接收到的数据,以便从COM1设备获取下一组数据 基本上,该设备是摩托罗拉MC1000手持式条形码扫描设备,其上的软件与该程序相连,该程序不再工作,而是通过串行方式发送数据输出,通过连接端口,然后手动将%0发送到设备以从内存输出所有数据,我成功地手动将数据取出 到目前为止,我已经编写了一个程序来连接到com设备,打开com端口,并接收缓冲区信息,但我需要发送一个自动确认以获取所有数据 数据格式为条码数量 以下是我目前的代码: <!-- lan
<!-- language: c# -->
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
// Add this variable
string RxString;
SerialPort ComPort = new SerialPort();
public Form1()
{
InitializeComponent();
}
private void buttonStart_Click(object sender, EventArgs e)
{
ComPort.PortName = Convert.ToString(cboPorts.Text);
serialPort1.PortName = ComPort.PortName;
serialPort1.BaudRate = 9600;
serialPort1.Open();
if (serialPort1.IsOpen)
{
buttonStart.Enabled = false;
buttonStop.Enabled = true;
textBox1.ReadOnly = false;
}
}
private void buttonStop_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
buttonStart.Enabled = true;
buttonStop.Enabled = false;
textBox1.ReadOnly = true;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen) serialPort1.Close();
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// If the port is closed, don't try to send a character.
if(!serialPort1.IsOpen) return;
// If the port is Open, declare a char[] array with one element.
char[] buff = new char[1];
// Load element 0 with the key character.
buff[0] = e.KeyChar;
// Send the one character buffer.
//serialPort1.Write(buff, 0, 1);
if (e.KeyChar == (char)13) // enter key
{
serialPort1.Write("%0");
//textBox1.Text = "";
}
else if (e.KeyChar < 32 || e.KeyChar > 126)
{
e.Handled = true; // ignores anything else outside printable ASCII range
}
else
{
serialPort1.Write(e.KeyChar.ToString());
}
// Set the KeyPress event as handled so the character won't
// display locally. If you want it to display, omit the next line.
//e.Handled = true;
}
private void DisplayText(object sender, EventArgs e)
{
textBox1.AppendText(RxString);
}
private void serialPort1_DataReceived
(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
RxString = serialPort1.ReadExisting() + "\n";
this.Invoke(new EventHandler(DisplayText));
}
private void Form1_Load(object sender, EventArgs e)
{
string[] ArrayComPortsNames = null;
int index = -1;
string ComPortName = null;
//Com Ports
ArrayComPortsNames = SerialPort.GetPortNames();
do
{
index += 1;
cboPorts.Items.Add(ArrayComPortsNames[index]);
} while (!((ArrayComPortsNames[index] == ComPortName) ||
(index == ArrayComPortsNames.GetUpperBound(0))));
Array.Sort(ArrayComPortsNames);
if (index == ArrayComPortsNames.GetUpperBound(0))
{
ComPortName = ArrayComPortsNames[0];
}
//get first item print in text
cboPorts.Text = ArrayComPortsNames[0];
}
private void cboPorts_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
}
我只是需要自动输出这一切 你能减少你的代码墙,只显示问题所在吗?你没有适当地使用ReadExisting。它只返回碰巧可用的任何内容,通常只返回一个或两个字符。附加\n当然不正确。考虑使用RealLoad,将SerialPoto.NeWin属性设置为最后发送的任何字符。