分享若干年前做的一个串口操作软件源码,从远软件中提取出来这个串口操作的基本模块。
该软件基于PCOMM.DLL进行封装。
本来还有个线程的读写,但是现在懒得修改这部分,所以就没有把线程部分放进去(因为还需要改动一下),所以使用的同学请自行进行上层的封装吧。
这个模块只是实现了对串口的读写操作,数据以字节数组的形式进行传递和返回。
窗口程序集名 | 保 留 | 保 留 | 备 注 | CommUtil, , 公开, 基于PCComm DLL的串口操作类 | | | | 变量名 | 类 型 | 数组 | 备 注 | port | 整数型 | | baud | 整数型 | | parity | 文本型 | | databit | 整数型 | | stopbit | 整数型 | | pccomm_baud | 整数型 | | pccomm_mod | 整数型 | | sio_close (port )|
初始化 | 整数型 | | |
port1 | 整数型 | | | | baud1 | 整数型 | | | | parity1 | 文本型 | | | | databit1 | 整数型 | | | | stopbit1 | 整数型 | | | |
port = port1 baud = baud1 parity = parity1 databit = databit1 stopbit = stopbit1 判断 (baud = 9600 ) pccomm_baud = 12 判断 (baud = 2400 ) pccomm_baud = 9 判断 (baud = 4800 ) pccomm_baud = 10 判断 (baud = 7200 ) pccomm_baud = 11 判断 (baud = 19200 ) pccomm_baud = 13 判断 (baud = 38400 ) pccomm_baud = 14  pccomm_baud = 12  pccomm_mod = 计算pccommmod值 (databit, stopbit, parity )返回 (sio_ioctl (port, pccomm_baud, pccomm_mod )) |
应用新串口参数 | 整数型 | | |
pccomm_baud1 | 整数型 | | | | pccomm_mod1 | 整数型 | | | | 返回 (sio_ioctl (port, pccomm_baud1, pccomm_mod1 )) |
计算pccommmod值 | 整数型 | | |
pdatabit | 整数型 | | | | pstopbit | 整数型 | | | | pparity | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | databittmp | 整数型 | | | stopbittmp | 整数型 | | | paritytmp | 整数型 | | |
判断 (pdatabit = 5 ) databittmp = 0 判断 (pdatabit = 6 ) databittmp = 1 判断 (pdatabit = 7 ) databittmp = 2 判断 (pdatabit = 8 ) databittmp = 3  databittmp = 3  判断 (pstopbit = 1 ) stopbittmp = 0 判断 (pstopbit = 2 ) stopbittmp = 4  stopbittmp = 0  判断 (pparity = “n”) paritytmp = 0 判断 (pparity = “e”) paritytmp = 24 判断 (pparity = “o”) paritytmp = 8 判断 (pparity = “m”) paritytmp = 40 判断 (pparity = “s”) paritytmp = 56  paritytmp = 0 返回 (位或 (paritytmp, databittmp, stopbittmp))返回 (sio_open (port )) 返回 (sio_close (port )) |
写串口 | 整数型 | | |
buf | 字节型 | | | | rtnlen | 整数型 | | | | timeout | 整数型 | | | | recvbuf | 字节型 | | | | whenrecv | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | loopcnt | 整数型 | | | inbuflen | 整数型 | | | rtn | 整数型 | | | sio_open (port ) 应用新串口参数 (pccomm_baud, pccomm_mod )sio_putb_x_ex (port, buf, 取数组下标 (buf, ), 0 )rtn = 1 loopcnt = 1 如果真 (rtnlen > 0 ) 重定义数组 (recvbuf, 假, rtnlen ) 判断循环首 (loopcnt > 0 ) 延时 (1 )  inbuflen = sio_iqueue (port )  如果真 (inbuflen > 0 )   whenrecv = 取毫秒级时间文本 ()  如果真 (inbuflen ≥ rtnlen )    sio_read (port, recvbuf, rtnlen )   rtn = 1   跳出循环 ()     loopcnt = loopcnt + 1   如果真 (loopcnt × 1 > timeout )    rtn = 2   跳出循环 ()    判断循环尾 () 返回 (rtn )buflen = sio_iqueue (port ) 如果 (buflen > 0 ) 重定义数组 (recvbuf, 假, buflen ) sio_read (port, recvbuf, buflen ) 返回 (buflen ) 返回 (0 ) GetLocalTime (时间b )返回 (到文本 (时间b.年 ) + “-” + 取文本右边 (“0” + 到文本 (时间b.月 ), 2 ) + “-” + 取文本右边 (“0” + 到文本 (时间b.日 ), 2 ) + “ ” + 取文本右边 (“0” + 到文本 (时间b.小时 ), 2 ) + “:” + 取文本右边 (“0” + 到文本 (时间b.分 ), 2 ) + “:” + 取文本右边 (“0” + 到文本 (时间b.秒 ), 2 ) + “:” + 取文本右边 (“00” + 到文本 (时间b.毫秒 ), 3 ))
源码下载地址:
串口操作模块.7z
(41.7 KB, 下载次数: 23)
|