📄 moduleserialoperate.bas
字号:
Attribute VB_Name = "ModuleSerialOperate"
Option Explicit
Public Declare Function OpenFile Lib "kernel32" (ByVal lpFileName As String, lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long
Public Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As OVERLAPPED) As Long
Public Function OpenComm(pPort As String, nBaudRate As Integer, nParity As Integer, nByteSize As Integer, nStopBits As Integer) As Boolean
' DCB dcb; '串口控制块
' COMMTIMEOUTS timeouts = { '串口超时控制参数
' 100, '读字符间隔超时时间: 100 ms
' 1, '读操作时每字符的时间: 1 ms (n个字符总共为n ms)
' 500, '基本的(额外的)读超时时间: 500 ms
' 1, '写操作时每字符的时间: 1 ms (n个字符总共为n ms)
' 100}; '基本的(额外的)写超时时间: 100 ms
'
' hComm = CreateFile(pPort, '串口名称或设备路径
' GENERIC_READ | GENERIC_WRITE, '读写方式
' 0, '共享方式:独占
' NULL, '默认的安全描述符
' OPEN_EXISTING, '创建方式
' 0, '不需设置文件属性
' NULL); '不需参照模板文件
If CreateFile(pPort, GENERIC_READ, GENERIC_WRITE, 0, Null, OPEN_EXISTING, 0, Null) <> 0 Then
Exit Sub
'
if(hComm == INVALID_HANDLE_VALUE) return FALSE; '打开串口失败
GetCommState(hComm, &dcb); '取DCB
dcb.BaudRate = nBaudRate;
dcb.ByteSize = nByteSize;
dcb.Parity = nParity;
dcb.StopBits = nStopBits;
SetCommState(hComm, &dcb); '设置DCB
SetupComm(hComm, 4096, 1024); '设置输入输出缓冲区大小
SetCommTimeouts(hComm, &timeouts); '设置超时
return TRUE;
}
End Function
'关闭串口
BOOL CloseComm()
{
return CloseHandle(hComm);
}
'写串口
'pData: 待写的数据缓冲区指针
'nLength: 待写的数据长度
void WriteComm(void* pData, int nLength)
{
DWORD dwNumWrite; '串口发出的数据长度
WriteFile(hComm, pData, (DWORD)nLength, &dwNumWrite, NULL);
}
'读串口
'pData: 待读的数据缓冲区指针
'nLength: 待读的最大数据长度
'返回: 实际读入的数据长度
int ReadComm(void* pData, int nLength)
{
DWORD dwNumRead; '串口收到的数据长度
ReadFile(hComm, pData, (DWORD)nLength, &dwNumRead, NULL);
return (int)dwNumRead;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -