///----------------------------------------------------------------- /// <summary> /// 对 象:SCIPort /// 事 件:DataReceived /// 功 能:串口接收数据 /// 函数调用:(1)SCIReceiveData,串口接收函数 /// (2)SCIUpdateRevtxtbox,更新文本框中的内容 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> ///----------------------------------------------------------------- private void SCIPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { String str = String.Empty; bool Flag; //标记串口接收数据是否成功 int len; //标记接收的数据的长度 byte[] ch2 = new byte[2]; //调用串口接收函数,并返回结果 Flag = sci.SCIReceiveData(ref recvData); if (Flag)//串口接收数据成功 { len = recvData.Length; //对于字符串形式,考虑到可能有汉字, //直接调用系统定义的函数,处理整个字符串 str = Encoding.GetEncoding("GB2312").GetString(recvData); if (str != null) { Data[ind] = str; } else { Data[ind] = null; } } //接收数据失败 else { this.textBox1.Text = "数据接收失败!"; } }
public void FindSCI() { for (int i = 0; i < SCIPorts.Length; i++) { sci = new SCI(SCIPorts[i], 115200); if (sci.SCIOpen()) { sci.SCISendFrameData(ref userShake); Thread.Sleep(500); if (sci.SCIReceiveData(ref recvData)) { if (recvData.Length == 0 || !System.Text.Encoding.Default.GetString(recvData).Contains("I am an KL36")) { sci.Close(); continue; } if (System.Text.Encoding.Default.GetString(recvData).Contains("I am an KL36")) //记录UART_User串口的Com号 { PublicVar.g_SCIComNum = SCIPorts[i]; sci.Close(); break; //找到UART_User串口后,跳出循环 } } } } }
///----------------------------------------------------------------- /// <summary> /// 对 象:SCIPort /// 事 件:DataReceived /// 功 能:串口接收数据 /// 函数调用:(1)SCIReceiveData,串口接收函数 /// (2)SCIUpdateRevtxtbox,更新文本框中的内容 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> ///----------------------------------------------------------------- private void SCIPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { String str = String.Empty; bool Flag;//标记串口接收数据是否成功 byte[] ch2 = new byte[2]; //ComDevice.Encoding = System.Text.Encoding.GetEncoding("GB2312"); //调用串口接收函数,并返回结果 Flag = sci.SCIReceiveData(ref PublicVar.g_ReceiveByteArray); if (Flag == true)//串口接收数据成功 { str = Encoding.GetEncoding("GB2312").GetString(PublicVar.g_ReceiveByteArray); SCIUpdateRevtxtbox(textBox1, str); } }
///----------------------------------------------------------------- /// <summary> /// 对 象:SCIPort /// 事 件:DataReceived /// 功 能:串口接收数据 /// 函数调用:(1)SCIReceiveData,串口接收函数 /// (2)SCIUpdateRevtxtbox,更新文本框中的内容 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> ///----------------------------------------------------------------- private void SCIPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { String str = String.Empty; bool Flag; //标记串口接收数据是否成功 int len; //标记接收的数据的长度 //调用串口接收函数,并返回结果 Flag = sci.SCIReceiveData(ref PublicVar.g_ReceiveByteArray); if (Flag == true) //串口接收数据成功 { len = PublicVar.g_ReceiveByteArray.Length; // 对于字符串形式,考虑到可能有汉字, //直接调用系统定义的函数,处理整个字符串 str = Encoding.GetEncoding("GB2312").GetString(PublicVar.g_ReceiveByteArray); if (str != null && str == TbSCISend.Text) { SCIUpdateRevtxtbox(TbShow, "字符串数据: " + str); } else { SCIUpdateRevtxtbox(TbShow, "字符串数据: 无 "); } //十进制和十六进制形式按字节进行处理 for (int i = 0; i < len; i++) { //十进制都是按照三位来显示,字节之间有空格表示区分 SCIUpdateRevtxtbox(TbShow, "十进制数据: " + PublicVar.g_ReceiveByteArray[i].ToString("D3") + " "); //十六进制都是按照两位来显示,字节之间有空格表示区分 SCIUpdateRevtxtbox(TbShow, "十六进制数据: " + PublicVar.g_ReceiveByteArray[i].ToString("X2") + " "); } //数据接收成功 } }