如何下载和使用MOXA的PComm Lite串口编程动态库

news/2025/2/12 20:51:24/

文章目录

  • 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来个:

  1. 打开、关闭、设波特率的:sio_open()sio_close()sio_baut()
  2. 发送数据的:sio_putch()sio_write()
  3. 接收数据的:sio_getch()sio_read()
  4. 查询输入输出缓冲区状态的:sio_iqueue(), sio_oqueue()
  5. 有时可能要设读写超时: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/

  1. 搜索PComm Lite,点击如下链接:
    在这里插入图片描述

  2. 点击NPort 5100 Services,如下图所示:
    在这里插入图片描述

  3. 点击工具,下载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


http://www.ppmy.cn/news/592077.html

相关文章

linux moxa 多串口卡_在FC6 Linux下安装Moxa多串口卡的问题

在FC6 Linux操作系统安装Moxa多串口卡(型号&#xff1a;cp-104UL v2)时碰到以下问题&#xff0c;希望获得解决思路: 按照厂商所提供的以下安装方法进行安装&#xff0c;当执行到步骤2的make clean; make install时&#xff0c;系统提示以下错误&#xff0c;无法安装成功&#x…

Linux测试moxa串口,Moxa NPort 简易安装测试向导—Secure Terminal

Moxa NPort简易安装测试向导—Secure Terminal 制作时间&#xff1a;2007年11月6日 适用产品(NPort5000/ 6000 Series) 适用模式(Terminal) 适用操作系统() 第一部分&#xff1a;安装 1、将NPort连接到局域网&#xff0c;并打开电源&#xff1b; 2、从光盘上安装NPort管理工具—…

linux moxa 多串口卡_MOXA - PCI Express多串口卡解决方案

Moxa提供工业级小尺寸的多串口卡/板卡&#xff0c;提供PCI Express(PCIe)和COM口的通讯&#xff0c;特别适用于POS/ATM/Kiosk、交通和其他各类工业应用。超快的串口波特率可确保高性能串口数据传输。为了避免因用户手动配置DIP开关和跳线器时必须将计算机打开而带来的不便&…

OAuth2.0与单点登录的区别

本文说下OAuth2.0与单点登录的区别 文章目录 概述什么是单点登录单点登录和Oauth2.0的区别单点登录的实现本文小结 概述 SSO是Single Sign On的缩写&#xff0c;OAuth是Open Authority的缩写&#xff0c;这两者都是使用令牌的方式来代替用户密码访问应用。流程上来说他们非常相…

解锁新技能《AnnotationConfigApplicationContext@7a8414ea has been closed already》

最近工作过程中遇到了标题中的错误&#xff0c;导致整个项目都不可以访问&#xff1b;原因是我修改了consul的配置&#xff0c;修改过后由于consul监控配置开关是打开着的&#xff0c;所以监控到配置做了修改后会重新创建ApplicationContext对象&#xff0c;并且会将之前的Appl…

AIDA模型:什么是营销中的 AIDA 模型?

AIDA模型&#xff0c;也常被称为营销漏斗主要涉及&#xff1a;注意、兴趣、欲望和行动模型&#xff0c;是一个广告效果模型&#xff0c;它确定了个人在购买产品或服务的过程中所经历的阶段。AIDA模型常用于数字营销、销售策略和公共关系活动中。 AIDA 模型层次结构分解 AIDA模型…

python实现邮件发送功能

用最简单的方法实现邮件发送功能&#xff0c;拒绝重复造轮子&#xff0c;提供工作效率。 目录 1、安装依赖 2、发送文本邮件 3、发送多人邮件 4、发送附件邮件 1、安装依赖 pip install yagmail 2、发送文本邮件 import yagmail# 初始化 config yagmail.SMTP(user1740837…

利用AIDA64对电脑进行简单的稳定性测试的技巧分享

下载AIDA64到电脑并安装好&#xff0c;AIDA64可以检测电脑中的软硬件信息&#xff0c;底层的硬件扫描&#xff0c;使它可以详细的显示出PC硬件每一个方面的信息&#xff0c;AIDA64提供的稳定性测试十分强大&#xff0c;也是款不错的 内存检测工具&#xff0c;能够让CPU、RAM等硬…