当前位置:文档之家› 串口调试小助手大体设计文档

串口调试小助手大体设计文档

串口调试小助手大体设计文档
串口调试小助手大体设计文档

C#编写串口调试小助手设计文档

/*********************************************************************/

/*文档名称:C#编写串口调试小助手设计文档 */

/*操作系统:win7 X64 */

/*编译软件:Virtual Studio 2010 */

/*编译环境:.Net FrameWork 4.0 */

/*时间:2014/7/24 */

/*Author : 软星包子 */

/*********************************************************************/

目录

1. 定义程序的的命名空间静态主函数(static main) (1)

2. 定义程序会用到的类包及全局变量 (2)

3. 初始化窗体,初始化窗体控件属性与事件 (2)

4. 点击打开串口/关闭串口对应的Click 事件处理 (2)

a.打开端口/关闭串口事件处理所需要的函数 (3)

b.读取串口的事件处理,委托与线程 (4)

5. 初始化SerialPort对象,检测当前系统下可用端口,检测当前用户相关配置信息 (6)

6.DataReceived事件委托方法 (7)

7.数据发送事件处理 (8)

8. 写数据操作,利用线程循环发送数据 (9)

a. 数据转换,将16进制数转化为字节型数据 (11)

9.复选框:强制转换为16进制事件处理 (12)

a.普通文本转换为16进制值 (12)

10.清空按钮清空listBox和richTextBox的文本区 (12)

11.点击“关于我们按钮”在主窗体中打开其他窗体 (13)

12.窗体布局及消息盒提示 (13)

13. 窗体布局及相应控件介绍 (14)

1.定义程序的的命名空间静态主函数(static main)

namespace VCCom

{

static class Program

{

///

/// 应用程序的主入口点。

///

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new FormCOM()); //定义程序启动默认加载的窗体

//可以通过修改FormCOM() 来启动需要默认打开的窗体。

}

}

}

2.定义程序会用到的类包及全局变量

using System.IO;

using System.IO.Ports;

using System.Threading;

//定义 SerialPort对象

SerialPort SerialPortcom;

Thread_readThread; //用Thread线程类定义线程对象_readThread

bool _keepReading;

3.初始化窗体,初始化窗体控件属性与事件

public FormCOM()

{

InitializeComponent();//该方法中包含窗体中所用空间的属性和事件

}

4.点击打开串口/关闭串口对应的Click 事件处理

private void button_OpenCOM_Click(object sender, EventArgs e)

{

//button_OpenCOM.Text = button_OpenCOM.Text == "打开串口" ? "关闭串口" : "打开串口";

if (button_OpenCOM.Text == "打开串口") //条件判断,如果按钮当前的文本为:“打开串口”,则将它的文本改为“关闭串口”,同时将pictureBox1.Image属性更换为D:\02.ico,但要保证图片的路径正确,否则会报异常。

{

button_OpenCOM.Text = "关闭串口";

button_OpenCOM.BackColor =Color.HotPink;

Image img = Image.FromFile(@"D:\02.ico");//路径要确保正确(位图文件放在“串口调试小助手目录下,需把文件放在D盘,或修改以上路径。”)

// this.pictureBox1.Image.每次点击按钮pictureBox1都对更换图片

this.pictureBox1.Image = img;

String str_PortName = https://www.doczj.com/doc/9b16408808.html,boBox_ComName.Text.Trim();

SerialPortcom = new SerialPort();

SerialPortcom.BaudRate = Convert.ToInt32(https://www.doczj.com/doc/9b16408808.html,boBox_Baudrate.Text.Trim());//波特率: 9600;//115200

SerialPortcom.PortName = https://www.doczj.com/doc/9b16408808.html,boBox_ComName.Text.Trim();

try

{

SerialPortcom.Open();//打开串口 }

catch (UnauthorizedAccessException IOe)

{

//MessageBox.Show(IOe.Message);

//textBox_COMStatus.Text=IOe.Message;

this.listBox_TiShi.Items.Add(IOe.Message);

MessageBox.Show(https://www.doczj.com/doc/9b16408808.html,boBox_ComName.Text.Trim() + "串口被占用");//以消息盒的形式弹出警告

return;

}

catch (IOException IOe)

{

//textBox_COMStatus.Text = IOe.Message;

//MessageBox.Show(IOe.Message);

this.listBox_TiShi.Items.Add(IOe.Message);

return;

}

this.listBox_TiShi.Items.Add(str_PortName + "成功打开串口");

_keepReading = true;

_readThread = new Thread(ReadPort);

//将读到的串口数据作为参数送给Thread线程,创建_readThread线程对象,来循环读取串口数据

_readThread.Start();

}

else

{

button_OpenCOM.Text = "关闭串口";

button_OpenCOM.BackColor =Color.DarkGray;

Image img= Image.FromFile(@"D:\01.ico");

this.pictureBox1.Image = img;

_keepReading = false;

Thread.Sleep(100);

ClosePort(SerialPortcom);

}

}

a.打开端口/关闭串口事件处理所需要的函数

private void showCOMName()

{

string[] portList = System.IO.Ports.SerialPort.GetPortNames(); //获取串口的名称

comboBox_ComName.Items.Clear();

for (int i = 0; i < portList.Length; ++i)

{

string name = portList[i];

https://www.doczj.com/doc/9b16408808.html,boBox_ComName.Items.Add(name);

}

}

//关闭串口的方法

public void ClosePort(SerialPort port)

{

if (port == null)

{

this.listBox_TiShi.Items.Add("串口不存在");

MessageBox.Show("串口不存在,请重新选择!");

}

try

{

port.Close();

if (!port.IsOpen)

{

//Console.WriteLine("串口已经被关闭!");

this.listBox_TiShi.Items.Add(port.PortName + " 成功关闭"); }

}

catch (NullReferenceException)

{

}

}

b.读取串口的事件处理,委托与线程

private void ReadPort()

{

while (_keepReading)

{

if (SerialPortcom.IsOpen)

{

try

{

StringBuilder currentline = new StringBuilder();

//循环接收数据

while (SerialPortcom.BytesToRead > 0)

{

char ch = (char)SerialPortcom.ReadByte();

currentline.Append(ch);

}

//String SerialIn =

System.Text.Encoding.ASCII.GetString(readBuffer, 0, count);

//在这里对接收到的数据进行处理

//------------委托 -------------------------

this.textBox_Read.Invoke(

//在拥有此控件的基础窗口句柄的线程上执行委托Invoke(Delegate)

//即在textBox_ReceiveDate控件的父窗口form中执行委托.

new MethodInvoker(

/*表示一个委托,该委托可执行托管代码中声明为 void 且不接受任何参数的任何方法。在对控件的 Invoke 方法进行调用时或需要一个简单委托又不想自己定义时可以使用该委托。*/

delegate

{

/*匿名方法,C#2.0的新功能,这是一种允许程序员将一段完整代码区块当成参数传递的程序代码编写技术,通过此种方法可以直接使用委托来设计事件响应程序以下就是你要在主线程上实现的功能但是有一点要注意,这里不适宜处理过多的方法,因为C#消息机制是消息流水线响应机制,如果这里在主线程上处理语句的时间过长会导致主UI线程阻塞,停止响应或响应不顺畅,这时你的主form界面会延迟或卡死 */

if (currentline.ToString().Length > 0)

{

//this.textBox_Read.Text = currentline.ToString() + ",";

//this.richTextBox_Read.AppendText(currentline.ToString());

if (checkBox_Show16_1.Checked)

{

this.textBox_Read.Text = ClassFunctions.StrToHexStr(currentline.ToString());

this.richTextBox_Read.AppendText(ClassFunctions.StrToHexStr(currentline.ToString()));

}

else

{

this.textBox_Read.Text = currentline.ToString();

this.richTextBox_Read.AppendText(currentline.ToString());

}

}

}

)

);

//----------委托end-------------------

//this.textBox_Read.Text = currentline.ToString();

currentline = new StringBuilder();

}

catch (Exception ex)

{

Console.WriteLine(ex.Message.ToString());

}

}

else

{

TimeSpan waitTime = new TimeSpan(0, 0, 0, 0, 500);

//TimeSpan:(系统方法)将新的 System.TimeSpan 初始化为指定的天数、小时数、分钟数、秒数和毫秒数。

Thread.Sleep(waitTime);

//主线程休眠500ms等待子线程结束

}

}

try

{

this.listBox_TiShi.Items.Add("线程退出");

}

catch(Exception)

{

}

}

5.初始化SerialPort对象,检测当前系统下可用端口,检测当前用户相关配置信息

//初始化SerialPort对象方法.PortName为COM口名称,例如"COM1","COM2"等,注意是string类型

public void InitCOM(string PortName)

{

SerialPortcom = new SerialPort(PortName);

SerialPortcom.BaudRate=Convert.ToInt32(https://www.doczj.com/doc/9b16408808.html,boBox_Baudrate.Text.Trim()); //波特率 4800,9600,115200,256000

SerialPortcom.Parity = Parity.None;//无奇偶校验位

SerialPortcom.StopBits = StopBits.Two;//两个止位

SerialPortcom.Handshake = Handshake.RequestToSend;//控制协议

SerialPortcom.ReceivedBytesThreshold = 4;//设置 DataReceived 事件发生前内部输入缓冲区中的字节数

SerialPortcom.DataReceived+=new

SerialDataReceivedEventHandler(port1_DataReceived);//DataReceived事件委托

}

6.DataReceived事件委托方法

//DataReceived事件委托方法

private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)

{

try

{

StringBuilder currentline = new StringBuilder();

//循环接收数据

while (SerialPortcom.BytesToRead > 0)

{

char ch = (char)SerialPortcom.ReadByte();

currentline.Append(ch); //文本追加

}

//在这里对接收到的数据进行处理

this.textBox_Read.Invoke(

//在拥有此控件的基础窗口句柄的线程上执行委托Invoke(Delegate)

//即在textBox_ReceiveDate控件的父窗口form中执行委托.

new MethodInvoker(

/*表示一个委托,该委托可执行托管代码中声明为 void 且不接受任何参数的任何方法。在对控件的 Invoke 方法进行调用时或需要一个简单委托又不想自己定义时可以使用该委托。*/

delegate

{

/*匿名方法,C#2.0的新功能,这是一种允许程序员将一段完整代码区块当成参数传递的程序代码编写技术,通过此种方法可以直接使用委托来设计事件响应程序以下就是你要在主线程上实现的功能但是有一点要注意,这里不适宜处理过多的方法,因为C#消息机制是消息流水线响应机制,如果这里在主线程上处理语句的时间过长会导致主UI线程阻塞,停止响应或响应不顺畅,这时你的主form 界面会延迟或卡死 */

this.textBox_Read.Text=currentline.ToString();//输出到主窗口文本控件 this.richTextBox_Read.AppendText(currentline.ToString());//输出到主窗口文本控件+"\n"

//this.textBox_Read.Text += " ";

}

)

);

//this.textBox_Read.Text = currentline.ToString();

currentline = new StringBuilder();

}

catch (Exception ex)

{

Console.WriteLine(ex.Message.ToString());

}

}

// DataReceived事件委托方法

private void port1_DataReceived(object sender, SerialDataReceivedEventArgs e) {

try

{

StringBuilder currentline = new StringBuilder();

//循环接收数据

char ch='0';

while (SerialPortcom.BytesToRead > 0)

{

ch = (char)SerialPortcom.ReadByte(); //

currentline.Append(ch);

}

//在这里对接收到的数据进行处理

//

//-------------------------------------

// this.textBox_Read.Invoke(

// //在拥有此控件的基础窗口句柄的线程上执行委托Invoke(Delegate) // //即在textBox_ReceiveDate控件的父窗口form中执行委托.

//new MethodInvoker(

// /*表示一个委托,该委托可执行托管代码中声明为 void 且不接受任何参数的任何方法。在对控件的 Invoke 方法进行调用时或需要一个简单委托又不想自己定义时可以使用该委托。*/

//delegate

//{

// /*匿名方法,C#2.0的新功能,这是一种允许程序员将一段完整代码区块当成参数传递的程序代码编写技术,通过此种方法可以直接使用委托来设计事件响应程序以下就是你要在主线程上实现的功能但是有一点要注意,这里不适宜处理过多的方法,因为C#消息机制是消息流水线响应机制,如果这里在主线程上处理语句的时间过长会导致主UI线程阻塞,停止响应或响应不顺畅,这时你的主form界面会延迟或卡死 */

this.textBox_Read.AppendText(ch.ToString());//输出到主窗口文本控件

this.textBox_Read.Text += "kk ";

currentline = new StringBuilder();

}

catch(Exception ex)

{

Console.WriteLine(ex.Message.ToString());

}

}

7.数据发送事件处理

private void button_Send_Click(object sender, EventArgs e)

{

String str_Send =this.richTextBox_Send.Text;

if (str_Send.Length > 0)

{

// this.WriteCom(SerialPortcom, str_Send, 3);

SendCommand(str_Send, SerialPortcom);

}

}

//向串口发送数据

public void SendCommand(string CommandString, SerialPort port)

{

byte[] WriteBuffer = Encoding.ASCII.GetBytes(CommandString); //字符编码,继承自接口 ICloneable

try

{

port.Write(WriteBuffer,0,WriteBuffer.Length);

// port.Write(CommandString);

}

catch(Exception e)

{

MessageBox.Show("Exception:串口关闭或被占用\n" + e);

//如果串口被关闭或被占用,以消息窗的形式提示“串口被关闭或被占用”,并打印异常。 }

}

8. 写数据操作,利用线程循环发送数据

///

/// WriteCom(SerialPort COMport, String CommandString, int num) 写串口 /// 参数:SerialPort COMport:已打开的串口

/// String CommandString:需要发送的数据,

/// int num:循环发送次数,如果发送成功则忽略该参数

/// 返回值:写成功则返回"0",

///

///

public String WriteCom(SerialPort COMport, String CommandString, int num) {

String str_Return = "-1";

if ((COMport == null) || (!COMport.IsOpen))

{

return"Com_Closed";

}

//{

COMport.DiscardInBuffer();// serialPort.DiscardInBuffer();

//清空接收缓冲区

COMport.DiscardOutBuffer();

{

}

CommandString = CommandString.Trim();

if (CommandString.Length < 1)

{

str_Return = "-1";

}

else

{

byte[] WriteBuffer = HexStringToByteArray(CommandString);

for (int i = 0; i < num; i++)

{

try

{

//COMport.Write(CommandString);

//写指令,该指令返回 00 00 00 68 00 00 00 53 00 00 AC 67 16

for (int k = 0; k < WriteBuffer.Length && COMport != null; k++) {

byte[] WriteBuffer_2 = new byte[1];

WriteBuffer_2[0] = WriteBuffer[k];

COMport.Write(WriteBuffer_2, 0, WriteBuffer_2.Length);

// 写指令,该指令返回 00 00 00 68 00 00 00 53 00 00 AC 67 16

//COMport.Write((WriteBuffer, 0, WriteBuffer.Length);

// 写指令,该指令返回 00 00 00 68 00 00 00 53 00 00 AC 67 16 }

//byte[] WriteBuffer_3 = new byte[1];

//WriteBuffer_3[0]=Convert .ToByte(WriteBuffer[1]);

//COMport.Write(WriteBuffer_3, 0, WriteBuffer_3.Length);

str_Return = "0";

break;//发送成功则跳出for循环

}

catch (TimeoutException e)

{

str_Return = e.Message;

}

catch (System.IO.IOException e)

{

str_Return = e.Message;

}

}

return str_Return;

}

a. 数据转换,将16进制数转化为字节型数据

///

Convert a string of hex digits (ex: E4 CA B2) to a byte array.

///The string containing the hex digits (with or without spaces).

/// Returns an array of bytes.

public static byte[] HexStringToByteArray(string s) //将(Hex) 16进制的数据转化为字节型数据

{

s = s.Replace(" ", ""); //去除空格

if (s.Length < 1) return null;

if (s.Length % 2 != 0) s = "0" + s;

byte[] buffer = new byte[s.Length / 2];

//每两位为一组,表示1个字节。

try

{

for (int i = 0; i < s.Length; i += 2)

buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);

//将字符转化为字节类型

//每两位为一组,表示1个字节。

}

SubString 为系统函数,函数原型如下:

public string Substring(int startIndex);

//

// 摘要:

// 从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定的长度。

//

// 参数:

// startIndex:

// 此实例中子字符串的起始字符位置(从零开始)。

//

// length:

// 子字符串中的字符数。

//

// 返回结果:

// 与此实例中在 startIndex 处开头、长度为 length 的子字符串等效的一个字符串,如果startIndex 等于此实例的长度且 length

// 为零,则为 System.String.Empty。

//

// 异常:

// System.ArgumentOutOfRangeException:

// startIndex 加 length 之和指示的位置不在此实例中。- 或 -startIndex 或 length 小于零。

catch (FormatException)

{

return null;

}

return buffer;

}

9.复选框:强制转换为16进制事件处理

private void checkBox_Turn16_1_CheckedChanged(object sender, EventArgs e)

{

if (checkBox_Turn16_1.Checked)

{

this.textBox_Read.Text = ClassFunctions.StrToHexStr(textBox_Read.Text);

this.richTextBox_Read.Text=(ClassFunctions.StrToHexStr(richTextBox_Read.Text));

}

else

{

this.textBox_Read.Text = ClassFunctions.HexStrToStr(textBox_Read.Text);

this.richTextBox_Read.Text=ClassFunctions.HexStrToStr(richTextBox_Read.Text);

}

}

a.普通文本转换为16进制值

///

///

/// 普通文本格式转换成16进制

/// 返回16进制格式的字符串带空格

/// 如"1desg" 转换成 "31 64 65 73 67"

///

///

///

public static string StrToHexStr(string mStr) //返回处理后的十六进制字串

{

if (mStr == null || mStr.Length == 0)

{

return"";

}

return BitConverter.ToString(

ASCIIEncoding.Default.GetBytes(mStr)).Replace("-", " ");

} /* StrToHex */

10.清空按钮清空listBox和richTextBox的文本区

private void button_Clean_Click(object sender, EventArgs e) {

this.richTextBox_Read.Text = null;

this.listBox_TiShi.Items.Clear();

this.textBox_Read.Text = null;

}

11.点击“关于我们按钮”在主窗体中打开其他窗体

private void button2_Click(object sender, EventArgs e)

{

AboutBox box = new AboutBox(); //创建需要打开的窗体的对象 box.Show();

}

12.窗体布局及消息盒提示

默认窗体布局

当串口未被打开时,数据发送异常。

当串口被占用时,异常捕获

当串口不存在时,在列表框中提示端口不存在。

13. 窗体布局及相应控件介绍

串口调试助手设计思路与手册

(2016-11-21)本设计包含的函数模块有: 1.打开/关闭串口和设置串口参数 2.软件退出 3.获取串口参数 4.发送数据 5.接受数据 6.清空发送区 7.清空接收区 8.计数清零 9.暂停/开启接收数据 10.自动发送 11.发送周期设置 12.打开文件 13.保存数据 补充说明: 1.设置串口参数里面包括了1)获取串口可用串口。2)波特率下拉参数设置。3)校验位下 拉参数设置。4)数据位下拉参数设置。5)默认设置。6) 2.发送数据前先判断是否为十六进制,是否为自动发送。是十六进制发送则把数据先转为 十六进制格式并获取数据长度,再把数据转到发送缓冲区发送,否则ASCII码文本发送3.接收数据函数在串口运行时一直在判断是否有新数据,并根据不同的接收模式,加显不 同格式的数据 软件代码详细介绍: (74-92h)可用串口检测及下拉控件。 (96-109h)波特率下拉控件设置。 (113-121h)校验位下拉控件。 (125-131h)数据位下拉控件。 (135-141h)停止位下拉控件。 (145-155h)默认参数设置。 (159-162h)接收数据串口说明与启动。 (168-174h)关闭软件设置。 (176-180h)关闭窗口后先关闭线程再关闭进程。 (182-194h)定义串口各参数。 (197-281h)打开串口按钮回调函数,先判断是否有可用串口,没有则显示“无可用串口,无法打开”然后返回,有则继续判断当前是要打开串口还是关闭串口,若是需要打开串口则尝试设置串口参数并打开串口,打开串口失败会提示无法打开串口,打开串口成功则串口参数下拉控件变灰发送数据按钮点亮,判断自动发送控件如果被选中则打开串口后直接自动发送数据。如果之前判断按钮回调是关闭串口,则进行关闭串口并配置相关参数。 (282-347h)CRC16查表法校验函数。 (349-357h)发送数据按钮回调及自动发送按钮回调。 (358-369h)发送数据线程配置。 (371-510h)发送数据函数,先判断是否正在发送数据,如不在发送则设置当前正在发送状态,后继续判断是写序列号模式还是串口调试模式,串口调试模式时先定义发送缓冲区和

经典的串口调试工具源代码(一)

经典的串口调试助手源代码(一) Dim OutputAscii As Boolean Dim InputString As String Dim OutputString As String '============================================================================== ======= ' 变量定义 '============================================================================== ======= Option Explicit ' 强制显式声明 Dim ComSwitch As Boolean ' 串口开关状态判断 Dim FileData As String ' 要发送的文件暂存Dim SendCount As Long ' 发送数据字节计数器 Dim ReceiveCount As Long ' 接收数据字节计数器Dim InputSignal As String ' 接收缓冲暂存 Dim OutputSignal As String ' 发送数据暂存 Dim DisplaySwitch As Boolean ' 显示开关 Dim ModeSend As Boolean ' 发送方式判断

Dim Savetime As Single ' 时间数据暂存延时用Dim SaveTextPath As String ' 保存文本路径 ' 网页超链接申明 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub CloseCom() '关闭串口 On Error GoTo Err If MSComm.PortOpen = True Then MSComm.PortOpen = False ' 先判断串口是否打 开,如果打开则先关闭 txtstatus.Text = "STATUS:COM Port Cloced" ' 串口状态显示 mnuconnect.Caption = "断开串口" cmdswitch.Caption = "打开串口" 'ImgSwitch.Picture = LoadPicture("f:\我的VB\串口调试软件\图片\guan.jpg") ' 显示串口已经关闭 的图标 ImgSwitchoff.Visible = True ImgSwitchon.Visible = False Err: End Sub Private Sub UpdateStatus() If MSComm.PortOpen Then StatusBar1.Panels(1).Text = "Connected" mnuautosend.Caption = "自动发送" mnuconnect.Caption = "断开串口" Else StatusBar1.Panels(1).Text = "断开串口" mnuautosend.Caption = "disautosend" mnuconnect.Caption = "打开串口" End If StatusBar1.Panels(2).Text = "COM" & https://www.doczj.com/doc/9b16408808.html,mPort StatusBar1.Panels(3).Text = MSComm.Settings If (OutputAscii) Then StatusBar1.Panels(4) = "ASCII" Else StatusBar1.Panels(4) = "HEX" End If ' On Error GoTo Err If ChkAutoSend.Value = 1 Then ' 如果有效则,自动发送

串口调试助手使用方法

串口调试助手使用方法 你可以试试串口监控器,一个功能强大,非常易用的软件。 串口监控器是一个免费的多功能串口通讯监控软件,它能够多种方式显示,接收,分析通讯数据;能够以多种灵活方式发送数据;功能强大,操作简便,在串口通讯监控,设备通讯测试中,能够有效提高工作效率。 主要功能如下: 接收数据: 1. 以十六进制方式显示接收到的数据。 2. 以字符方式显示接收到的数据。 3. 数据帧自动识别,分行显示。 4. 接收数据自动换行设置。 5. 显示或隐藏数据帧的接收时间。 6. 自动清除,自动保存接收到的数据。 7. 接收数据个数计数。 发送数据: 1. 十六进制方式发送数据。 2. 字符串方式发送数据。 3. 发送“发报窗口”当前光标行的数据帧。 4. 循环发送“发报窗口”当前光标行的数据帧。 5. 循环发送“发报窗口”固定行的数据帧。 6. 循环依次发送“发报窗口”的多行数据帧。(设置起始行,行数) 7. 触发发送,接收到“发报窗口”某一行数据,触发发送“发报窗口”另一行数据。 8. 发送数据个数计数。 实用增强功能: 1. 强大易用的进制转换功能。 2. 智能识别当前光标处数据帧的行号,“字符”或“十六进制数”的个数。 3. 智能计算当前选择的“字符”或“十六进制数”的个数。 4. 强大的数据查找功能。 5. 定时保存,定时清除数据。 6. 根据自己的喜好,灵活变换操作界面。

应用场合: 1. 截取和分析设备之间通讯数据流。 2. 串行外围设备硬件开发。 3. 串行设备驱动程序开发。 4. 调试和测试设备和设备之间的串行通讯过程。 5. 记录和分析RS232/422/485通信过程。 6. 模拟某设备通讯过程,对另外设备进行通讯测试。

串口调试助手毕业论文

1. 双击运行软件 如果出错,请先安装Microsoft .NET Framework 2.0,即微软.NET 2.0虚拟机。 第一次运行时,请先阅读使用协议,并单击“我同意”。如图1.1所示。 图1.1 第一次运行时请阅读使用协议,单击“我同意” 图1.2 JCBus串口调试助手的工作区域 随后,可以看到如图1.2所示的软件工作区域: 1.1标题栏:显示为“JCBus串口调试助手” 1.2菜单栏:包括“文件”、“帮助” 等菜单项目 1.3串口参数设置区:用于设置串口名称、波特率、校验位、数据位和停止位等 1.4调试结果解析区:用于解析调试过程中的数据,使数据在16进制、10进制等之间转换。 1.5调试区:分“消息应答”和“自动接收”两种调试方式。 A.“消息应答”:软件向设备发送一条消息后接收设备回应的信息;

B.“自动接收”:软件只负责接收设备发送的消息并在界面上显示出来。 两种方式可以通过点击“消息应答”或者“自动接收”标签页来切换。 1.6显示区:处于调试区的中间位置1.7调试操作区:记录“消息应答” 方式的详细调试操作 2设置串口参数 软件使用单串口调试设备,所以必须正确地设置串口参数。软件启动后将自动识别所有可用的串口,并打开第一个可用的串口,如图2.1所示。 图2.1 JCBus串口调试助手启动后,默认打开第一个可用的串口如果要使用另一个串口或者更改当前串口的设置,请先单击“关闭”按钮,软件将显示串口已经关闭,如图2.2所示。 图2.2 设置串口参数前,请先关闭已经打开的串口您可以设置的参数有: A.串口:软件自动识别所有可用的串口,您只需要在下拉框中选择即可; B.波特率:除了常规的2400、4800、9600、19200和38400以外,只要您的硬件允许,您还可以输入其他波特率; C.校验位:可以选择“无”、“奇校验位”、“偶校

串口调试助手VC++6.0程序

串口调试助手源程序 及编程详细过程 作者:龚建伟 2001.6.20 可以任意转载,但必须注明作者和说明来自https://www.doczj.com/doc/9b16408808.html,,不得作为商用 目次: 1.建立项目 2.在项目中插入MSComm控件 3.利用ClassWizard定义CMSComm类控制变量 4.在对话框中添加控件 5.添加串口事件消息处理函数OnComm() 6.打开和设置串口参数 7.发送数据 在众多网友的支持下,串口调试助手从2001年5月21日发布至今,短短一个月,在全国各地累计下载量近5000人次,在近200多个电子邮件中,20多人提供了使用测试意见,更有50多位朋友提出要串口调试助手的源代码,为了答谢谢朋友们的支持,公开推出我最初用VC控件MSComm编写串口通信程序的源代码,并写出详细的编程过程,姑且叫串口调试助手源程序V1.0或VC串口通讯源程序吧,我相信,如果你用VC编程,那么有了这个代码,就可以轻而易举地完成串口编程任务了。(也许本文过于详细,高手就不用看) 开始吧: 1.建立项目:打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest(与我源代码一致,等会你会方便一点); 2.在项目中插入MSComm控件选择Project菜单下Add To Project子菜单中的 Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,

串口调试助手使用规范V15.01(试用)

串口调试助手使用规范(试用) ——截取指令方法
版本:V15.01 日期:2015.0128 类别:APP 使用规范
1
串口调试助手使用规范(试用) 截取指令方法
广州市英沙电子系统有限公司 2015-01-28 发布

串口调试助手使用规范(试用) ——截取指令方法
版本:V15.01 日期:2015.0128 类别:APP 使用规范
2
目 录
1 引言 ................................................................................................................................................................................... 3 2 使用前准备........................................................................................................................................................................ 3 3 串口调试助手及其安装 ................................................................................................................................................... 3 4 串口线与设备的物理连接 ............................................................................................................................................... 4 5 串口调试助手截取指令步骤 ............................................................................................................................................ 4 6 分析截取的指令............................................................................................................................................................... 6?

Android 串口编程原理和实现方式附源码

提到串口编程,就不得不提到JNI,不得不提到JavaAPI中的文件描述符类:。下面我分别对JNI、以及串口的一些知识点和实现的源码进行分析说明。这里主要是参考了开源项目android-serialport-api。 串口编程需要了解的基本知识点:对于串口编程,我们只需对串口进行一系列的设置,然后打开串口,这些操作我们可以参考串口调试助手的源码进行学习。在Java中如果要实现串口的读写功能只需操作文件设备类:即可,其他的事都由驱动来完成不用多管!当然,你想了解,那就得看驱动代码了。这里并不打算对驱动进行说明,只初略阐述应用层的实现方式。 (一)JNI: 关于JNI的文章网上有很多,不再多做解释,想详细了解的朋友可以查看云中漫步的技术文章,写得很好,分析也很全面,那么在这篇拙文中我强调3点: 1、如何将编译好的SO文件打包到APK中?(方法很简单,直接在工程目录下新建文件夹libs/armeabi,将SO文件Copy到此目录即可) 2、命名要注意的地方?(在编译好的SO文件中,将文件重命名为:lib即可。其中是编译好后生成的文件) 3、MakeFile文件的编写(不用多说,可以直接参考package/apps目录下用到JNI的相关项目写法) 这是关键的代码: [cpp]view plaincopy

(二):

文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄,该结构表示开放文件、开放套接字或者字节的另一个源或接收者。文件描述符的主要实际用途是创建一个包含该结构的或。这是API的描述,不太好理解,其实可简单的理解为:就是对一个文件进行读写。 (三)实现串口通信细节 1) 建工程:SerialDemo包名:org.winplus.serial,并在工程目录下新建jni和libs两个文件夹和一个org.winplus.serial.utils,如下图: 2) 新建一个类:SerialPortFinder,添加如下代码: [java]view plaincopy 1.package org.winplus.serial.utils; 2. 3.import java.io.File; 4.import java.io.; 5.import java.io.IOException; 6.import java.io.LineNumberReader; 7.import java.util.Iterator; 8.import java.util.Vector; 9. 10.import android.util.Log; 11. 12.public class SerialPortFinder { 13. 14.private static final String TAG = "SerialPort"; 15.

串口调试助手使用说明概要

串口调试助手使用说明 为简单明了,有些不言自明的功能不作介绍。 1 串口调试助手 1.1 设置串口参数: 串口号:1-16 波特率:600-256000,>115200 时需要硬件支持。 2 接收区/键盘发送区 2.1 接收数据 a 设置串口参数 b 如果要按十六进制形式显示接收数据,将十六进制显示选项选中。 c 点击打开/关闭串口区中的打开串口按钮。 2.2 显示接收数据的长度 因某些限制,显示接收数据的文本不能太长,所以当显示文本长度快达到 62K 时会自动将显示文本删减到 32K,此时文本可保留 32K 的字符或约 10K 的十六进制数据显示。 2.3 在键盘上发送英文字符 a在接收区/键盘发送区的输入框中用鼠标点一下。 b在键盘按下按键立刻发送。 在这里不能发送回车换行,也不能发送汉字,若要发送请在单字符串发送区发送。 3 发送数据 可以发送单字符串,多字符串(字符串序列或直接在键盘上发送英文字符。有两种发送数据格式,一种是普通的字符串,另外一种是十六进制数据即 HEX 格式数据。发送 HEX 格式数据时要在字符串输入区中输入 HEX 格式字符串,并且要将相应区内的十六进制发送选项选中。 例:HEX 格式数据字符串12 34 AB CD FF

3.1 单字符串发送区 3.1.1自动发送,自动发送周期: 此项功能可以每隔一段时间反复地自动发送输入框中的数据,点击自动发送按钮后即启动自动发送功能。 自动发送周期最大为 65535mS。 3.2 多字符串发送区 在多字符串发送区可以发送一个字符串,或者自动地、依次发送所有的字符串。 请把鼠标移到“接收区/键盘发送区”和“多字符串发送区”之间,当鼠标形状发生变化时按下鼠标器的左键不松开,然后移动鼠标,将“多字符串发送区”的宽度调宽一些,让“间隔时间”显露出来。 3.2.1发送一个字符串 a 输入字符串。 b 如果要发送 16 进制数据, 要先在字符串后的 HEX 选项框中打上对勾。 c 点击发送按钮。发送后,按钮上的数字作为当前字符串序号保存起来,此序号在自动循环发送中要用到它。 3.2.2 发送多个字符串(字符串序列 a 输入多个字符串。 b 如果要发送 16 进制数据, 将相应的 HEX 选项打上对勾。 c 输入间隔时间,最大为 65535mS。 d 点击自动循环发送按钮。 延时时间到达后发送当前字符串( 见3.2.1的步骤 c 的下一个字符串,间隔一段时间后再发送下一个。发送完毕自动从头开始继续发送。 4 打开/关闭串口区 下载后打开串口选项:选中这选项后,每次下载后会自动打开调试助手指定的串口,接收应用程序发送的数据。

串口调试助手c开发

1.建立项目: 打开VC+ + 6.0,建立一个基于对话框的MFC应用程序SCommTest(与我 源代码一致,等会你会方便一点); 2.在项目中插入MSComm控件 选择Project菜单下Add To Project子菜单中的Componentsand Controls,选项,在弹出的对话框中双击Registered ActiveXControls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。选择Microsoft Communications Control,version6.0,,单击Insert 按钮将它插入到我们的Project 中来,接受缺省的选项。(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安装VC6时没有把ActiveX 一项选上,重新安装VC6,选上ActiveX就可以了),这时在ClassView 视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。3.利用ClassWizard定义CMSComm类控制对象 打开ClassWizard- >Member Viariables 选项卡,选择CSCommTestDlg^,为IDC_MSCOMM1添加控制变量:m_ctrlCom m,这时你可以看一看,在对话框头文件中自动加入了//{{AFX_INCLUDES()#include "mscomm.h" //}}AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。 4 .在对话框中添加控件 向主对话框中添加两个编辑框,一个用于接收显示数据ID为 IDC_EDIT_RXDATA另一个用于输入发送数据,ID为IDC_EDIT_TXDAT A再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为 IDC_BUTTON_MANUALSEND别忘记了将接收编辑框的Prop erties->Styles 中把Miltiline和Vertical Scroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。

VBNET开发全功能串口调试助手

https://www.doczj.com/doc/9b16408808.html, 开发全功能串口调试助手(含完整工程) 小记:https://www.doczj.com/doc/9b16408808.html, 的串口通信用了很长时间了,也只用 Write 和Read 这样的方 法,以前都是用这种方式做上位机软件, 如此足矣。而前几天研究GSM 模块时对 串口返回的数据总是把握不好,参考开发板附送的例程,发现采用 SerialPort 的DataReceived 事件,可以实现中断触发式的数据接收。于是想到要自己做一 个串口调试助手,在实现基本功能的前提下增加一些方便自己调试的功能。 经过 断断续续的编写,就做成了下面这个小软件: 这个软件能够实现串口调试助手的全部功能,经过通信测试,数据接收性能 不亚于呼啸工作室的SComAssistant2.2,通过加大输入缓冲区,可以满足大量 数据接收。 https://www.doczj.com/doc/9b16408808.html, 的串口通信主要使用 VS 自带的SerialPort 控件,而不是早先的 MSComm 更具有兼容性,这也是很久以前就放弃 VB 改用.NET 的直接原因。该控 件的主要方法、属性如下(该数据来自 VS 的MSD 帮助库):

想要通过串口收发数据,就需要对串口进行配置,包括设置端口、波特率、数据格式(如COM端口、9600bps、8位数据位、无校验位、1位停止位)等属性,之后通过Open方法打开串口。打开串口可通过手动指定,也可以使用GetPortNames 方法获取计算机中存在的串口。如果打开出错,则可能是串口不存在或者已被占用。下面是相应代码: Private SubSerialPortOpen() On Error GoToErr If SerialPort.IsOpen = True ThenSerialPort.Close() '避免重复打开端 口 SerialPort.Ope n() LabelCOMStatus.Text ="串口已打开" Exit Sub Err: MsgBox(‘ 串口不存在或已被占用!" + vbNewLine + ErrorToString()) ' 出现错误,显示错误信息 En dSub 如果想要在串口中支持中文字符收发,则可在初始化时设置串口控件的编码: SerialPort.E ncodi ng = System.Text.E ncodi ng.Default 发送数据通过Write方法来完成,由于串口调试助手需要支持文本和16进制, 需要加入转换代码: Private SubButtonSendData_Click( ByVal sender AsSystem.Object, ByVal e AsSystem.EventArgs) Handles ButtonSendData.Click On Error GoToErr

串口调试助手C++开发

1.建立项目: 打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest(与我源代码一致,等会你会方便一点); 2.在项目中插入MSComm控件 选择Project菜单下Add To Project子菜单中的 Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX 控件出现在列表框中。选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安装VC6时没有把ActiveX一项选上,重新安装VC6,选上ActiveX就可以了),这时在ClassView视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。

3.利用ClassWizard定义CMSComm类控制对象 打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中自动加入了//{{AFX_INCLUDES() #include "mscomm.h" //}}AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。 4.在对话框中添加控件 向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。别忘记了将接收编辑框的Properties->Styles中把Miltiline和Vertical Scroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。 再打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg 类,为IDC_EDIT_RXDATA添加CString变量m_strRXData,为

纯业余者用VC(MFC)编写串口调试助手(含VC6工程源文件)

纯业余者用VC(MFC)编写串口调试助手 1.序 毕业到现在,转眼就做射频开发10年了,一直从事直放站、干放等通信边缘行业,从低噪放、锁相源、选频、功放到整机,射频就那么点东西,而且越来越集成化,软件无线电是必然趋势。做射频从业面会越来越窄,我知道所有人都会说,当你成为专家的时候,一切就都不是问题,可有几个真正的专家,再者说,射频需要经验的积累,只有实际项目做的越多越广,经验也就积累得越多,并不是一朝一夕能达到的。 前不久突然觉得,我的射频模块控制要是也是自己来编程控制多好啊!那就得学单片机编程,学习上位机编程了,可我都不会啊,要不就先来整整上位机,windows方面的。大学唯一学的编程语言是C语言,可根本不能理解用C做什么,还都还给老师10多年了,这怎么办?从BASIC,C/C++,JAVA,PASCAL搜索了一圈,还是选C++吧,毕竟是C 语言发展而来,用VC环境,身边有可以请教的人。在网上转悠了很久,发现《windows 程序设计》是必看,《MFC Windows程序设计》是学MFC最经典的书籍。OMG,这些书啊,都是上千页的,白天都在上班,哪有时间看哦,只有先下载下来作为参考资料了。 扯远了啊。这也不行那也不行,怎么办呢?干脆硬着头皮上吧,找几个实例照搬,再修修改改加深理解吧。 第一个目标,自己编写个串口调试助手,掌握串口通信编程,这样上位机的编写就有希望了。 好了,目标定下来了。网上下载了个串口调试助手,确定基本功能: 1.自动寻找串口,并自动添加到下拉框中共选择; 2.有波特率、数据位、停止位、校验位的选择设置; 3.串口打开控制按钮; 4.发送、清除按钮; 5.接收是自动实现的; 6.有定时自动发送功能; 7.有传送文件功能; 8.有状态栏显示,指示串口状态,设置参数和发送接收显示。 下面就一步步实现,本人纯业余,只是记录下来这个学习过程,请勿拍砖。 开发平台Visual C++6.0英文版,电脑是i7-2670Q四核8G内存1G独显的笔记本,装的win7 64位旗舰版,因此VC6兼容不是太好,有些小毛病,不过不影响编写。

C++课程设计 串口调试助手

目录 【内容摘要】 (2) 【关键词】 (2) 1 开发语言及开发平台简介 (3) 1.1 开发语言 (3) 1.1.1 C语言 (3) 1.1.2 C++语言 (3) 1.2 开发平台 (4) 1.2.1 Microsoft Visual C++ (4) 1.2.2 C++ Builder (5) 2 软件开发过程 (6) 2.1 开发所需要的控件 (6) 2.1.1 按钮控件 (6) 2.1.2 文本控件 (6) 2.1.3 串口控件 (6) 2.1.4 选择控件 (7) 2.2 数据发送设计 (7) 2.3 数据接收设计 (9) 3 软件使用说明 (11) 4 软件测试 (13) 4.1 辅助工具 (13) 4.2 发送测试 (13) 4.3 接收测试 (13) 5 总结 (15) 致谢 (16) 参考文献 (17) 附录主要程序 (18) 串口发送程序 (18) 串口接收程序 (19) 【Abstract】 (21) 【Key Words】 (21)

串口调试助手设计 专业:电子科学与技术学号:XXXXXXXXXXX 学生姓名:X X X 指导老师姓名:X X X 【内容摘要】串口调试助手是串口调试相关工具,网络上有很多串口调试助手,界面不同,功能各异,使用的开发语言和开发平台也不相同。有的使用C语言开发,有的使用C++语言开发,还有的即使用C语言也使用C++语言;开发平台有的使用Visual C++,有的使用C++ Builder等。本软件使用C语言和C++语言,开发平台使用C++Builder软件。该串口调试助手串口调试助手版支持常用的110 ~ 256000bps波特率,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送数据或字符(包括中文),能发送文本文件(*.txt 文本),可以任意设定自动发送周期,并能将接收数据保存成文本文件(*.txt),是做项目开发调试串口的好工具。 【关键词】串口;C++;C++ Builder;控件;测试;

串口调试助手3_用户手册

串口调试助手3.0版 使用说明书

目录 串口调试助手3.0版 (1) 使用说明书 (1) 串口调试助手3.0版简介 (1) 安装串口调试助手3.0版 (2) 使用频道列表 (3) 使用A频道 (4) 使用B频道 (5) 使用C频道 (6) 使用D频道 ............................................................ 错误!未定义书签。

软件使用说明书串口调试助手3.0版简介 串口调试助手3.0版是WMD工 作室最新研发的智能调试工具, 是不折不扣的“串口助手”。 串口调试助手3.0版可以实现的功 能包括发送接受16进制数、字符 串、传输文件、搜索出空闲串口 等,此外,还可以搜索用户自定义设置其他的项目。 为了让大家更好的使用串口调试助手3.0版将提供自动更新功能,用于免费升级软件以及修正bug.。 1

软件使用说明书 安装串口调试助手3.0版 安装串口调试助手需要Windows 2000/XP/2003/Vista操作系统中 的任一种,Windows NT 4.0 下面 没有测试过,不保证可运行。 串口调试助手为绿色软件,下载 后只需要复制到硬盘上的指定目录中即安装完成。 因为要到网络上加查更新,如果您的计算机的安 全防护软件提示,该程序需要访问网络的时候, 建议选择“允许”访问。 2

软件使用说明书使用列表 软件安装完成后,直接双击“串口调试助手3.0”即可运行软件。 检查串口线是否连接到计算机和设备 上。如果2端都是本计算机上的串口, 一定确认串口调试助手打开的是您指 定的串口。 3

基于labview串口助手设计

学院:华东交通大学机电工程学院班级:2012xxxxxx 学号:2012xxxxxxxx 姓名:xxxx

目录 《虚拟仪器设计》课程设计任务书 (2) 1.引言 (4) 2. labview及串口通信简介 (4) 2.1 Labview (4) 2.2串口通信简介 (5) 3.串口相关节点介绍 (6) 3.1 VISA配置串口 (6) 3.2 设置缓冲区大小 (7) 3.3visa写入 (7) 3.4 VISA读取 (7) 4.程序框图设计 (8) 4.1 串口初始化输入模块 (8) 4.2数据发送程序 (9) 4.3数据接收 (9) 4.4字节数显示 (10) 4.5 属性节点设置 (10) 5.前面板设计 (10) 6.结语 (11) 7.心得体会 (12) 8. 参考文献 (13)

华东交通大学机电工程学院 《虚拟仪器设计》课程设计任务书 学生姓名:高俊须学号:20120310110212 一、设计题目 串口调试助手设计 二、设计目的和要求 通过对虚拟仪器的设计,了解虚拟仪器设计的基本原理及常用的对象使用方法;通过设计一台虚拟式数据采集系统、图形识别系统、通过串口、并口控制、测温系统、转速测量系统等,了解虚拟仪器数据采集卡的使用及设置,并口或串口的数据传输,了解虚拟编程中如何使用非NI公司的数据采集卡或电脑中常用的声卡,如何配置DAQ助手等,学会把外界物理信号采集到计算机并进行简单分析或者通过虚拟仪器产生符合要求的信号并通过声卡输出或者学会利用NI的ELVIS系统设计简单的测量软件。加深虚拟仪器知识、单片机的了解,培养学生运用虚拟仪器思想解决工程实际问题的能力。 二、设计内容 A.详细要求: (1)串口可选;(2)波特率可调;(3)串口通讯方式可调(9位还是11位); (4)校验方式可选(奇校验偶校验);(5)设计界面要标准 B.前面板上要设置必要的控件对象以设置相应参数。 C.设计界面要美观,程序可读性好。 三、设计进度安排 设计时间总计2周 课程设计任务及要求讲解(0.5天) 设计任务分析及查找资料(1.5天) 程序编制及调试(5.5天) 设计说明书撰写(2天) 答辩(0.5天) 四、设计任务书应包括的主要内容 目录设计题目任务分析实现过程程序前面板及流程图

串口调试助手源代码

串口调试助手预源代码 using System; using System.Collections.Generic; using https://www.doczj.com/doc/9b16408808.html,ponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.IO.Ports; using System.Threading; using DevExpress.XtraEditors; using System.Text.RegularExpressions; namespace WindowsFormsApplication3 { public partial class Form1 : XtraForm { SerialPort sp1 = new SerialPort(); int Flag = 0; int StateChanged = 0;

int StateChanged_Ascii = 1; int StateChanged_16 = 0; string Temp = null; string Temp_memoSend = null; private void memoSend_EditValueChanged(object sender, EventArgs e) { } public Form1() { InitializeComponent(); sp1.DataReceived += sp1_DataReceived; } private void Form1_Load(object sender, EventArgs e) { this.MaximizeBox = false; //检查是否有串口 string[] str = SerialPort.GetPortNames(); if (str == null) { MessageBox.Show("本机没有串口!", "error"); return; } //添加串口项目 foreach (string port in System.IO.Ports.SerialPort.GetPortNames()) { cbSerial.Properties.Items.Add(port); } //串口设置默认选择项 cbSerial.SelectedIndex = 0; Control.CheckForIllegalCrossThreadCalls = false; sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived); //订阅委托 } private void comboBoxEdit1_SelectedIndexChanged(object sender, EventArgs

串口调试助手代码分析42

第5章串口调试助手代码分析 1、建立基于对话框的工程SCOMM 2、绘制界面,如下图: 接收区 串口组合框:IDC_COMBO_COMSELECT,m_Com 波特率组合框:IDC_COMBO_SPEED,m_Speed 停止位组合框:IDC_COMBO_STOPBITS,m_StopBits 数据位组合框:IDC_COMBO_DATABITS,m_DataBits 校验位组合框:IDC_COMBO_PARITY,m_Parity 十六进制显示(接收):IDC_CHECK_HEXRECIEVE,m_ctrlHexReceieve 接收编辑框:IDC_EDIT_RECIVE ,m_ReceiveData m_ctrlReceiveData Style:Vertical Scroll MultiLine 打开串口IDC_BUTTON_OPENPORT,m_ctrlOpenPort 串口开关标志图标IDC _STATIC_OPENOFF,m_ctrlIconOpenoff 数据文件保存路径IDC _EDIT_SA VEPATH,m_strCurPath 保存显示数据文件路径IDC _EDIT_SA VEPATH, m_ctrlSavePath 接收计数IDC_STATIC_RXCOUNT ,m_ctrlRXCOUNT 发送区 …。。。。。。。。。。。。。。 3、添加CSeraiPort类文件 将类文件SerialPort.h SerialPort.cpp 复制到工程所在文件夹中(选择改进

后的类),然后单击VC 6.0菜单Projrct -> Add to Projrct ->Files… ,再在打开的文件选择对话框中选择SerialPort.h 和SerialPort.cpp ,点击OK,就把类文件加入当前工程,并在SCOMMDlg.h 中加入头文件,#include "SerialPort.h",通过上述步骤就在当前工程中加入了CSeraiPort类。 4、完成串口消息处理函数OnCommunicatiom 在CserailPort 类中有多个串口事件可以响应。在一般串口编程中,只需要处理WM_COMM_RXCHAR消息就可以了,该类所有的消息均需要人工添加消息处理函数。我们将处理函数名定义为OnComm()。首先在SCOMMDlg.h 中添加串口字符接收消息WM_COMM_RXCHAR(串口接收缓冲区内有一个字符)响应函数的声明:如下图 然后,在SCOMMDlg.cpp文件中进行WM_COMM_RXCHAR消息映射: 如下图; 接着,在SCOMMDlg.cpp 文件中加入函数OnCommunication(WPARAM ch, LPARAM port)的实现,暂不添加代码。 LONG CSCOMMDlg::OnCommunication(WPARAM ch, LPARAM port) { return 0; } 以上步骤需要手工完成。 至此完成了程序的对话框模板,在工程中插入了串口操作类CserailPort类。5、添加串口初始化及关闭 程序中有两种方法大开串口,一是程序启动,调用OnInitDialog()函数,就可以打开串口,缺省的串口号为COM1,如果COM1不存在或占用,就会给出提示;另外,单击“打开串口”按钮也可以打开串口。 //在初始化中打开串口 BOOL CSCOMMDlg::OnInitDialog() { m_nBaud=9600;//波特率 m_nCom=1;//串口号 m_cParity='N';//奇偶校验

相关主题
相关文档 最新文档