C# 串行端口重定向或拆分

C# 串行端口重定向或拆分,c#,c++,c,serial-port,communication,C#,C++,C,Serial Port,Communication,我正在寻找一本书和/或一个如何做串口重定向或端口拆分的代码示例。我编写了很多com端口应用程序,并希望编写一个监视器应用程序,使我能够监视应用程序和设备之间的串行端口 因此,我希望能够将串行端口重定向到另一个端口,以便能够监视端口之间的数据流 我知道在某些情况下,这必须在内核级别完成。(在USB机箱中) 我已经用C#中的system.IO.Ports编写了监视器应用程序。如果我必须调用C++/C程序集,这很好 谢谢 Joe您可能会发现Mark Russinovich的著作对您的工作很有帮助,尽管

我正在寻找一本书和/或一个如何做串口重定向或端口拆分的代码示例。我编写了很多com端口应用程序,并希望编写一个监视器应用程序,使我能够监视应用程序和设备之间的串行端口

因此,我希望能够将串行端口重定向到另一个端口,以便能够监视端口之间的数据流

我知道在某些情况下,这必须在内核级别完成。(在USB机箱中)

我已经用C#中的system.IO.Ports编写了监视器应用程序。如果我必须调用C++/C程序集,这很好

谢谢

Joe

您可能会发现Mark Russinovich的著作对您的工作很有帮助,尽管它没有提供源代码。它将记录与端口相关的所有系统调用,并具有广泛的过滤功能,以将该日志保持在可管理的大小

Edit:PortMon在运行时将内核模式设备驱动程序注入系统。该驱动程序通过在堆栈中插入筛选器驱动程序来钩住要监视的端口。该筛选器驱动程序将通过它的所有IRP报告给应用程序。这不是一个容易实现的beast,而且它确实不能在用户模式下实现

WindowsDDK确实有端口筛选器驱动程序的示例代码,但是从示例到有用的东西需要做很多工作

一个纯用户模式的解决方案是使用两个额外的串行端口窃听线路。一对USB到串行适配器和一点接线可以满足您的需要。然后,监视和关联发送和接收线路只是一个“编程的小问题”。一个单芯片解决方案可以基于,它有一个可用的。添加两个RS232级别的转换器和一些D接口,USB上就有一个串行窃听器,看起来像Windows的两个COM端口


另一种开箱即用的方法是,许多逻辑分析仪和混合信号示波器可以进行串行协议解码,通常作为可选组件。便宜的USB+软件解决方案的一个来源是。我自己也从他们那里买过芯片和模块,但对他们出售的任何基于USB的逻辑分析仪没有任何直接的经验,尽管我认为我应该在我的包里放一个和上网本在一起…

我在很多年前写过一个。DDK(设备驱动程序工具包)包括并行端口驱动程序的过滤器驱动程序的示例源代码(即,就在上面):我将此示例改编为与串行端口驱动程序一起使用,然后添加了监控和拆分等功能

这是串行端口,不是USB

我还实现了另一个驱动程序,它是一个“虚拟”串行端口,即它实现了一个串行端口API,但随后将数据I/O重定向到其他地方

要实施这项计划需要花费大量的工作(很多个月)。

购买一个。这是一个硬件设备,连接在两个串行端口之间,被动地侦听设备之间的“抖动”。我使用以下设备两年半了,它为我节省了大量的故障排除时间和精力。(我每天晚上都会把它带回家,以防止技术支持人员“借用”它。)制作这个设备很容易,但下面的数据点击是灵活的

“点击串行数据流并透明地监视数据活动。输出可以输入监视器打印机或其他设备。双列直插式开关允许编程单独或一起监控主传输线和接收线。无需外部电源,易于安装,透明连接理想的RS232/串行软件开发辅助工具。”

或者,制作或购买串行抽头监视器电缆。有关一种可能的配置,请参阅


我强烈建议您不要使用软件解决方案,因为监控软件可能会受到物理环境的影响。

这取决于您将要执行的操作。如果您需要搞乱两个串行设备之间的线路连接方式,或者需要一些“良好”的定时信息,最好是使用外部设备就像安东尼已经说过的

如果你只是需要某种监控,你可以使用或


也许您编写了两个应用程序,它们将通过串行连接进行通信。要在没有本地环回电缆的单台PC上完成此操作,您可以尝试。

谢谢RB,我目前正在使用XPort,但希望在应用程序中嵌入端口拆分。我已经更新了我的答案,并介绍了我今天下午想到的一些其他想法rnoon…尝试VSPE。刚开始使用它,似乎对32位机器运行良好。也有64位的版本。使用应用程序配置虚拟端口,或者您可以使用API。创建内核模式虚拟串行设备…感谢Oliver,我过去使用过Com0com,但因为其中一个设备是USB到COM端口,所以Com0com似乎不可用工作。我尝试过PortMon,但它捕获的数据不完整。Xport工作,但我可能不得不将其放到我们的生产线上,我不希望技术人员一次加载两个程序。谢谢RB和Anthony。我也一直在考虑这个解决方案。我们有一个串行陷阱设备,但我们的一个设备使用USB连接COM映射。但我可能会尝试为USB制作陷阱监视器电缆。