初级会员
- 积分
- 81
- 金钱
- 81
- 注册时间
- 2020-3-6
- 在线时间
- 26 小时
|
发表于 2020-3-25 18:13:49
|
显示全部楼层
楼主 你好 我单片机使用你上面的协议设置与XCOM调试助手调试出来的结果与您的结果一样
我想让上位机也可以有调试助手一样的结果 然后我就在上位机中定义该协议头和尾
但我在上位机上给它发送0xA5 0x5A xx xx xx 0x55 0xAA格式的数据包时
串口传回数据为空
不知道是不是上位机发送或接收是否有什么问题 冒昧打扰 如果楼主有时间的话还想请楼主指教一下 麻烦了 谢谢
下面是我的发送代码
public static String ReadHead = "0xA5 0x5A",ReadTail="0x55 0xAA"; 定义的头和尾
String data = ReadHead + strLFIds + strRFIds + strRRIds + strLRIds + vin + ReadTail ; 头+数据+尾的数据包
mycom.MySerialPortSend(data);//发送数据至串口端
String datas = mycom.MySerialPortReceives();//接受串口数据
tlf.Text = datas.Substring(3, 8); 将截取的数据防至文本框中
public bool MySerialPortSend(string str)//串口数据发送
{
try
{
byte[] byteArray = System.Text.Encoding.Default.GetBytes(str);
com.BaseStream.BeginWrite(byteArray, 0, byteArray.Length, new AsyncCallback(WriteSerialPortData), com);
}
catch (System.Exception)
{
return false;
}
return true;
}
private void WriteSerialPortData(IAsyncResult ar)
{
try
{
SerialPort com1 = (SerialPort)ar.AsyncState;
com1.BaseStream.EndWrite(ar);
}
catch (System.Exception)
{
}
}
串口数据读取
private void ReadSerialPortData(IAsyncResult ar)
{
try
{
SerialPort com1 = (SerialPort)ar.AsyncState;
int len = com1.BaseStream.EndRead(ar);
ReceiveStrP = Encoding.Default.GetString(readbyte).Remove(len);
ReceiveStr += ReceiveStrP;
}
catch (System.Exception ex)
{
if (ex.ToString().Contains("由于线程退出"))
{
SerialPortLinkPortFail(this, "err0");
}
}
finally
{
try
{
if (StopCom != true)
{
com.BaseStream.BeginRead(readbyte, 0, readbyte.Length, new AsyncCallback(ReadSerialPortData), com);
}
else
{
com.Close();
System.Threading.Thread.CurrentThread.Abort();
}
}
catch (System.Exception)
{
}
}
}
public string MySerialPortReceives()//串口数据接收
{
com.BaseStream.BeginRead(readbyte, 0, readbyte.Length, new AsyncCallback(ReadSerialPortData), com);
string str1 =Encoding.ASCII.GetString(readbyte);//十六进制转换
return str;
}
|
|