C# SerialPort赢得';不要发送数据。把它放在某个地方。当其他程序通过同一端口发送数据时,数据被推出

C# SerialPort赢得';不要发送数据。把它放在某个地方。当其他程序通过同一端口发送数据时,数据被推出,c#,serial-port,C#,Serial Port,对不起,可能拼写错误,我不是以英语为母语的人 用C语言编写的软件,带有VisualStudio Community 2015和.net 4.0。 读取与免费设备监控工作室的串行通信 由于笔记本电脑上没有可用的RS232端口,USB至RS232加密狗LogiLink FTDI芯片组 namespace Serial_Test { public partial class Form2 : Form { public Form2() {

对不起,可能拼写错误,我不是以英语为母语的人

用C语言编写的软件,带有VisualStudio Community 2015和.net 4.0。 读取与免费设备监控工作室的串行通信

由于笔记本电脑上没有可用的RS232端口,USB至RS232加密狗LogiLink FTDI芯片组

namespace Serial_Test
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_FormClosed(object sender,  System.Windows.Forms.FormClosedEventArgs e)
        {
            if ((SerialPort1.IsOpen == true))
            {
                SerialPort1.Close();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SerialPort1.PortName = "COM5";
            SerialPort1.BaudRate = 9600;
            SerialPort1.Parity = Parity.None;
            SerialPort1.DataBits = 8;
            SerialPort1.StopBits = StopBits.One;
            SerialPort1.Handshake = Handshake.None;

            if ((SerialPort1.IsOpen == false))
            {
                SerialPort1.Open();
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            if ((SerialPort1.IsOpen == true))
            {
                SerialPort1.Write(" --Aus C#-- ");
                MessageBox.Show("Data send");
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if ((SerialPort1.IsOpen == true))
            {
                SerialPort1.Close();
            }
        }
    }
}
它运行时没有任何错误,但不会发送数据。 但它甚至不会从未连接到任何东西的串行端口回显数据。

然后,在关闭我的程序并通过同一COM端口从任何其他程序(在本例中为自写VBS)发送数据后,它将发送附加到新数据之前应发送的数据


我尝试了3个不同的加密狗allready(从20欧元到200欧元),但一次又一次地遇到同样的问题。

您可以尝试从串行端口实例调用
.Flush
。这将清除所有缓冲区。

您可以尝试从串行端口实例中调用
.Flush
。这会清除所有缓冲区。

我解决了

这不起作用:

_SP.Write("VERSION?" + "\r");
这一切都很好

byte[] buffer = new byte[9];

        buffer[0] = 0x56;
        buffer[1] = 0x45;
        buffer[2] = 0x52;
        buffer[3] = 0x53;
        buffer[4] = 0x49;
        buffer[5] = 0x4f;
        buffer[6] = 0x4e;
        buffer[7] = 0x3f;
        buffer[8] = 0x0d;

        string text = buffer.ToString();
        _SP.Write(buffer,0,9);
串行端口设置保持不变。 有人能解释一下这种行为吗?

我解决了

这不起作用:

_SP.Write("VERSION?" + "\r");
这一切都很好

byte[] buffer = new byte[9];

        buffer[0] = 0x56;
        buffer[1] = 0x45;
        buffer[2] = 0x52;
        buffer[3] = 0x53;
        buffer[4] = 0x49;
        buffer[5] = 0x4f;
        buffer[6] = 0x4e;
        buffer[7] = 0x3f;
        buffer[8] = 0x0d;

        string text = buffer.ToString();
        _SP.Write(buffer,0,9);
串行端口设置保持不变。
有人能解释一下这种行为吗?

A.white我正试图把(不知怎么的)缓冲数据发送出去。我想,法拉盛会摆脱它的。我尝试了一些方法:打开C#->发送数据——什么都不会发生(COM嗅探器)C#->bytestowrite=0->无论如何。丢弃溢出->关闭C#打开VBS->发送数据--C#数据和VBS数据被发送出去我不知道C#数据被卡在哪里。@AndreasM flush不是删除它-它是发送数据并清除缓冲区。我尝试在.WriteLine命令之后立即使用.BaseStream.flush刷新端口。没用。任何时候都没有。BytesToWrite。我想这就是为什么同花顺无效的原因。white我正试图发送(不知何故)缓冲数据。我想,法拉盛会摆脱它的。我尝试了一些方法:打开C#->发送数据——什么都不会发生(COM嗅探器)C#->bytestowrite=0->无论如何。丢弃溢出->关闭C#打开VBS->发送数据--C#数据和VBS数据被发送出去我不知道C#数据被卡在哪里。@AndreasM flush不是删除它-它是发送数据并清除缓冲区。我尝试在.WriteLine命令之后立即使用.BaseStream.flush刷新端口。没用。任何时候都没有。BytesToWrite。我想这就是.Flush无效的原因。您的握手属性分配是错误的。选择None几乎从来都不正确,绝大多数设备都使用RequestToSend。如果出于某种非常神秘的原因,实际上没有人打算这样做,那么您必须自己将DtrEnable和RtsEnable属性设置为true。@Hans Passant感谢您的帮助。我试图启用和禁用Dtr和Rts。它不起作用。在不同的机器(相同的操作系统)上,我的脚本运行良好!在John Allwork博士(VS C#2010编程)的一本书中,他说,对于USB到串行加密狗,我应该使用“引号:。。。类似于COM端口17的东西。“以前有人听说过吗?p、 s.COM 15-20也不起作用。补充信息。我甚至没有通过未连接到任何设备的COM端口获得回音,因此我根本没有考虑任何设备的设置。您的握手属性分配是错误的。选择None几乎从来都不正确,绝大多数设备都使用RequestToSend。如果出于某种非常神秘的原因,实际上没有人打算这样做,那么您必须自己将DtrEnable和RtsEnable属性设置为true。@Hans Passant感谢您的帮助。我试图启用和禁用Dtr和Rts。它不起作用。在不同的机器(相同的操作系统)上,我的脚本运行良好!在John Allwork博士(VS C#2010编程)的一本书中,他说,对于USB到串行加密狗,我应该使用“引号:。。。类似于COM端口17。“以前有人听说过吗?p.s.COM 15-20也不起作用。补充信息。我甚至没有通过未连接到任何设备的COM端口收到回音,所以我根本不考虑任何设备的设置。