1

私はシリアル ポートでプロジェクトを行っています..しかし、シリアル通信ポートをコンボ ボックスの選択に変更した後、何もデータを送信できないようです。ここに私のコードがあります:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace XSP
{
    public partial class Form1 : Form
    {
        string RxString;
        byte[] buffer = Encoding.UTF8.GetBytes("RxString");

        public Form1()
        {
            InitializeComponent();

            this.Load += Form1_Load;

            serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
            Console.ReadLine();
        }

        void Form1_Load(object sender, EventArgs e)
        {
            var serialPort1 = SerialPort.GetPortNames();
            cbCommPorts.DataSource = serialPort1;
        }

        public static byte[] ConvertToBinary(string str)
        {
            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            return encoding.GetBytes(str);
        }

        private void btnOpen_Click(object sender, EventArgs e)
        {

            if (cbCommPorts.SelectedIndex > -1)
            {
                MessageBox.Show(String.Format("You selected port '{0}'", cbCommPorts.SelectedItem));
                Connect(cbCommPorts.SelectedItem.ToString());
            }
            else
            {
                MessageBox.Show("Please select a port first");
            }

        }

        private void Connect(string portName)
        {
            var serialPort1 = new SerialPort(portName);
            if (!serialPort1.IsOpen)
            {
                serialPort1.BaudRate = 115200;
                serialPort1.Open();

                btnTransmit.Enabled = true;
                btn2.Enabled = true;
                btn3.Enabled = true;
                btnOpen.Enabled = false;
                btnClose.Enabled = true;
            }
        }
        private void btnTransmit_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                string value = "12345";
                serialPort1.Write(value);
            }
            else serialPort1.Close();
        }

        private void txtReceive_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (serialPort1.IsOpen) return;
            char[] buff = new char[1];
            buff[0] = e.KeyChar;
            serialPort1.Write(buff, 0, 1);
            e.Handled = true;
        }

        private void DisplayText(object sender, EventArgs e)
        {
            txtReceive.AppendText(RxString);
        }

        private void serialPort1_DataReceived
            (object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            RxString = serialPort1.ReadExisting();
            this.Invoke(new EventHandler(DisplayText));
        }

        private void btnOpenFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = "c:\\";
            openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                System.IO.StreamReader sr = new
             System.IO.StreamReader(openFileDialog1.FileName);
                MessageBox.Show(sr.ReadToEnd());
                sr.Close();
            }
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            btnOpen.Enabled = true;
            btnClose.Enabled = false;
            btnTransmit.Enabled = false;
            btn2.Enabled = false;
            btn3.Enabled = false;
        }
    }
}

私の間違いがどこにあるかを指摘するのを手伝ってくれる人はいますか? ありがとう

4

1 に答える 1

0

ここで可能なオプションはいくつかありますが、この問題に取り組むには、より多くの情報が必要です。まず、実際にデータを送信していることを確認してください。これを行うには、データを送信する上記のifステートメントでブレークポイントを試してください。そして、を使用してコードにステップインし、F10実際にデータを送信しているかどうかを確認します。

データを送信している場合、コードは正常に実行され、受信側アプリケーションを確認します。ボーレートなどを確認してください。

于 2012-12-10T08:37:49.333 に答える