设置串行RS232端口设置;任何在C#中的替代品SerialPort类? [英] Setting serial RS232 port settings; any in C# alternatives to SerialPort class?

查看:410
本文介绍了设置串行RS232端口设置;任何在C#中的替代品SerialPort类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的.net应用程序我需要实现相当于这个C ++托管code串行端口设置:

In my .NET application I need to achieve serial port setup equivalent to this C++ managed code:

::SetCommMask(m_hCOMM, EV_RXCHAR);  
::SetupComm(m_hCOMM, 9*2*128*10, 400);
::PurgeComm(m_hCOMM, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);

COMMTIMEOUTS timeOut;
timeOut.ReadIntervalTimeout        = 3;
timeOut.ReadTotalTimeoutConstant   = 3;
timeOut.ReadTotalTimeoutMultiplier = 1; 
timeOut.WriteTotalTimeoutConstant  = 0;
timeOut.WriteTotalTimeoutMultiplier= 0;
int nRet= ::SetCommTimeouts(m_hCOMM, &timeOut); 

::EscapeCommFunction(m_hCOMM, SETDTR);  
::EscapeCommFunction(m_hCOMM, SETRTS);      

DCB dcb;
memset(&dcb, 0, sizeof(DCB));
dcb.BaudRate= m_nSpeed; 
dcb.ByteSize= 8;
dcb.fParity = FALSE;
dcb.Parity  = NOPARITY;
dcb.StopBits= ONESTOPBIT;
dcb.fBinary = TRUE;


dcb.fDsrSensitivity= FALSE; 

dcb.fOutxDsrFlow= FALSE;        
dcb.fOutxCtsFlow= FALSE;            


dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;
dcb.fRtsControl = RTS_CONTROL_TOGGLE;

nRet= ::SetCommState(m_hCOMM, &dcb);

是否有可能呢?我该如何解决这个问题?是否有任何(preferable免费)库,允许这种低级别的串口控制或者我应该在Win32 API之上创建自己的包装? 任何人做过类似的话,或有一个想法如何粘合的win32串口API使用.NET这样我可以用整齐的.NET DataReceived()事件?或者,也许我可以创建.NET的SerialPort实例,然后使用管理API修改它?

Is it possible at all? How do I approach this problem? Are there any (preferable free) libraries that allow such low level serial port control or should I create my own wrapper on top of Win32 api? Anyone did anything similar or has an idea how to 'glue' win32 serial port api with .net so that I can use neat .NET DataReceived() events ? Or maybe I can create .NET SerialPort instance and then modify it using managed API?

推荐答案

的的。NET SerialPort类拥有大部分你所需要的。

The .NET SerialPort class has most of what you need.

p = SerialPort.SerialPort(); //use whichever constructor you need

p.DiscarInBuffer();
p.DiscardOutbuffer();
p.ReadBufferSize = 9*2*128*10;
p.WriteBufferSize = 400;


p.ReadTimeout = 10; //not exactly equivalent to COMMTIMEOUTS
p.WriteTimeout = 0;

p.DtrEnable = true;
p.RtsEnable = true;

p.BaudRate = m_nSpeed;
p.DataBits = 8;
p.Parity = Parity.None;
p.StopBits = StopBits.One;

//I think DSR and CTS states are pollable by app but ignored by driver 

这篇关于设置串行RS232端口设置;任何在C#中的替代品SerialPort类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆