需求:儀器上只有一個物理串口接口,但是儀器中有兩個軟件需要同時讀取該串口的輸入數(shù)據(jù)。最簡單的方法是在硬件上實現(xiàn)串口的分路,但是老板想要保持硬件不變,在軟件上解決這個問題。物理串口類型是RS232.
查了一些資料,總結(jié)下有兩種方案:
1、寫一個程序,將讀到的物理串口數(shù)據(jù)不斷寫到一個外部文件中。當那兩個軟件需要運行時,從外部文件中讀取數(shù)據(jù);
2、利用虛擬串口:寫一個程序,將讀到的物理串口數(shù)據(jù)不斷寫到兩個虛擬串口中。當那兩個軟件需要運行時,從兩個虛擬串口中讀取數(shù)據(jù);
經(jīng)過對比,選擇方法二,因為我覺得方法二使用起來更方便,可以直接設(shè)置那兩個軟件的讀取數(shù)據(jù)com口即可。具體的實現(xiàn)方式如下:
Step 1. 新建虛擬串口
什么是虛擬串口?
虛擬串口是相對于物理串口而言的,不需要物理上的串口就可以存在;
如何創(chuàng)建虛擬串口?
使用軟件Configure Virtual Serial Port Driver,界面如下:

該軟件使用非常簡單,在Manage ports中選擇com口,點擊Add pair。在創(chuàng)建虛擬串口時,是成對創(chuàng)建的,該對串口默認相互連接。創(chuàng)建虛擬串口后,在設(shè)備管理器中可以看到:
Step 2. 用labview讀取com10接收到的數(shù)據(jù),并寫給com1和com3
什么是Labview?
Labview是NI公司出的一款編程軟件,我覺得它有兩個優(yōu)點,一是容易實現(xiàn)PC與外部硬件的交互;二是圖形化編程,適用于編寫一些簡單的程序。
如何用Labview將物理串口數(shù)據(jù)分發(fā)給虛擬串口?
程序流程如下:
1、配置com10、com1、com3口;
2、讀取com10接收到的數(shù)據(jù);
3、將com10接收到的數(shù)據(jù)發(fā)送給com1和com3;
4、循環(huán)執(zhí)行步驟2和3;
5、關(guān)閉三個端口;
程序如下:
該程序的作用是,使得能夠在com2和com4上同時讀取到com10接收的數(shù)據(jù)。接收方式如下。
Step 3. 驗證是否成功進行串口分配
用arduino mega發(fā)送串口數(shù)據(jù)到com10
我們選擇外圍電路mega給PC進行串口數(shù)據(jù)的發(fā)送。arduino程序如下:
void setup() {
}
// first visible ASCIIcharacter '!' is number 33:
int thisByte = 33;
// you can also write ASCII characters in single quotes.
// for example. '!' is the same as 33, so you could also use this:
//int thisByte = '!';
void loop() {
}
該程序可以使mega不斷地給PC發(fā)送數(shù)據(jù)。
用PuTTY讀取com2和com4
第一次用PuTTY,真的很強大,功能很多。讀串口數(shù)據(jù)是功能之一。界面如下
通過驗證,發(fā)現(xiàn)用該方法可以實現(xiàn)物理串口到虛擬串口一對多分發(fā)。