分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
VB的MSCOMM控件虽然很好用,但是在没有装VB的机器上用该控件总觉得有些累赘,网上的VB API代码大部分都基于是同步方式,处理复杂的通信模式不是太理想,所以用了一些时间,把VC项目中的异步串口读写代码翻译为VB格式。
在VB新建一个类,把下面的代码复制后即可使用
' **模 块 名:SerialPort
' **说 明:YFsoft 版权所有2006 - 2007(C)
' **创 建 人:叶帆
' **日 期:2006-08-17 14:32:29
' **修 改 人:
' **日 期:
' **描 述:串口异步读写(API)
' **版 本:V1.0.0
' *************************************************************************
Option Explicit
Private Type ComStat
fCtsHold As Long
fDsrHold As Long
fRlsdHold As Long
fXoffHold As Long
fXoffSent As Long
fEof As Long
fTxim As Long
fReserved As Long
cbInQue As Long
cbOutQue As Long
End Type
Private Type COMMTIMEOUTS
ReadIntervalTimeout As Long
ReadTotalTimeoutMultiplier As Long
ReadTotalTimeoutConstant As Long
WriteTotalTimeoutMultiplier As Long
WriteTotalTimeoutConstant As Long
End Type
Private Type DCB
DCBlength As Long
BaudRate As Long
' DWORD DCBlength; /* sizeof(DCB) */
' DWORD BaudRate; /* Baudrate at which running */
' DWORD fBinary: 1; /* Binary Mode (skip EOF check) */
' DWORD fParity: 1; /* Enable parity checking */
' DWORD fOutxCtsFlow:1; /* CTS handshaking on output */
' DWORD fOutxDsrFlow:1; /* DSR handshaking on output */
' DWORD fDtrControl:2; /* DTR Flow control */
' DWORD fDsrSensitivity:1; /* DSR Sensitivity */
' DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */
' DWORD fOutX: 1; /* Enable output X-ON/X-OFF */
' DWORD fInX: 1; /* Enable input X-ON/X-OFF */
' DWORD fErrorChar: 1; /* Enable Err Replacement */
' DWORD fNull: 1; /* Enable Null stripping */
' DWORD fRtsControl:2; /* Rts Flow control */
' DWORD fAbortOnError:1; /* Abort all reads and writes on Error */
' DWORD fDummy2:17; /* Reserved */
fBitFields As Long ' See Comments in Win32API.Txt
wReserved As Integer
XonLim As Integer
XoffLim As Integer
ByteSize As Byte
Parity As Byte
StopBits As Byte
XonChar As Byte
XoffChar As Byte
ErrorChar As Byte
EofChar As Byte
EvtChar As Byte
wReserved1 As Integer ' Reserved; Do Not Use
End Type
Private Type OVERLAPPED
Internal As Long
InternalHigh As Long
offset As Long
OffsetHigh As Long
hEvent As Long
End Type
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Private Declare Function CloseHandle Lib " kernel32 " ( ByVal hObject As Long ) As Long
Private Declare Function GetLastError Lib " kernel32 " () As Long
Private Declare Function ReadFile Lib " kernel32 " ( ByVal hFile As Long , lpBuffer As Any, ByVal nNumberOfBytesToRead As Long , lpNumberOfBytesRead As Long , lpOverlapped As OVERLAPPED) As Long
Private Declare Function WriteFile Lib " kernel32 " ( ByVal hFile As Long , lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long , lpNumberOfBytesWritten As Long , lpOverlapped As OVERLAPPED) As Long ' OVERLAPPED
Private Declare Function SetCommTimeouts Lib " kernel32 " ( ByVal hFile As Long , lpCommTimeouts As COMMTIMEOUTS) As Long
Private Declare Function GetCommTimeouts Lib " kernel32 " ( ByVal hFile As Long , lpCommTimeouts As COMMTIMEOUTS) As Long
Private Declare Function BuildCommDCB Lib " kernel32 " Alias " BuildCommDCBA " ( ByVal lpDef As String , lpDCB As DCB) As Long
Private Declare Function SetCommState Lib " kernel32 " ( ByVal hCommDev As Long , lpDCB As DCB) As Long
Private Declare Function GetCommState Lib " kernel32 " ( ByVal nCid As Long , lpDCB As DCB) As Long
Private Declare Function CreateFile Lib " kernel32 " Alias " CreateFileA " ( ByVal lpFileName As String , ByVal dwDesiredAccess As Long , ByVal dwShareMode As Long , ByVal lpSecurityAttributes As Long , ByVal dwCreationDisposition As Long , ByVal dwFlagsAndAttributes As Long , ByVal hTemplateFile As Long ) As Long
Private Declare Function FlushFileBuffers Lib " kernel32 " ( ByVal hFile As Long ) As Long
Private Declare Function CreateEvent Lib " kernel32 " Alias " CreateEventA " (lpEventAttributes As SECURITY_ATTRIBUTES, ByVal bManualReset As Long , ByVal bInitialState As Long , ByVal lpName As String ) As Long
Private Declare Function SetCommMask Lib " kernel32 " ( ByVal hFile As Long , ByVal dwEvtMask As Long ) As Long
Private Declare Function SetEvent Lib " kernel32 " ( ByVal hEvent As Long ) As Long
Private Declare Function PurgeComm Lib " kernel32 " ( ByVal hFile As Long , ByVal dwFlags As Long ) As Long
Private Declare Function ClearCommError Lib " kernel32 " ( ByVal hFile As Long , lpErrors As Long , lpStat As ComStat) As Long
Private Declare Function GetOverlappedResult Lib " kernel32 " ( ByVal hFile As Long , lpOverlapped As OVERLAPPED, lpNumberOfBytesTransferred As Long , ByVal bWait As Long ) As Long
Private Declare Function WaitForSingleObject Lib " kernel32 " ( ByVal hHandle As Long , ByVal dwMilliseconds As Long ) As Long
Private Declare Function SetupComm Lib " kernel32 " ( ByVal hFile As Long , ByVal dwInQueue As Long , ByVal dwOutQueue As Long ) As Long
Private Const GENERIC_WRITE = & H40000000
Private Const GENERIC_READ = & H80000000
Private Const OPEN_EXISTING = 3
Private Const FILE_ATTRIBUTE_NORMAL = & H80
Private Const FILE_FLAG_OVERLAPPED = & H40000000
Private Const DTR_CONTROL_DISABLE = & H0
Private Const RTS_CONTROL_ENABLE = & H1
Private Const PURGE_RXABORT = & H2
Private Const PURGE_RXCLEAR = & H8
Private Const PURGE_TXABORT = & H1
Private Const PURGE_TXCLEAR = & H4
Private Const ERROR_IO_PENDING = 997
Private Const STATUS_WAIT_0 = & H0
Private Const WAIT_OBJECT_0 = (STATUS_WAIT_0 + 0 )
Private Const WAIT_TIMEOUT = 258 &
Private m_Handle As Long
Private m_OverlappedRead As OVERLAPPED
Private m_OverlappedWrite As OVERLAPPED
' *************************************************************************
' **函 数 名:OpenPort
' **输 入:ComNumber(Long) - 串口号
' ** :Comsettings(String) - 配置信息
' **输 出:(Long) - 0 成功 非 0 失败
' **功能描述:打开串口
' **全局变量:
' **调用模块:
' **作 者:叶帆
' **日 期:2006-08-17 14:40:14
' **修 改 人:
' **日 期:
' **版 本:V1.0.0
' *************************************************************************
Public Function OpenPort(ComNumber As Long , Comsettings As String , Optional lngInSize As Long = 1024 , Optional lngOutSize As Long = 512 ) As Long
On Error GoTo handelinitcom
Dim retval As Long
Dim CtimeOut As COMMTIMEOUTS, dcbs As DCB
Dim strCOM As String , strConfig As String
strCOM = " /.COM " & Format (ComNumber, " 0 " )
m_Handle = CreateFile(strCOM, GENERIC_READ Or GENERIC_WRITE, 0 , 0 & , OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_OVERLAPPED, 0 )
If m_Handle = - 1 Then
OpenPort = - 1
Exit Function
End If
' 设置dcb块
dcbs.DCBlength = Len (dcbs) ' 长度
Call GetCommState(m_Handle, dcbs)
' 波特率,奇偶校验,数据位,停止位 如:9600,n,8,1
strConfig = " COM " & Format (ComNumber, " 0 " ) & " : " & Comsettings
Call BuildCommDCB(strConfig, dcbs)
' ------------------------------
' dcbs.fBinary = 1 '二进制方式
' dcbs.fOutxCtsFlow = 0 '不用CTS检测发送流控制
' dcbs.fOutxDsrFlow = 0 '不用DSR检测发送流控制
' dcbs.fDtrControl = DTR_CONTROL_DISABLE '禁止DTR流量控制
' dcbs.fDsrSensitivity = 0 '对DTR信号线不敏感
' dcbs.fTXContinueOnXoff = 1 '检测接收缓冲区
' dcbs.fOutX = 0 '不做发送字符控制
' dcbs.fInX = 0 '不做接收控制
' dcbs.fErrorChar = 0 '是否用指定字符替换校验错的字符
' dcbs.fNull = 0 '保留NULL字符
' dcbs.fRtsControl = RTS_CONTROL_ENABLE '允许RTS流量控制
' dcbs.fAbortOnError = 0 '发送错误后,继续进行下面的读写操作
' dcbs.fDummy2 = 0 '保留
dcbs.fBitFields = 1 * 2 ^ 0 Or DTR_CONTROL_DISABLE * 2 ^ 4 Or 1 * 2 ^ 7 Or RTS_CONTROL_ENABLE * 2 ^ 12
dcbs.wReserved = 0 ' 没有使用,必须为0
dcbs.XonLim = 0 ' 指定在XOFF字符发送之前接收到缓冲区中可允许的最小字节数
dcbs.XoffLim = 0 ' 指定在XOFF字符发送之前缓冲区中可允许的最小可用字节数
dcbs.XonChar = 0 ' 发送和接收的XON字符
dcbs.XoffChar = 0 ' 发送和接收的XOFF字符
dcbs.ErrorChar = 0 ' 代替接收到奇偶校验错误的字符
dcbs.EofChar = 0 ' 用来表示数据的结束
dcbs.EvtChar = 0 ' 事件字符,接收到此字符时,会产生一个事件
' dcbs.wReserved1 = 0 '没有使用
' dcbs.BaudRate =9600 '波特率
' dcbs.Parity=0 '奇偶校验
' dcbs.ByteSize=8 '数据位
' dcbs.StopBits=0 '停止位
' ------------------------------
If dcbs.Parity = 0 Then ' 0-4=None,Odd,Even,Mark,Space
dcbs.fBitFields = dcbs.fBitFields And & HFFFD ' dcbs.fParity = 0 '奇偶校验无效
Else
dcbs.fBitFields = dcbs.fBitFields Or & H2 ' dcbs.fParity = 1 '奇偶校验有效
End If
' 超时设置
CtimeOut.ReadIntervalTimeout = 20 ' 0
CtimeOut.ReadTotalTimeoutConstant = 1 ' 2500
CtimeOut.ReadTotalTimeoutMultiplier = 1 ' 0
CtimeOut.WriteTotalTimeoutConstant = 10 ' 2500
CtimeOut.WriteTotalTimeoutMultiplier = 1 ' 0
retval = SetCommTimeouts(m_Handle, CtimeOut)
If retval = - 1 Then
retval = GetLastError()
OpenPort = retval
retval = CloseHandle(m_Handle)
Exit Function
End If
' 获取信号句柄
Dim lpEventAttributes1 As SECURITY_ATTRIBUTES
Dim lpEventAttributes2 As SECURITY_ATTRIBUTES
m_OverlappedRead.hEvent = CreateEvent(lpEventAttributes1, 1 , 0 , 0 )
m_OverlappedWrite.hEvent = CreateEvent(lpEventAttributes2, 1 , 0 , 0 )
' 判断设置参数是否成功 设置输入和输出缓冲区是否成功
If SetCommState(m_Handle, dcbs) = - 1 Or SetupComm(m_Handle, lngInSize, lngOutSize) = - 1 Or m_OverlappedRead.hEvent = 0 Or m_OverlappedWrite.hEvent = 0 Then
retval = GetLastError()
OpenPort = retval
If (m_OverlappedRead.hEvent <> 0 ) Then CloseHandle (m_OverlappedRead.hEvent)
If (m_OverlappedWrite.hEvent <> 0 ) Then CloseHandle (m_OverlappedWrite.hEvent)
Call CloseHandle(m_Handle)
m_Handle = 0
Exit Function
End If
OpenPort = 0
Exit Function
handelinitcom:
Call CloseHandle(m_Handle)
m_Handle = 0
OpenPort = - 2
Exit Function
End Function
' *************************************************************************
' **函 数 名:ClosePort
' **输 入:无
' **输 出:(Long) - 0 成功 -1 失败
' **功能描述:关闭串口
' **全局变量:
' **调用模块:
' **作 者:叶帆
' **日 期:2006-08-17 14:56:13
' **修 改 人:
' **日 期:
' **版 本:V1.0.0
' *************************************************************************
Public Function ClosePort() As Long
If (m_Handle = 0 ) Then
ClosePort = 1
Exit Function
End If
Call SetCommMask(m_Handle, 0 )
Call SetEvent(m_OverlappedRead.hEvent)
Call SetEvent(m_OverlappedWrite.hEvent)
If (m_OverlappedRead.hEvent <> 0 ) Then CloseHandle (m_OverlappedRead.hEvent)
If (m_OverlappedWrite.hEvent <> 0 ) Then CloseHandle (m_OverlappedWrite.hEvent)
If CloseHandle(m_Handle) <> 0 Then
ClosePort = 0
Else
ClosePort = - 1
End If
m_Handle = 0
End Function
' *************************************************************************
' **函 数 名:ClearInBuf
' **输 入:无
' **输 出:无
' **功能描述:清空输入缓冲区
' **全局变量:
' **调用模块:
' **作 者:叶帆
' **日 期:2006-08-17 14:57:26
' **修 改 人:
' **日 期:
' **版 本:V1.0.0
' *************************************************************************
Public Function ClearInBuf() As Long
If (m_Handle =
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
创建一个自定义列表
- Markdown
- Text-to- HTML conversion tool
- Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 是通过欧拉积分
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
gantt
dateFormat YYYY-MM-DD
title Adding GANTT diagram functionality to mermaid
section 现有任务
已完成 :done, des1, 2014-01-06,2014-01-08
进行中 :active, des2, 2014-01-09, 3d
计划一 : des3, after des2, 5d
计划二 : des4, after des3, 5d
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎