串口调试助手设计思路与手册
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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,