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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(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)发送数据函数,先判断是否正在发送数据,如不在发送则设置当前正在发送状态,后继续判断是写序列号模式还是串口调试模式,串口调试模式时先定义发送缓冲区和

数组,再判断是否为16进制发送后进行对应进制转码,再尝试发送并刷新发送字节数。发送序列号模式同理。

(590-623h)接收数据函数。

(625-656h)将接收到的数据加显到窗口里。

(710-714h)主线程外激活线程方法。

(715-742h)成功关闭串口或串口丢失后设置。

(745-772h)刷新可用串口。

(775-790h)清空发送区回调,清空接收区回调,计数清零回调。

(792-809h)暂停与开始接收数据回调。

(813-825h)自动发送控件回调。

(827-842h)发送周期设置。

(1009-1045h)发送序列号按钮回调,先将窗口中的序列号转换为ASCLL码,再判断串口是否打开,序列号是否为19位,再调用添加CRC校验码,最后调用发送数据函数。

(2016-11-22)新增写入19位序列号功能

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

//*********发送序列号**********//

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

private void Write_NUM(object sender, RoutedEventArgs e)

{

byte[] writeBuffer = null;

SendSet.writeSN = writeNUM.Text;//发送数据线程传递参数的结构体--发送的数据

string writedate = SendSet.writeSN;//复制发送数据,以免发送过程中数据被手动改变

writeBuffer = System.Text.Encoding.ASCII.GetBytes(writedate);//转码

if (ComPortIsOpen == true)//串口是否打开

{

if (writeBuffer.Length == 19)//序列号是否为19位

{

writeBuffer1 = CRC16(writeBuffer, writeBuffer.Length);//CRC校验

writemodo = true;//改当前为写序列号模式

Send();//调用发送方法

}

else

{

MessageBox.Show("请输入19位序列号!!!");

}

}

else

{

MessageBox.Show("请打开串口!!!");

}

(2016-11-23)新增CRC校验函数

/* CRC校验函数*/

public byte[] CRC16(byte[] pucFrame, int arrayLength)//入参数据组,数据长度

{

byte ucCRCHi = 0xFF;

byte ucCRCLo = 0xFF;

byte iIndex;

byte i = 0;

while (arrayLength-- > 0)

{

iIndex = (System.Byte)(ucCRCLo ^ pucFrame[i++]);

ucCRCLo = (System.Byte)(ucCRCHi ^ aucCRCHi[iIndex]);

ucCRCHi = aucCRCLo[iIndex];

}

byte[] Returndata = { 0x55, 0xaa, pucFrame[0], pucFrame[1], pucFrame[2], pucFrame[3], pucFrame[4], pucFrame[5], pucFrame[6], pucFrame[7], pucFrame[8], pucFrame[9], pucFrame[10], pucFrame[11], pucFrame[12], pucFrame[13], pucFrame[14], pucFrame[14], pucFrame[16], pucFrame[17], pucFrame[18], ucCRCLo, ucCRCHi };//整合头码,数据,CRC

return Returndata;//返回最终发送代码

}

static byte[] aucCRCHi = {

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,

0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,

0x00, 0xC1, 0x81, 0x40

};

static byte[] aucCRCLo = {

0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7,

0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E,

相关文档
最新文档