Резюме: я подключаюсь к системе через последовательный порт. С помощью шпатлевки я могу заставить его делать все, что захочу. Для любой команды, которую я отправляю, он возвращает команду, за которой следует в случае успеха и в случае ошибки. Команда для устранения ошибки — «KL», поэтому, если в putty я отправляю KL и получаю KL обратно, если я отправляю KL снова, я получаю обратно KL каждый раз без сбоев. Проблема в том, что когда я отправляю одну и ту же последовательность команд из своего кода C#, я всегда получаю обратно KL. Даже если я подключаюсь через putty, отправляю KL, получаю KL, отправляю KL еще раз, чтобы получить в ответ KL (чтобы ошибка исчезла перед открытием кода C#). Если я отключу putty, а затем подключусь с помощью C#, я получу первый ответ как KL, а все остальные команды (включая KL) — как .
конфигурация putty:

Putty Response :

Пользовательский интерфейс C#:

Код C#: [игнорируйте масштаб и Vacc, поскольку пока они работают нормально]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PortApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (!serialPort1.IsOpen)
{
serialPort1.PortName = com.Text;
serialPort1.BaudRate = int.Parse(baud.Text);
serialPort1.DataBits = int.Parse(databit.Text);
// Parity
if (parity.Text.ToLower() == "n")
{
serialPort1.Parity = System.IO.Ports.Parity.None;
}
else if (parity.Text.ToLower() == "o")
{
serialPort1.Parity = System.IO.Ports.Parity.Odd;
}
else if (parity.Text.ToLower() == "e")
{
serialPort1.Parity = System.IO.Ports.Parity.Even;
}
else if (parity.Text.ToLower() == "m")
{
serialPort1.Parity = System.IO.Ports.Parity.Mark;
}
else if (parity.Text.ToLower() == "s")
{
serialPort1.Parity = System.IO.Ports.Parity.Space;
}
// StopBits
if (stopbit.Text.ToLower() == "n")
{
serialPort1.StopBits = System.IO.Ports.StopBits.None;
}
else if (stopbit.Text.ToLower() == "1")
{
serialPort1.StopBits = System.IO.Ports.StopBits.One;
}
else if (stopbit.Text.ToLower() == "1.5")
{
serialPort1.StopBits = System.IO.Ports.StopBits.OnePointFive;
}
else if (stopbit.Text.ToLower() == "2")
{
serialPort1.StopBits = System.IO.Ports.StopBits.Two;
}
// FlowControl
if (flowcontrol.Text.ToLower() == "n")
{
serialPort1.Handshake = Handshake.None;
serialPort1.RtsEnable = true;
serialPort1.DtrEnable = true;
}
else if (flowcontrol.Text.ToLower() == "h")
{
serialPort1.Handshake = Handshake.RequestToSend;
}
else if (flowcontrol.Text.ToLower() == "xonxoff")
{
serialPort1.Handshake = Handshake.XOnXOff;
}
else if (flowcontrol.Text.ToLower() == "hxonxoff")
{
serialPort1.Handshake = Handshake.RequestToSendXOnXOff;
}
// connect
// Set the read/write timeouts
serialPort1.ReadTimeout = 500;
serialPort1.WriteTimeout = 1000;
try
{
serialPort1.Open();
textBox2.Text += "\r\n==================";
textBox2.Text += "\r\nPort Opened";
}
catch
{
Debug.Print(DateTime.Now.ToString("dd/MM/yy HH:mm:ss: ") + "Com port failed to open.");
}
}
else
{
textBox2.Text += "\r\n==================";
textBox2.Text += "\r\nPort already Open";
}
}
private void button2_Click(object sender, EventArgs e)
{
if (!serialPort1.IsOpen)
{
textBox2.Text += "\r\n==================";
textBox2.Text += "\r\nPort not Open";
}
else
{
serialPort1.Write(this.textBox1.Text+"\r\n");
var data = "";
var counter = 20;
while (data == "" && counter > 0)
{
try
{
counter -= 1;
data = serialPort1.ReadLine();
Console.Write(".'"+data+"'\n");
//Thread.Sleep(1000);
textBox2.Text += "\r\n" + textBox1.Text;
textBox2.Text += "\r\n: '" + data+"'";
textBox1.Text = "";
}
catch(Exception ex) {
Debug.Print(DateTime.Now.ToString("dd/MM/yy HH:mm:ss: ") + "Exception1:::: "+ ex.Message);
Console.Write(">X>'" + ex.Message + "'\n");
}
}
try
{
data = serialPort1.ReadLine();
Console.Write(">'" + data + "'\n");
textBox2.Text += "\r\n:: '" + data + "'";
}
catch (Exception ex)
{
Debug.Print(DateTime.Now.ToString("dd/MM/yy HH:mm:ss: ") + "Exception2:::: " + ex.Message);
Console.Write(">XX>'" + ex.Message + "'\n");
}
}
}
private void disconnect_Click(object sender, EventArgs e)
{
if (!serialPort1.IsOpen)
{
textBox2.Text += "\r\n==================";
textBox2.Text += "\r\nPort not Open";
}
else
{
Console.Write("Port Closed\n");
textBox2.Text += "\r\nPort Closed";
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
serialPort1.Dispose();
serialPort1.Close();
}
}
private void robot_Click(object sender, EventArgs e)
{
com.Text = "COM3";
baud.Text = "9600";
databit.Text = "8";
parity.Text = "o";
stopbit.Text = "1";
flowcontrol.Text = "N";
}
private void scale_Click(object sender, EventArgs e)
{
com.Text = "COM4";
baud.Text = "9600";
databit.Text = "7";
parity.Text = "o";
stopbit.Text = "1";
flowcontrol.Text = "N";
}
private void vacc_Click(object sender, EventArgs e)
{
com.Text = "COM6";
baud.Text = "9600";
databit.Text = "8";
parity.Text = "n";
stopbit.Text = "1";
flowcontrol.Text = "N";
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/789 ... than-putty