⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 moduleserialoperate.bas

📁 通信专业的电路测试应用程序。 在通信的大批量电路拨打测试中使用。可以极大提高效率。
💻 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 + -