
C#如何获取串口号对应的串口(设备)名称
void GetPort() { Microsoft.Win32.RegistryKey hklm= Microsoft.Win32.Registry.LocalMachine; Microsoft.Win32.RegistryKey software11= hklm.OpenSubKey(HARDWARE); \\\/\\\/打开HARDWARE子健 Microsoft.Win32.RegistryKey software= software11.OpenSubKey(DEVICEMAP); Microsoft.Win32.RegistryKey sitekey= software.OpenSubKey(SERIALCOMM); \\\/\\\/获取当前子健 String []Str2= sitekey.GetValueNames;\\\/\\\/Str2=System.IO.Ports.SerialPort.GetPortNames();\\\/\\\/第二中方法,直接取得串口值 \\\/\\\/获得当前子健下面所有健组成的字符串数组 Integer ValueCount= sitekey.ValueCount; \\\/\\\/获得当前子健存在的健值 int i; for( i=0;i< ValueCount;i++) { comboBox1.Items.Add(sitekey.GetValue(Str2[i])); } }combobox1显示当前端口号
求C++ C语言大神帮忙弄一个串口通信的代码
这是我以前写的一个串口通讯文件,全部贴出来了,希望对你有帮助,包括设置,发送,接受数据,你可以好好看看,祝你成功\\\/\\\/ 串口Dlg.cpp : 实现文件\\\/\\\/#include stdafx.h#include 串口.h#include 串口Dlg.h#include afxdialogex.h#ifdef _DEBUG#define new DEBUG_NEW#endif\\\/\\\/ 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx{public: CAboutDlg();\\\/\\\/ 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); \\\/\\\/ DDX\\\/DDV 支持\\\/\\\/ 实现protected: DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){ CDialogEx::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()\\\/\\\/ C串口Dlg 对话框C串口Dlg::C串口Dlg(CWnd* pParent \\\/*=NULL*\\\/) : CDialogEx(C串口Dlg::IDD, pParent) , m_Selection(0) , m_recv(_T()) , m_send(_T()){ m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void C串口Dlg::DoDataExchange(CDataExchange* pDX){ CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_MSCOMM1, m_CMscomm); DDX_Control(pDX, IDC_COMBO2, m_CComboBox); DDX_Text(pDX, IDC_RECV, m_recv); DDX_Text(pDX, IDC_SEND, m_send);}BEGIN_MESSAGE_MAP(C串口Dlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, &C串口Dlg::OnBnClickedButton1) ON_CBN_SELCHANGE(IDC_COMBO2, &C串口Dlg::OnSelchangeCombo2) ON_WM_LBUTTONDBLCLK() ON_BN_CLICKED(IDC_BUTTON2, &C串口Dlg::OnBnClickedButton2) ON_WM_DRAWITEM()END_MESSAGE_MAP()\\\/\\\/ C串口Dlg 消息处理程序BOOL C串口Dlg::OnInitDialog(){ CDialogEx::OnInitDialog(); \\\/\\\/ 将“关于...”菜单项添加到系统菜单中。
\\\/\\\/ IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } \\\/\\\/ 设置此对话框的图标。
当应用程序主窗口不是对话框时,框架将自动 \\\/\\\/ 执行此操作 SetIcon(m_hIcon, TRUE); \\\/\\\/ 设置大图标 SetIcon(m_hIcon, FALSE); \\\/\\\/ 设置小图标 \\\/\\\/ TODO: 在此添加额外的初始化代码 m_CMscomm.put_CommPort(2); if(m_CMscomm.get_PortOpen()) m_CMscomm.put_PortOpen(0);\\\/\\\/解除占用 m_CMscomm.put_PortOpen(1);\\\/\\\/打开串口 static CString str(9600,n,8,1); m_CMscomm.get_Input(); m_CMscomm.put_RThreshold(1); m_CMscomm.put_Settings(str); static char ch[10]; CString str1(com); for(int i=1;i<10;i++) { itoa(i,ch,10); m_CComboBox.AddString(str1+ch); } m_CComboBox.SetCurSel(0); return TRUE; \\\/\\\/ 除非将焦点设置到控件,否则返回 TRUE}void C串口Dlg::OnSysCommand(UINT nID, LPARAM lParam){ if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); }}\\\/\\\/ 如果向对话框添加最小化按钮,则需要下面的代码\\\/\\\/ 来绘制该图标。
对于使用文档\\\/视图模型的 MFC 应用程序,\\\/\\\/ 这将由框架自动完成。
void C串口Dlg::OnPaint(){ if (IsIconic()) { CPaintDC dc(this); \\\/\\\/ 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast
HCURSOR C串口Dlg::OnQueryDragIcon(){ return static_cast RS232接口就是串口,电脑机箱后方的9芯插座,旁边一般有 |O|O| 样标识。 一般机箱有两个,新机箱有可能只有一个。 笔记本电脑有可能没有。 有很多工业仪器将它作为标准通信端口。 通信的内容与格式一般附在仪器的用户说明书中。 计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式。 由于串行通讯方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。 在串行通讯时,要求通讯双方都采用一个标准接口,使不同 的设备可以方便地连接起来进行通讯。 RS-232-C接口(又称 EIA RS-232-C)是目前最常用的一种串行通讯接口。 它是在1970年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标 准。 它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间 串行二进制数据交换接口技术标准”该标准规定采用一个25个脚的 DB25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信 号的电平加以规定。 (1)接口的信号内容 实际上RS-232-C的25条引线中有许多是很少使用的,在计算机与终端通讯中一般只使用3-9条引线。 RS-232-C最常用的9条引线的信号内容见附表1所示 (2)接口的电气特性 在RS-232-C中任何一条信号线的电压均为负逻辑关系。 即:逻 辑“1”,-5— -15V;逻辑“0” +5— +15V 。 噪声容限为2V。 即 要求接收器能识别低至+3V的信号作为逻辑“0”,高到-3V的信号 作为逻辑“1” (3) 接口的物理结构 RS-232-C接口连接器一般使用型号为DB-25的25芯插头座,通常插头在DCE端,插座在DTE端. 一些设备与PC机连接的RS-232-C接口,因为不使用对方的传送控制信号,只需三条接口线,即“发送数据”、“接收数据”和“信号地”。 所以采用DB-9的9芯插头座,传输线采用屏蔽双绞线。 (4)传输电缆长度 由RS-232C标准规定在码元畸变小于4%的情况下,传输电缆长度应为50英尺,其实这个4%的码元畸变是很保守的,在实际应用中,约有99%的用户是按码元畸变10-20%的范围工作的,所以实际使用中最大距离会远超过50英尺,美国DEC公司曾规定允许码元畸变为10%而得出附表2 的实验结果。 其中1号电缆为屏蔽电缆,型号为DECP.NO.9107723 内有三对双绞线,每对由22# AWG 组成,其外覆以屏蔽网。 2号电缆为不带屏蔽的电缆。 型号为DECP.NO.9105856-04是22#AWG的四芯电缆。 1.RS-232-C是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。 RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。 RS-232-C总线标准设有25条信号线,包括一个主通道和一个辅助通道,在多数情况下主要使用主通道,对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。 RS-232-C标准规定的数据传输速率为每秒50、75、 100、150、300、600、1200、2400、4800、9600、19200波特。 RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF\\\/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。 传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。 2.RS-485总线,在要求通信距离为几十米到上千米时,广泛采用RS-485 串行总线标准。 RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。 加上总线收发器具有高灵敏度,能检测低至200mV的电压,故传输信号能在千米以外得到恢复。 RS-485采用半双工工作方式,任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。 RS-485用于多点互连时非常方便,可以省掉许多信号线。 应用RS-485 可以联网构成分布式系统,其允许最多并联32台驱动器和32台接收器。 以往,PC与智能设备通讯多借助RS232、RS485、以太网等方式,主要取决于设备的接口规范。 但RS232、RS485只能代表通讯的物理介质层和链路层,如果要实现数据的双向访问,就必须自己编写通讯应用程序,但这种程序多数都不能符合ISO\\\/OSI的规范,只能实现较单一的功能,适用于单一设备类型,程序不具备通用性。 在RS232或RS485设备联成的设备网中,如果设备数量超过2台,就必须使用RS485做通讯介质,RS485网的设备间要想互通信息只有通过“主(Master)”设备中转才能实现,这个主设备通常是PC,而这种设备网中只允许存在一个主设备,其余全部是从(Slave)设备。 而现场总线技术是以ISO\\\/OSI模型为基础的,具有完整的软件支持系统,能够解决总线控制、冲突检测、链路维护等问题。 ... RS-232C接口标准详解 串行通信接口标准经过使用和发展,目前已经有几种。 但都是在 RS-232标准的基础上经过改进而形成的。 所以,以RS-232C为主来讨论。 RS-323C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。 它适合于数据传输速率在0~20000b\\\/s范围内的通信。 这个标准对串行通信接口的有关问题,如信号线功能、电器特性都作了明确规定。 由于通行设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在微机通信接口中广泛采用。 在讨论RS-232C接口标准的内容之前,先说明两点: 首先,RS-232-C标准最初是远程通信连接数据终端设备DTE(Data Terminal Equipment)与数据通信设备DCE(Data Communication Equipment)而制定的。 因此这个标准的制定,并未考虑计算机系统的应用要求。 但目前它又广泛地被借来用于计算机(更准确的说,是计算机接口)与终端或外设之间的近端连接标准。 显然,这个标准的有些规定及和计算机系统是不一致的,甚至是相矛盾的。 有了对这种背景的了解,我们对RS-232C标准与计算机不兼容的地方就不难理解了。 其次,RS-232C标准中所提到的“发送”和“接收”,都是站在DTE立场上,而不是站在DCE的立场来定义的。 由于在计算机系统中,往往是CPU和I\\\/O设备之间传送信息,两者都是DTE,因此双方都能发送和接收。 一、RS-232-C RS-232C标准(协议)的全称是EIA-RS-232C标准,其中EIA(Electronic Industry Association)代表美国电子工业协会,RS(ecommeded standard)代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969),在这之前,有RS232B、RS232A。 。 它规定连接电缆和机械、电气特性、信号功能及传送过程。 常用物理标准还有有EIA�RS-232-C、EIA�RS-422-A、EIA�RS-423A、EIA�RS-485。 这里只介绍EIA�RS-232-C(简称232,RS232)。 例如,目前在IBM PC机上的COM1、COM2接口,就是RS-232C接口。 1.电气特性 EIA-RS-232C对电器特性、逻辑电平和各种信号线功能都作了规定。 在TxD和RxD上:逻辑1(MARK)=-3V~-15V 逻辑0(SPACE)=+3~+15V 在RTS、CTS、DSR、DTR和DCD等控制线上: 信号有效(接通,ON状态,正电压)=+3V~+15V 信号无效(断开,OFF状态,负电压)=-3V~-15V 图1 以上规定说明了RS-323C标准对逻辑电平的定义。 对于数据(信息码):逻辑“1”(传号)的电平低于-3V,逻辑“0”(空号)的电平告语+3V;对于控制信号;接通状态(ON)即信号有效的电平高于+3V,断开状态(OFF)即信号无效的电平低于-3V,也就是当传输电平的绝对值大于3V时,电路可以有效地检查出来,介于-3~+3V之间的电压无意义,低于-15V或高于+15V的电压也认为无意义,因此,实际工作时,应保证电平在±(3~15)V之间。 EIA-RS-232C与TTL转换:EIA-RS-232C是用正负电压来表示逻辑状态,与TTL以高低电平表示逻辑 状态的规定不同。 因此,为了能够同计算机接口或终端的TTL器件连接,必须在EIA-RS-232C与TTL电路之间进行电平和逻辑关系的变换。 实现这种变换的方法可用分立元件,也可用集成电路芯片。 目前较为广泛地使用集成电路转换器件,如MC1488、SN75150芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的转换。 MAX232芯片可完成TTL←→EIA双向电平转换,图1显示了1488和1489的内部结构和引脚。 MC1488的引脚(2)、(4,5)、(9,10)和(12,13)接TTL输入。 引脚3、6、8、11输出端接EIA-RS-232C。 MC1498的14的1、4、10、13脚接EIA输入,而3、6、8、11脚接TTL输出。 具体连接方法如图2所示。 图中的左边是微机串行接口电路中的主芯片UART,它是TTL器件,右边是EIA-RS-232C连接器,要求EIA高电压。 因此,RS-232C所有的输出、输入信号都要分别经过MC1488和MC1498转换器,进行电平转换后才能送到连接器上去或从连接器上送进来。 图2 2、、连接器的机械特性: 连接器: 由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同。 下面分别介绍两种连接器。 (1)DB-25: PC和XT机采用DB-25型连接器。 DB-25连接器定义了25根信号线,分为4组: ①异步通信的9个电压信号(含信号地SG)2,3,4,5,6,7,8,20,22 ②20mA电流环信号 9个(12,13,14,15,16,17,19,23,24) ③空6个(9,10,11,18,21,25) ④保护地(PE)1个,作为设备接地端(1脚) DB-25型连接器的外形及信号线分配如图3所示。 注意,20mA电流环信号仅IBM PC和IBM PC\\\/XT机提供,至AT机及以后,已不支持。 电缆长度:在通信速率低于20kb\\\/s时,RS-232C所直接连接的最大物理距离为15m(50英尺)。 最大直接传输距离说明:RS-232C标准规定,若不使用MODEM,在码元畸变小于4%的情况下,DTE和DCE之间最大传输距离为15m(50英尺)。 可见这个最大的距离是在码元畸变小于4%的前提下给出的。 为了保证码元畸变小于4%的要求,接口标准在电气特性中规定,驱动器的负载电容应小于2500pF。串行通信接口的标准



