文章目录
- 1.MOXA的PComm Lite
- 2.下载PComm Lite
- 3.安装 setup_pcommlite_1.6_12041917.exe
- 4.使用C#封装PCommHelper类
- 5.PComm安装包下载地址
1.MOXA的PComm Lite
Moxa
是经营工业串口卡、串口服务器之类设备的公司,PComm Lite
是一套易用性、可靠性久经考验串口编程开发包。
相比用API或mscomm控件开发,使用PComm Lite则简单太多了。
使用方法:运行安装后有类库、例程、帮助和几个小工具。关键的有四个文件:pcomm.h/pcomm.lib两个文件复制到项目目录并引用,pcomm.dll丢到windows\system32下或跟应用程序放在一起,
pcomm.chm
帮助备查。
函数介绍:整个库包含50多个函数,最常用的也就10来个:
- 打开、关闭、设波特率的:
sio_open()
、sio_close()
、sio_baut()
- 发送数据的:
sio_putch()
,sio_write()
- 接收数据的:
sio_getch()
,sio_read()
- 查询输入输出缓冲区状态的:
sio_iqueue()
,sio_oqueue()
- 有时可能要设读写超时:
sio_SetReadTimeouts()
,sio_SetWriteTimeouts()
这些函数见名知义,用法查一下PComm.chm就行了。
编程方法:
接收数据一般免不了要开线程的,在接收线程里sio_iqueue()
看一下有没有数据,有就处理,没就Sleep()
一会。接收数据时它至少会帮你缓冲几十k,一般也不会丢数据。也可以用sio_term_irq()
指定接收一定长数据数据就调用一个CALLBACK
函数。
这些基本就齐活了。需要控制DTS/RTS
、自动流控制都有,甚至还有Xmoderm/Ymoderm/Zmoderm
发送文件。如果要Modbus
之类的协议就要自己写了。
与其它串口开发方式比较:简单地说API
是基础零件,自己做起来麻烦。MSComm
控件、CSerialPort
类是实验室产品,Pcomm lite
是工业成熟产品。
2.下载PComm Lite
MOXA的官方网址:https://www.moxa.com/en/
-
搜索PComm Lite,点击如下链接:
-
点击
NPort 5100 Services
,如下图所示:
-
点击工具,下载PComm Lite安装包,如下:
3.安装 setup_pcommlite_1.6_12041917.exe
安装 setup_pcommlite_1.6_12041917.exe
,默认安装在目录C:\Program Files\Moxa\PCommLite 1.6
下,如下:
安装目录下有帮助文档和示例,有x86和x64的dll动态库文件等。
4.使用C#封装PCommHelper类
为了方便使用,封装的代码如下:
public class PCommHelper
{/// <summary>/// 打开串口/// </summary>/// <param name="port">串口号</param>/// <returns>详见PComm.chm</returns>[DllImport("PComm.dll")]public static extern int sio_open(int port);/// <summary>/// 配置串口通讯参数/// </summary>/// <param name="port">串口号</param>/// <param name="baud">波特率,详见PComm.chm</param>/// <param name="mode">模式,如:数据位、停止位和校验位。详见PComm.chm</param>/// <returns>详见PComm.chm</returns>[DllImport("PComm.dll")]public static extern int sio_ioctl(int port, int baud, int mode);/// <summary>/// 获取在输入缓冲区中积累的数据的长度/// </summary>/// <param name="port">串口号</param>/// <returns>详见PComm.chm</returns>[DllImport("PComm.dll")]public static extern int sio_iqueue(int port);/// <summary>/// 设置数据终端准备好 DTR(Data Terminal Ready)/// </summary>/// <param name="port">串口</param>/// <param name="mode">模式 0-DTR关闭 1-DTR启用</param>/// <returns>详见PComm.chm</returns>[DllImport("PComm.dll")]public static extern int sio_DTR(int port, int mode);/// <summary>/// 设置请求发送 RTS(Request To Send)/// </summary>/// <param name="port">串口</param>/// <param name="mode">模式 0-RTS关闭 1-RTS启用</param>/// <returns>详见PComm.chm</returns>[DllImport("PComm.dll")]public static extern int sio_RTS(int port, int mode);/// <summary>/// 刷新驱动程序的输入/输出缓冲区中的任何数据/// </summary>/// <param name="port">串口号</param>/// <param name="func">模式 0-刷新输入缓冲区 1-刷新输出缓冲区 2-刷新输入和输出缓冲区</param>/// <returns>详见PComm.chm</returns>[DllImport("PComm.dll")]public static extern int sio_flush(int port, int func);/// <summary>/// 关闭串口/// </summary>/// <param name="port">串口号</param>/// <returns>详见PComm.chm</returns>[DllImport("PComm.dll")]public static extern int sio_close(int port);/// <summary>/// 读取驱动程序的输入缓冲区数据/// </summary>/// <param name="port">串口号</param>/// <param name="buf">接收缓冲区指针</param>/// <param name="length">每次要读取的数据的长度</param>/// <returns>详见PComm.chm</returns>[DllImport("PComm.dll")]public static extern int sio_read(int port, ref byte buf, int length);/// <summary>/// 将一个数据块放到驱动程序的输出缓冲区中/// </summary>/// <param name="port">串口号</param>/// <param name="buf">传输缓冲区指针</param>/// <param name="length">传输缓冲区长度 </param>/// <returns>详见PComm.chm</returns>[DllImport("PComm.dll")]public static extern int sio_write(int port, ref byte buf, int length);/// <summary>/// 将一个字符写入驱动程序的输出缓冲区/// </summary>/// <param name="port">串口号</param>/// <param name="term">字符(0 - 255)</param>/// <returns>详见PComm.chm</returns>[DllImport("PComm.dll")]public static extern int sio_putch(int port, int term);/// <summary>/// 从驱动程序的输入缓冲区中读取一个字符/// </summary>/// <param name="port">串口号</param>/// <returns>详见PComm.chm</returns>[DllImport("PComm.dll")]public static extern int sio_getch(int port);/// <summary>/// 波特率 50Bd/// </summary>public const int B50 = 0;/// <summary>/// 波特率 75Bd/// </summary>public const int B75 = 1;/// <summary>/// 波特率 110Bd/// </summary>public const int B110 = 2;/// <summary>/// 波特率 134Bd/// </summary>public const int B134 = 3;/// <summary>/// 波特率 150Bd/// </summary>public const int B150 = 4;/// <summary>/// 波特率 300Bd/// </summary>public const int B300 = 5;/// <summary>/// 波特率 600Bd/// </summary>public const int B600 = 6;/// <summary>/// 波特率 1200Bd/// </summary>public const int B1200 = 7;/// <summary>/// 波特率 1800Bd/// </summary>public const int B1800 = 8;/// <summary>/// 波特率 240Bd/// </summary>public const int B2400 = 9;/// <summary>/// 波特率 4800Bd/// </summary>public const int B4800 = 10;/// <summary>/// 波特率 7200Bd/// </summary>public const int B7200 = 11;/// <summary>/// 波特率 9600Bd/// </summary>public const int B9600 = 12;/// <summary>/// 波特率 19200Bd/// </summary>public const int B19200 = 13;/// <summary>/// 波特率 38400Bd/// </summary>public const int B38400 = 14;/// <summary>/// 波特率 57600Bd/// </summary>public const int B57600 = 15;/// <summary>/// 波特率 115200Bd/// </summary>public const int B115200 = 16;/// <summary>/// 波特率 230400Bd/// </summary>public const int B230400 = 17;/// <summary>/// 波特率 460800Bd/// </summary>public const int B460800 = 18;/// <summary>/// 波特率 921600Bd/// </summary>public const int B921600 = 19;/// <summary>/// 数据位 BIT_5/// </summary>public const int BIT_5 = 0;/// <summary>/// 数据位 BIT_6/// </summary>public const int BIT_6 = 1;/// <summary>/// 数据位 BIT_7/// </summary>public const int BIT_7 = 2;/// <summary>/// 数据位 BIT_8/// </summary>public const int BIT_8 = 3;/// <summary>/// 停止位 STOP_1/// </summary>public const int STOP_1 = 0;/// <summary>/// 停止位 STOP_2/// </summary>public const int STOP_2 = 4;/// <summary>/// 校验位 无校验 P_NONE/// </summary>public const int P_NONE = 0;/// <summary>/// 校验位 偶校验 P_EVEN/// </summary>public const int P_EVEN = 24; // 0x18/// <summary>/// 校验位 奇校验 P_ODD/// </summary>public const int P_ODD = 8;/// <summary>/// 校验位 标记位 P_MRK/// </summary>public const int P_MRK = 40; // 0x28/// <summary>/// 校验位 空白位 P_SPC/// </summary>public const int P_SPC = 56; // 0x38/// <summary>/// 返回值 成功/// </summary>public const int SIO_OK = 0;/// <summary>/// 返回值 失败 串口号无效/// </summary>public const int SIO_BADPORT = -1;/// <summary>/// 返回值 失败 该板卡不是与MOXA兼容的智能板卡/// </summary>public const int SIO_OUTCONTROL = -2;/// <summary>/// 返回值 失败 没有要读取的数据/// </summary>public const int SIO_NODATA = -4;/// <summary>/// 返回值 失败 没有该端口或该端口被其他程序占用/// </summary>public const int SIO_OPENFAIL = -5;/// <summary>/// 返回值 失败 无法控制该端口,因为它被sio_flowctrl设置为自动H/W流量控制/// </summary>public const int SIO_RTS_BY_HW = -6;/// <summary>/// 返回值 失败 参数错误/// </summary>public const int SIO_BADPARM = -7;/// <summary>/// 返回值 失败 调用Win32函数失败,可尝试调用GetLastError获取错误码/// </summary>public const int SIO_WIN32FAIL = -8;/// <summary>/// 返回值 失败 该端口不支持该函数/// </summary>public const int SIO_BOARDNOTSUPPORT = -9;/// <summary>/// 返回值 失败 用户中止阻塞的写入/// </summary>public const int SIO_ABORT_WRITE = -11;/// <summary>/// 返回值 失败 写入超时/// </summary>public const int SIO_WRITETIMEOUT = -12;
}
5.PComm安装包下载地址
csdn资源下载,5积分,没积分的私聊,有积分的支持一下,谢谢!https://download.csdn.net/download/CGS_______/21009569