持续设置COM端口控制信号

时间:2016-05-09 16:04:16

标签: c# .net serial-port

我们通过设置串行COM端口的DTR线(DTR和GND以外的引脚未连接)来打开或关闭远程系统。当电压低于-3.5V时,远程系统开启,否则关闭。

默认情况下,DTR关闭,引脚输出-9V(即远程系统开启)。使用.NET的SerialPort类,关闭远程系统就像

一样简单
var port = new SerialPort("COMx");
port.Open();
port.DtrEnable = true;

我的问题是,一旦配置了端口对象,DTR的默认状态就会恢复(OFF),因此远程系统会重新打开。当然这只是一个问题,只要控制程序"因为我可以保持端口对象存活而运行。但是,如何在用户关闭程序时启用DTR?

我认为无法使用.NET类完成,所以尝试使用Win32 api函数:

var handle = CreateFile(sPortName, 0x80000000 | 0x40000000, 0, IntPtr.Zero, 4, 0, IntPtr.Zero);
var config = new DCB();

GetCommState(handle, ref config);
config.Flags = 0x11; //set fDTRControl and fBinary
SetCommState(handle, ref config);
CloseHandle(handle);

不幸的是,呼叫' CloseHandle'还会恢复COM端口的默认设置,因此此代码也无法正常工作。

除了创建永久运行的后台服务之外,还有办法让这项工作完成吗?

0 个答案:

没有答案