sat23 1eef53e682 新增指令; 3 年之前
..
Command.cpp 748ad5f41f 修正打印结果的描述。 3 年之前
Command.h 4a274eb23e 变更函数名称,统一使用C++命令方式。 3 年之前
CommandParam.h da71d130e6 加强注释,方便阅读。 4 年之前
ReadMe.txt 47579854ac ReadMe中,添加串口超时结构体的详细使用方法. 3 年之前
Serial.cpp e72e120118 封装成库。 4 年之前
Serial.h e72e120118 封装成库。 4 年之前
TCLCommand.cpp 83fa1ef2a1 导出类和导出接口,不能使用std标准库里的类型,因为会分配内存。 4 年之前
TCLCommand.h a83079f7f5 导出类完善。 4 年之前
TCLCommand.rc e72e120118 封装成库。 4 年之前
TCLCommand.vcproj 677abf8c95 补充:生成事件添加复制command.data文件。 4 年之前
command.data 1eef53e682 新增指令; 3 年之前
resource.h e72e120118 封装成库。 4 年之前
stdafx.cpp e72e120118 封装成库。 4 年之前
stdafx.h e72e120118 封装成库。 4 年之前
targetver.h e72e120118 封装成库。 4 年之前
utils.cpp b4ec8ba913 不使用堆,使用栈。 3 年之前
utils.h e72e120118 封装成库。 4 年之前

ReadMe.txt

========================================================================
动态链接库:TCLCommand 项目概述
========================================================================

应用程序向导已为您创建了此 TCLCommand DLL。

本文件概要介绍组成 TCLCommand 应用程序的
的每个文件的内容。


TCLCommand.vcproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件,
其中包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。

TCLCommand.cpp
这是主 DLL 源文件。

此 DLL 在创建时不导出任何符号。因此,在生成此 DLL 时
将不会产生 .lib 文件。如果希望此项目
成为其他某个项目的项目依赖项,则需要
添加代码以从 DLL 导出某些符号,
以便产生一个导出库,或者,也可以在项目“属性页”对话框中的
“链接器”文件夹中,将“常规”属性页上的
“忽略输入库”属性设置为“是”。

/////////////////////////////////////////////////////////////////////////////
应用程序向导创建了下列资源:

TCLCommand.rc
这是程序使用的所有 Microsoft Windows 资源的列表。它包括 RES 子目录中存储的图标、位图和光标。
此文件可以直接在 Microsoft Visual C++ 中进行编辑。

Resource.h
这是标准头文件,可用于定义新的资源 ID。
Microsoft Visual C++ 将读取并更新此文件。

/////////////////////////////////////////////////////////////////////////////
其他标准文件:

StdAfx.h, StdAfx.cpp
这些文件用于生成名为 TCLCommand.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。

/////////////////////////////////////////////////////////////////////////////
其他注释:

应用程序向导使用“TODO:”注释来指示应添加或自定义的源代码部分。


/////////////////////////////////////////////////////////////////////////////
读写超时是在 调用 ReadFile 和 WriteFile 函数读写串口的时候系统提供的超时机制

typedef struct _COMMTIMEOUTS {
DWORD ReadIntervalTimeout; /* Maximum time between read chars. */
DWORD ReadTotalTimeoutMultiplier; /* Multiplier of characters. */
DWORD ReadTotalTimeoutConstant; /* Constant in milliseconds. */
DWORD WriteTotalTimeoutMultiplier; /* Multiplier of characters. */
DWORD WriteTotalTimeoutConstant; /* Constant in milliseconds. */
} COMMTIMEOUTS,*LPCOMMTIMEOUTS;

读超时 有两只计算方法
1:(间隔超时)ReadIntervalTimeout 指定了在接收字符间的最大时间,如果超过了这个时间,ReadFile立即返回。
2:(总超时)基于要接收的字符数量
ReadTotalTimeoutMultiplier表示平均读一个字节的时间上限
ReadTotalTimeoutConstant表示读数据总时间常量
读数据总超时:ReadTotalTimeoutConstant +(ReadTotalTimeoutMultiplier*要读的字节数)
读数据超时,两种超时同时有效,当出现任何一种超时时,ReadFile都将返回。

写超时:
WriteTotalTimeoutMultiplier表示平均写一个字节的时间上限
WriteTotalTimeoutConstant表示写数据总超时常量

写数据总超时 :WriteTotalTimeoutConstatn +(WriteTotalTimeoutMultiplier *要写的字节数)

具体超时设置
1:有读间隔超时、读总超时、写总超时,将COMMTIMEOUTS结构5个成员设置为对应值。
2:没有读间隔超时,有读总超时和写总超时,将RealIntervalTimeou设置为0,其他参数设置为对应值。
3:不管是否有数据要读取,ReadFile立即返回,将RealIntervalTimeout设置为MAX_DWORD,
将ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant都设置为0
(不立即返回的时候,可以在超时时间内等串口中有新的数据?然后读取,直到超时时间)
4:ReadFile没有超时设置,直到有适当的字符数返回或者错误发生,函数才返回。
将 ReadIntervalTimeout、ReadTotalTimeoutMultiplier、ReadTotalTimeoutConstant都设置为0
5:WriteFile没有超时设置:将WriteTotalTimeoutMultiplier和WriteTotalTimeoutConstant设置为0


/////////////////////////////////////////////////////////////////////////////
Command.data文件格式说明,键值对形式存在[key=value]:
Key说明:
name 表示命令名称;
option 表示命令类型
1、Get 表示指令用于查询,不用传入外部数据,需要返回查询结果。
2、Set 表示指令用于设置,需要传入外部数据,需要返回设置结果。
3、None 表示指令不是查询指令,不用传入外部数据,无查询结果返回;也不是设置指令,不用传入外部数据,无设置结果返回。

更确切的说,Get不用传数据,Set要传入数据;
Get和Set都要返回除“AB 05 0A DF 4E”外的第二段串口数据(失败除外),而None只返回一段“AB 05 0A DF 4E”的数据。

head 表示命令的协议头,以十六进制字符表示,多个字节以空格隔开;
cmd 表示命令的具体指令,以十六进制字符表示,只有有且一个字节;
param 表示命令的具体指令所附加参数,以十六进制字符表示,多个字节以空格隔开;
returnParam 与param关联使用,表示指令返回结果时,是否会将param一起返回。
readWaitTime 表示指令在串口Write之后,多久才开始串口Read指令结果
cmdWaitTime 表示当前指令完成串口Read后,等待多久进行下一条指令操作。
/////////////////////////////////////////////////////////////////////////////