我一直在尝试使用串行端口COM4发送和读取命令,该端口已经使用此代码进行了配置,它连接到一个纸币接收器设备
我正在使用一个事件来暂停无论何时设备发送答案然而,当我发现它从来没有真正到达事件或订阅它,我已经阅读了整整一周如何解决这个问题,但没有运气。
即使我碰巧将“读端口”行放在“写端口行”之后,并且程序到达
ptSerial.Read(RxMensaje, 0, 5);我必须停止这个程序,希望这里有人能帮我。
public partial class Form1 : Form
{
public SerialDataReceivedEventHandler DataReceivedDelegate;
public Form1()
{
InitializeComponent();
}
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
DataReceivedDelegate = new SerialDataReceivedEventHandler(DataReceivedHandler);
//SerialPort sp = (SerialPort)sender;
//string indata = sp.ReadExisting();
byte[] RxMensaje = new byte[5];
ptSerial.Read(RxMensaje, 0, 5);
rtbDevice.Text = Encoding.ASCII.GetString(RxMensaje, 0, 5);
// rtbDevice.Text = indata;
}
private void btnOpen_Click(object sender, EventArgs e)
{
try
{
Open(sender, e);
}
catch (Exception ex)
{
lblSalida.Text = ex.Message;
}
}
private void Open(object sender, EventArgs e)
{
ptSerial.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
ptSerial.Open();
lblSalida.Text = "Puerto COM4 Abierto";
}
private void btnSend_Click(object sender, EventArgs e)
{
if (ptSerial.IsOpen)
{
byte[] TxMensaje = new byte[5] { 0x02, 0x00, 0x01, 0xFE, 0xFF }; //CCtalk
ptSerial.Write(TxMensaje, 0, 5);
rtbHost.Text = "2 0 1 254 255 Enviado";
//byte[] RxMensaje = new byte[5];
//ptSerial.Read(RxMensaje, 0, 5);
//rtbDevice.Text = Encoding.ASCII.GetString(RxMensaje, 0, 5);
ptSerial.Close();
lblSalida.Text = "Bytes Enviados Pto Cerrado";
}
else
{
lblSalida.Text = "Puerto Cerrado";
}
}
private void btnCerrar_Click(object sender, EventArgs e)
{
if (ptSerial.IsOpen)
{
ptSerial.Close();
lblSalida.Text = "Puerto COM4 Cerrado";
}
else
{
lblSalida.Text = "No ocurrio nada :(";
}
}
}发布于 2014-09-08 10:01:01
我没有看到串行端口的完整定义(例如,在哪里绑定到"COM4")。非常重要的是要正确设置波特率,否则设备将无法与您的应用程序正确同步,也不会产生任何事件。
请参阅http://msdn.microsoft.com/en-us/library/system.io.ports.serialport(v=vs.110).aspx
_serialPort = new SerialPort(); // Allow the user to set the appropriate properties.
_serialPort.PortName = SetPortName(_serialPort.PortName);
_serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
_serialPort.Parity = SetPortParity(_serialPort.Parity);
_serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
_serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
_serialPort.Handshake = SetPortHandshake(_serialPort.Handshake); https://stackoverflow.com/questions/25716449
复制相似问题