我想同时开启多个串口serialPort

Fooy_123 2018-01-10 04:28:07
请教一下,怎么同时打开多个串口收发数据??
我是想同一时间 创建多个串口 然后对每个串口发送数据 再处理各个串口的返回数据??
...全文
1229 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
一个武术猴子 2019-08-01
  • 打赏
  • 举报
回复
定义多个SerialPort,侦听各自的事件就行了。
PaulyJiang 2019-07-30
  • 打赏
  • 举报
回复
2楼正解,不同的串口可以调用不同的事件,这个你自己处理就OK了
  • 打赏
  • 举报
回复
引用 4 楼 胖叔叔写代码 的回复:
[quote=引用 2 楼 warcraftmgq 的回复:] 定义多个SerialPort,侦听各自的事件就行了。
这是正解 我不是排斥加推荐,求你加个标志啊,你这推荐跟我发的一样真让人头疼[/quote] 我也觉得头痛,正在写两个读取两个电子秤的值。
  • 打赏
  • 举报
回复
引用 2 楼 warcraftmgq 的回复:
定义多个SerialPort,侦听各自的事件就行了。
这是正解 我不是排斥加推荐,求你加个标志啊,你这推荐跟我发的一样真让人头疼
book_freeboy827 2018-01-11
  • 打赏
  • 举报
回复
侦听各自的事件或者开多几个线程处理
warcraftmgq 2018-01-11
  • 打赏
  • 举报
回复
定义多个SerialPort,侦听各自的事件就行了。
Fooy_123 2018-01-10
  • 打赏
  • 举报
回复
up
呈上头文件部分信息 注释的也很详细的 COPYRIGHT NOTICE Copyright c 2009 华中科技大学tickTick Group (版权声明) All rights reserved @file SerialPort h @brief 串口通信类头文件 本文件完成串口通信类的声明 @version 1 0 @author 卢俊 @E mail:lujun hust@gmail com @date 2010 03 19 修订说明: #ifndef SERIALPORT H #define SERIALPORT H #include <Windows h> 串口通信类 本类实现了对串口的基本操作 例如监听发到指定串口的数据 发送指定数据到串口 class CSerialPort { public: CSerialPort void ; CSerialPort void ; public: 初始化串口函数 @param: UINT portNo 串口编号 默认值为1 即COM1 注意 尽量不要大于9 @param: UINT baud 波特率 默认为9600 @param: char parity 是否进行奇偶校验 "Y"表示需要奇偶校验 "N"表示不需要奇偶校验 @param: UINT databits 数据位的个数 默认值为8个数据位 @param: UINT stopsbits 停止位使用格式 默认值为1 @param: DWORD dwCommEvents 默认为EV RXCHAR 即只要收发任意一个字符 则产生一个事件 @return: bool 初始化是否成功 @note: 在使用其他本类提供的函数前 请先调用本函数进行串口的初始化       n本函数提供了一些常用的串口参数设置 若需要自行设置详细的DCB参数 可使用重载函数 n本串口类析构时会自动关闭串口 无需额外执行关闭串口 @see: bool InitPort UINT portNo 1 UINT baud CBR 9600 char parity "N" UINT databits 8 UINT stopsbits 1 DWORD dwCommEvents EV RXCHAR ; 串口初始化函数 本函数提供直接根据DCB参数设置串口参数 @param: UINT portNo @param: const LPDCB & plDCB @return: bool 初始化是否成功 @note: 本函数提供用户自定义地串口初始化参数 @see: bool InitPort UINT portNo const LPDCB& plDCB ; 开启监听线程 本监听线程完成对串口数据的监听 并将接收到的数据打印到屏幕输出 @return: bool 操作是否成功 @note: 当线程已经处于开启状态时 返回flase @see: bool OpenListenThread ; 关闭监听线程 @return: bool 操作是否成功 @note: 调用本函数后 监听串口的线程将会被关闭 @see: bool CloseListenTread ; 向串口写数据 将缓冲区中的数据写入到串口 @param: unsigned char pData 指向需要写入串口的数据缓冲区 @param: unsigned int length 需要写入的数据长度 @return: bool 操作是否成功 @note: length不要大于pData所指向缓冲区的大小 @see: bool WriteData unsigned char pData unsigned int length ; 获取串口缓冲区中的字节数 @return: UINT 操作是否成功 @note: 当串口缓冲区中无数据时 返回0 @see: UINT GetBytesInCOM ; 读取串口接收缓冲区中一个字节的数据 @param: char & cRecved 存放读取数据的字符变量 @return: bool 读取是否成功 @note: @see: bool ReadChar char &cRecved ; private: 打开串口 @param: UINT portNo 串口设备号 @return: bool 打开是否成功 @note: @see: bool openPort UINT portNo ; 关闭串口 @return: void 操作是否成功 @note: @see: void ClosePort ; 串口监听线程 监听来自串口的数据和信息 @param: void pParam 线程参数 @return: UINT WINAPI 线程返回值 @note: @see: static UINT WINAPI ListenThread void pParam ; private: 串口句柄 HANDLE m hComm; 线程退出标志变量 static bool s bExit; 线程句柄 volatile HANDLE m hListenThread; 同步互斥 临界区保护 CRITICAL SECTION m csCommunicationSync; < 互斥操作串口 }; #endif SERIALPORT H ">呈上头文件部分信息 注释的也很详细的 COPYRIGHT NOTICE Copyright c 2009 华中科技大学tickTick Group (版权声明) All rights reserved @file SerialPort h @brief [更多]
C#串口介绍以及简单串口通信程序设计实现 源代码和串口程序介绍连接:https://www.cnblogs.com/JiYF/p/6618696.html 本站积分太贵,自己变得。。直接到连接地址下载代码 周末,没事干,写个简单的串口通信工具,也算是本周末曾来过,废话不多,直接到主题 串口介绍   串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。(至于再详细,自己百度) 串口应用:   工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串口通信来实现!你要是细心的话,你会发现,目前家用国网智能电能表就具备RS485通信总线(串行总线的一种)与RS232可以相互转化(当然一般,非专业的谁也不会闲的蛋疼,趴电表上瞎看,最多也就看看走了多少度电) RS232 DB9介绍: 1.示意图 2.针脚介绍: 载波检测(DCD) 接受数据(RXD) 发出数据(TXD) 数据终端准备好(DTR) 信号地线(SG) 数据准备好(DSR) 请求发送(RTS) 清除发送(CTS) 振铃指示(RI) 3.实物图: 以下是我购买XX公司的一个usb转串口线:这个头就是一个公头,另一端是一个usb口 笨小孩串口工具运行图: 1.开启程序 2.发送一行字符串HelloBenXH,直接将针脚的发送和接收链接起来就可以测试了(针脚2 接受数据(RXD) 和3 发出数据(TXD))直接链接, C#代码实现:采用SerialPort 1.实例化一个SerialPort [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 private SerialPort ComDevice = new SerialPort(); 2.初始化参数绑定接收数据事件 [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 public void init() { btnSend.Enabled = false; cbbComList.Items.AddRange(SerialPort.GetPortNames()); if (cbbComList.Items.Count > 0) { cbbComList.SelectedIndex = 0; } cbbBaudRate.SelectedIndex = 5; cbbDataBits.SelectedIndex = 0; cbbParity.SelectedIndex = 0; cbbStopBits.SelectedIndex = 0; pictureBox1.BackgroundImage = Properties.Resources.red; ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件 }
模拟设备,发送串口数据 基于界面的串口监控工具 串口设备模拟使用方法如下: 1. 命令行启动 SerialportServer -port port -frm framfile 参数port: 所打开的串口,在windows下为诸如COM1 COM2的名字,在linux下则一般为ttyS0 ttyS1等 参数frmfile: 对应的报文文件,一般基于xml的frm文件,也可以用其它的后缀名 2. 基于xml的frm文件格式,如下: <?xml version="1.0" encoding="UTF-8"?> <SerialportServer> <SerialportConfig baudRate="9600" dataBits="8" parity="EvenParity" stopBits="1" flowControl="NoFlowControl" /> <Frame name="CmmInv" dest="逆变电源模拟量1查询"> se value="80 03 02 08 98 82 30" /> </Frame> <Frame name="CmmInv" dest="逆变电源模拟量2查询"> se value="80 03 06 08 98 13 88 00 00 E9 19" /> </Frame> <Frame name="CmmInv" dest="逆变电源模拟量3查询"> se value="80 03 04 03 E8 03 E8 EB F5" /> </Frame> <Frame name="CmmInv" dest="通信电源模拟量查询"> se value="91 03 06 01 E0 00 00 01 F4 0D 63" /> </Frame> <Frame name="CmmInv" dest="逆变电源状态查询"> se value="80 03 02 00 60 84 72" /> </Frame> <Frame name="CmmInv" dest="通信电源状态量查询"> se value="91 03 02 00 03 38 58" /> </Frame> SerialportServer> (1) 文件保存格式为utf-8,基于xml1.0 (2) SerialportServer为根节点,名字必须为SerialportServer,且作为根节点,其下只能有0到1个SerialportConfig节点,0到多个Device节点 (3) SerialportConfig为串口配置节点,其下没有子节点。此节点为可选节点,如果无此节点,则串口按默认值运行,默认值见(4)。 各个属性意义和取值范围如下; baudRate: 波特率,根据你所用硬件支持的波特率范围中选择你需要的波特率设置即可,注意此值为整数 dataBits: 数据位,可取5 6 7 8,如果设置其它值将被视为无效,系统则强制取默认值填充 parity: 校验方式,可取NoParity, EvenParity, OddParity, SpaceParity, MarkParity,如果设置其它值勤将视为无效,系统则强制取默认值填充 stopBits: 停止位,可取1 1.5 2,如果设置其它值勤将视为无效,系统则强制取默认值填充 flowControl:流控制方式,可取NoFlowControl, HardwareControl, SoftwareControl,如果设置其它值勤将视为无效,系统则强制取默认值填充 (4) 串口默认运行参数为:baudRate="9600" dataBits="8" parity="EvenParity" stopBits="1" flowControl="NoFlowControl" (5) Device为装置/设备节点,这只是为了维护而定义的逻辑设备。其下可以有0到多个Frame节点。用户可以按自己的需要把同一设备的数据分到不同的Device节点下,也可以把多个设备的数据放到同一个Device下。 name和desc属性只作为方便维护用,用户也可以不写此属性,程序也不读取其中的值 (6) Frame为帖单元节点,包括一个Require节点和一个Response,此节点的name和desc属性是可选的,只作为方便维护用,用户也可以不此属性,程序也不读取其中的值 (7) Require为接收报文的匹配值,其下不包括任何子节点,value属性是必须的,它的值为接收报文对应的十六进制数据,每个字节对应一个十六进制数据,字节之间用空格隔开,空格不作为报文的内容 (8) Response为发送报文的匹配值,其下不包括任何子节点,value属性是必须的,它的值为发送报文对应的十六进制数据,每个字节对应一个十六进制数据,字节之间用空格隔开,空格不作为报文的内容

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧