一般跟下位机通信发地址时校验位用MARK,发数据时校验位用SPACE。

解决方案 »

  1.   

    serialPort1 = new SerialPort("COM1", 300, Parity.None, 8, StopBits.Two); 
    兄弟,一般速度常用的是19200,38400等等
    你这里开个300,不行哦!你需要确认下位机的串口通讯参数,速度、效验、停止位。
      

  2.   

    serialPort1 = new SerialPort("COM1", 300, Parity.None, 8, StopBits.Two); 
    这是对的,和仪器要求的一样!
    仪器所说的那些握手信号你不用去管他,如果你是标准的串口,信号就是标准的.
    你程序死机是不是没有读到返回的信息啊.串口程序一般做法是 :
    加一句
    serialPort1 .DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);给仪器下指令串口
    serialPort1.Write("G"+ "\r\n");如果串口有了仪器返回的信息,则触发DataReceived事件
    你就直接在事件中写程序就行了.
            private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)  //与接收机交换数据的串口有数据过来时
            {
              if(读到的是"Y") 
                { 指令成功;
                 }
               else if(读到的是"X")
                {
                  指令失败;
                }
           }
      

  3.   

    有SERIALPORT 读串口的实例吗?我的怎么一直接收不了数据啊?着急啊……
      

  4.   

    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;
    using System.Threading;namespace mycom
    {
        public partial class Form1 : Form
        {
            SerialPort spcom = new SerialPort();        delegate void HandleInterfaceUpdateDelegate(string text); //委托
            HandleInterfaceUpdateDelegate interfaceUpdateHandle;
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                spcom.PortName = "COM1";
                spcom.BaudRate = 4800;
                spcom.Parity = Parity.None;
                spcom.DataBits = 8;
                spcom.StopBits = StopBits.One;
                interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(UpdateTextBox);
                spcom.DataReceived += new SerialDataReceivedEventHandler(spcom_DataReceived);
                spcom.ReceivedBytesThreshold = 1;            try
                {                spcom.Open();
                }
                catch
                {
                    MessageBox.Show("没有找到串口,请检查后再试……", "警告");
                }
            }
            public void spcom_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {            /* if (!spcom.IsOpen)
                 {
                     spcom.Open(); 
                  }*/
                byte[] readBuffer = new byte[spcom.ReadBufferSize];
                spcom.Read(readBuffer, 0, readBuffer.Length);
                //  readBuffer= spcom.ReadLine();
                this.Invoke(interfaceUpdateHandle, new string[] { Encoding.Unicode.GetString(readBuffer) });
            }        private void UpdateTextBox(string text)
            {
                txtrev.Text += text;        }
            //发送数据
            private void butsend_Click(object sender, EventArgs e)
            {
                //发送数据
                SendStringData(spcom);
               // txtsend.Text = "\n";
              //  SendBytesData(spcom);        }        //发送字符串数据
            private void SendStringData(SerialPort serialPort)
            {
               try
                { 
                    if (!spcom.IsOpen)
                        { spcom.Open(); }                spcom.Write(txtsend.Text);
                }
                catch
                {
                    MessageBox.Show("没有找到串口,请先打开串口","警告");
                }
             //  spcom.Close();
            }        //发送二进制数据
            private void SendBytesData(SerialPort serialPort)
            {
                byte[] bytesSend = Encoding.Default.GetBytes(txtsend.Text);
                spcom.Write(bytesSend, 0, bytesSend.Length);
            }         private void butrev_Click(object sender, EventArgs e)
            {
                txtrev.Text = "";
            }
            private void txtsend_TextChanged(object sender, EventArgs e)
            {
            }
            private void txtrev_TextChanged(object sender, EventArgs e)
            {
                txtrev.SelectionStart = txtrev.Text.Length;
                txtrev.SelectionLength = 0;
                txtrev.ScrollToCaret();
            }
        }
    }
    经测试过好用,你可以COPY去试试