wuhao88 2017-03-27 14:03 采纳率: 0%
浏览 1419

串口程序问题,调试没问题,但是执行时收不到信息,求各位大神解答

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.IO;
using System.Threading;

public class PortChat
{
/*参数初始化*/

#region
private static byte xor = 0X02;                    //转义字符
private static string str = "";
private static string strSend = "";
private static string txtReceive = null;     //存储接收的一帧字符
static SerialPort Com;    //定义串口类
#endregion
private static void Main (string[] args)
{
    /* 串口通讯参数配置*/
    Com = new SerialPort ();
    Com.BaudRate = 9600;
    Com.PortName = "COM3";
    Com.DataBits = 8;
    Com.Open ();
    StreamReader sr = new System.IO.StreamReader ("1.txt");  //打开根目录中的1.txt文档
    str = "";
    str = sr.ReadToEnd ();
    str = str.Trim ();
    int ilen = str.Length;
    int m = 0;
    int ibegin = 0;
    int f = 0;
    strSend = "";
    ilen = ilen / 14;
    m = ilen % 14;
    /* 每帧数据中发送14个字符*/
    for ( f = 0; f < ilen; f++ )
    {
        ibegin = f * 14;
        strSend = str.Substring (ibegin, 14);
        Send (strSend);
        Receive ();
    }
}

private static void Send (string strSend)
{

    char[] chrData = strSend.ToCharArray ();
    Byte[] Data = new Byte[chrData.Length + 8];
    Data[0] = 0x7E;                //帧首
    int c = 2;
    byte result = 0X00;
    for ( Int32 index = 0; index < chrData.Length; index++ )
    {

        Data[c] = (Byte) chrData[index];
        if ( Data[c] == 0X7E )     //判断字符串中是否有帧首
        {
            result = (byte) (Data[c] ^ xor);
            Data[c] = 0X7D;
            c++;
            Data[c] = result;

        }
        else if ( Data[c] == 0X7D )   //判断字符串中是否有转义符
        {
            result = (byte) (Data[c] ^ xor);
            Data[c] = 0X7D;
            c++;
            Data[c] = result;
        }
        else if ( Data[c] == 0X7F )   //判断字符串中是否有帧尾
        {
            result = (byte) (Data[c] ^ xor);
            Data[c] = 0X7D;
            c++;
            Data[c] = result;

        }
        c++;
    }

    Data[c++] = 0;
    Data[c] = 0X7F;              //帧尾存储
    Data[1] = (byte) (++c);
    Byte[] SendData = new Byte[c];
    for ( int k = 0; k < c; k++ )
    {
        SendData[k] = Data[k];
    }
    int sum = 0;
    for ( int i = 0; i < SendData.Length - 2; i++ )
    {
        sum += SendData[i];
    }
    SendData[SendData.Length - 2] = (byte) (sum % 2);
    Com.Write (SendData, 0, SendData.Length);


}
/* 数据接收函数定义*/
private static void Receive ()
{
    byte[] receivedData = new byte[Com.BytesToRead];        //创建接收字节数组
    Com.Read (receivedData, 0, receivedData.Length);         //读取数据
    Com.DiscardInBuffer ();
    txtReceive = Encoding.Default.GetString (receivedData);
    Console.WriteLine (txtReceive);
    //Console.WriteLine ("OK");
}

}

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题