線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:10770
推到 Plurk!
推到 Facebook!

請問comport的監聽程式要怎麼寫

尚未結案
unfinish
一般會員


發表:2
回覆:3
積分:1
註冊:2002-10-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-05 22:12:58 IP:61.217.xxx.xxx 訂閱
我之前是用BCB搭MSComm.ocx來進行RS232的控制 這是我對comport曾有過的唯一相關經驗 公司要把一些測試設備導入自動化 因為測試軟體是套裝軟體無法做修改 所以我想寫個監聽程式來監視測試軟體和待測物目前的狀態 然後再修改一下治具電路來達到自動化 比如說 當監聽程式發現comport有資料進來就表示要開始測試了 這個時候就發出信號把治具的門自動關上 然後當監聽程式收到測試結束的相關資料時 就再發出信號把治具的門打開把待測物自動退出 諸如此類的 因此想請問大家怎麼寫comport的監聽程式 可以使用MSComm.ocx來達成嗎 另外 在監聽的同時我能夠對RTS做enable嗎 謝謝大家
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-06 00:10:38 IP:61.225.xxx.xxx 訂閱
有點不清楚你的狀況。
可以再說清楚一點嗎?
你說你用套裝。你要再寫一支程式去跟套裝怎麼湊?
unfinish
一般會員


發表:2
回覆:3
積分:1
註冊:2002-10-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-06 23:55:24 IP:61.217.xxx.xxx 訂閱
1.待測物放進治具
2.接上PC連接線(連接COM1)
3.關上治具的門
4.執行測試程式
5.測試程式透過RS232對待測物下指令(比如:測試程式下指令「AT」待測物則回應「OK」表示待測物已就緒,然後就開始進行測試)
6.待測物依指令做出回應(比如:指令12→回應34、指令AB→回應CD、指令甲乙→回應丙丁)
7.指令-回應均正確則判PASS
8.打開治具的門
9.取出待測物
整個測試流程大致如上

基本上測試程式是不能修改的
所以我的想法就是寫個程式去監聽COM1的動靜
當監聽程式發現COM1有「OK」出現的時候就表示測試即將開始
這個時候監聽程式就送出信號讓治具門自動關上
當監聽程式發現COM1有「丙丁」的時候就表示測試已結束
送出信號打開治具
也就是說測試時是兩個程式同時在執行
測試程式跑自顧自的跑
然後監聽程式就是看看現在跑到哪了,該做些什麼,把門打開或把門關上之類的

大概就是這樣吧,這樣您可以瞭解我想表達的意思了嗎

===================引 用 文 章===================
有點不清楚你的狀況。
可以再說清楚一點嗎?
你說你用套裝。你要再寫一支程式去跟套裝怎麼湊?
friendlly
高階會員


發表:22
回覆:144
積分:103
註冊:2003-04-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-03-07 14:02:51 IP:61.64.xxx.xxx 訂閱
你要做的監聽程式不能跟你的測試程式同搶一個port
可以用com 2透硬體線路的對接去監聽com 1 ,不然就要用另依台PC囉
unfinish
一般會員


發表:2
回覆:3
積分:1
註冊:2002-10-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-03-07 22:29:24 IP:59.115.xxx.xxx 訂閱
會佔用就不叫監聽了啊

例如你的電腦透過com1連接了一台數據機
你只知道你的數據機在你進行撥號的時候會嘰嘎亂叫
你根本不知道你的電腦跟你的數據機在搞什麼鬼
這個時候就是用監聽軟體來監聽com1
不須要做任何硬體修改
你就可以看到電腦下了哪些AT指令給數據數
數據機又回應了些什麼東西

http://www.aggsoft.com/serial-port-monitor/RS232-monitor.htm
http://www.freedownloadscenter.com/Utilities/Misc__Utilities/Simple_RS_232_Monitor.html
http://www.lammertbies.nl/comm/cable/RS-232-spy-monitor.html
在Google上用RS232和monitor做關鍵字就能找到很多類似上面這幾個軟體
這些都是com port 的監聽軟體,只是這些軟體就單純只是監聽
沒辦法做出我要的控制動作,所以我才要自己寫

確實有朋友說過我的表達能力不太好,可是我這樣講應該就不難懂了吧
如果還是有先進看不懂我的要求是什麼
我再想辦法解釋清楚
因為我真的希望有人可以告訴我這些程式的監聽功能是怎麼寫的
謝謝大家

===================引 用 文 章===================
你要做的監聽程式不能跟你的測試程式同搶一個port
可以用com 2透硬體線路的對接去監聽com 1 ,不然就要用另依台PC囉
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-03-08 00:21:01 IP:220.131.xxx.xxx 訂閱
ok. 我們來看幾個方向。
一、單純的RS232是無法做到你說的功能。
二、我曾看過有人用特殊的”軟體”做驅動程式那邊的動作來攔。
也就是做出 virtual com port. 來做。不過要花不少軟體的錢。
以下是我會用的辦法。笨一點。應還可以用。
一,我會買個4PORT的RS232.再加上一個 null modem 的線。
com 1 <-null modem -> com 2
com 3 <-> 機器。

我會寫一支程式在 com 2 <-> com3 來做互丟的動作。
也就是 com 2 收到的。我丟到 com 3 去。 com3 收到的,我丟去 com 2 。
當然其中還可以做到你說的”監聽”動作。就看你要怎麼做都OK。
當然。你也可以買兩個 usb <-> rs232 的東西來用。只是我會覺得它每次取得的 com port 會不太一樣。(偶而會發生)
蠻煩的。所以我會採用一塊卡解法。

二、第二個方法,因為你的 RS232 的動作是屬於”半雙工”的方式。
所以我也會想買三個 RS232 轉 RS485 的東西。然後在PC這邊接兩個。一個接去機器。
再把這三個RS485的接點接起來。
這樣可以由多出來那個 port 來做監聽。
不過你只要做監聽。不要下動作。你下動作也許另一個軟體會錯亂。

這樣有解決你的問題了嗎?
pedro
尊榮會員


發表:152
回覆:1177
積分:865
註冊:2002-06-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-03-08 09:06:59 IP:60.248.xxx.xxx 未訂閱
何不換個角度來想,假如原先套裝軟體就有趨動某個動作,何不利用一些deley時間的電路接駁這個訊號,再去觸發你要開關治具的閘門
根本不必用一台PC
PC做自動控制是有風險的,你的程式不一定掌控所有OS分配的資源,像在掃毒也許訊號就漏接了,你要做一堆的防呆設計,而且RS232要克服訊號被不良環境干擾,諸多因素
另外一個問題,前面大大已經說過Comport被佔住,監聽技術不是沒有,只是要實作,沒那麼容易
unfinish
一般會員


發表:2
回覆:3
積分:1
註冊:2002-10-27

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-03-12 23:56:05 IP:59.117.xxx.xxx 訂閱
http://www.badongo.com/file/2446189

上面的連結是我在公司用的一套監聽程式
使用的方法很簡單
解壓縮之後執行PORTMON.EXE
Computer→Conecto Local
Capture→Ports(選擇要監聽的埠號)→Capture Events Ctrl E
就可以開始監聽Com port,不會佔用Com port
唯一的限制就是必須比你的通訊軟體先執行
例如:
若要監聽超級終端機透過com1的對外連線
要先執行PORTMON.EXE,設定好監聽com1後
再執行超級終端機,如此一來就可以監聽com1
可以同時監聽不只一個com port
還可以透過網路監聽其他電腦的com port (不過這功能我沒試過)

這個軟體是用什麼方式達成的呢
結論就是想要做到這樣的功能並沒有我想像中的簡單
是這樣嗎

pedro
尊榮會員


發表:152
回覆:1177
積分:865
註冊:2002-06-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-03-14 11:13:00 IP:60.248.xxx.xxx 未訂閱
據我的以前吸收的知識是這樣沒錯,不過好些年沒再去接觸Comport程式設計
或許有別的網友可以提供其它的建議
TWY
高階會員


發表:0
回覆:132
積分:151
註冊:2009-09-02

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-10-14 17:20:14 IP:211.21.xxx.xxx 訂閱
http://technet.microsoft.com/en-us/sysinternals/bb896644.aspx
提供另個 COM Port 監控工具大家參考。剛小試了一下的確能抓出我對 COM Port 讀寫的值,我也很好奇是怎麼用"純軟體"做到的,下面節錄原理說明,希望有這方面經驗的高手能分享、指點一二。

How it Works: WinNT

The Portmon GUI is responsible for identifying serial and parallel ports. It does so by enumerating the serial ports that are configured under HKEY_LOCAL_MACHINE\Hardware\DeviceMap\SerialComm and the parallel ports defined under HKEY_LOCAL_MACHINE\Hardware\DeviceMap\Parallel Ports. These keys contain the mappings between serial and parallel port device names and the Win32-accessible names.
When you select a port to monitor, Portmon sends a request to its device driver that includes the NT name (e.g. \device\serial0) that you are interested in. The driver uses standard filtering APIs to attach its own filter device object to the target device object. First, it uses ZwCreateFile to open the target device. Then it translates the handle it receives back from ZwCreateFile to a device object pointer. After creating its own filter device object that matches the characteristics of the target, the driver calls IoAttachDeviceByPointer to establish the filter. From that point on the Portmon driver will see all requests aimed at the target device.
Portmon has built-in knowledge of all standard serial and parallel port IOCTLs, which are the primary way that applications and drivers configure and read status information from ports. The IOCTLs are defined in the DDK file \ddk\src\comm\inc\ntddser.h and \ddk\src\comm\inc\ntddpar.h, and some


taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-10-14 18:33:39 IP:122.116.xxx.xxx 訂閱
應該不是純軟體,是有搭配driver的
類似bushound埋一個filter driver,AP再跟filter driver取得資料
TWY
高階會員


發表:0
回覆:132
積分:151
註冊:2009-09-02

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-10-14 22:53:29 IP:219.71.xxx.xxx 訂閱
謝謝 taishyang 大大提點‧我私下請教一些前輩大都用接線方式,對我來說不需透過實體線路,也不需額外安裝什麼單靠個 exe 就能達到正是我所好奇想要的,用 filter driver 或任何程式能搞定的方式皆行(雖然我不知道那是什麼 呵呵)
手上還有一些資料還沒消化,有新發現在來跟大家share 一下...


===================引 用 taishyang 文 章===================
應該不是純軟體,是有搭配driver的
類似bushound埋一個filter driver,AP再跟filter driver取得資料
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-10-15 09:16:18 IP:203.79.xxx.xxx 訂閱
大家討論熱烈,我也來參一腳

就我猜測....純用猜測的 ..... 沒有驗証過的....有『猜錯』的話,還請各位大大指導....
nqj

在Window的架構下,當一個AP去開啟了一個COM Port,OS會把使用權交給這個AP,然後就不會讓其它的AP去使用。

當然前提是透過標準的WINDOW存取方式去控制com port。所以基本上只要有一個AP使用了,其它的AP是一定不能再去使用它,甚至是『監控』它。

但這是透過標準的存取方式,如果是直接穿透過OS,而去碰觸到底層的硬體,基本上就能直接讀寫案個硬體位址的資料。

就我知道,透過 winio.sys 提供的api就能做到,但還是要先去了解一下硬體層的東西,才有辦法去讀取COM PORT的資料。


但 unfinish 大大所提的軟體,必需先開啟monitor的軟體,才後開啟實際運作的AP,我猜想它應該不是上述的原理,

不知道會不會是先去佔住原來的COM Port,然後再虛擬一個 COM Port出來給其它的AP用,這樣它就能達到『轉送』及『監控』的動作。

還是強調一下,以上僅猜測...還請各位大大指正...

===================引 用 unfinish 文 章===================
http://www.badongo.com/file/2446189

上面的連結是我在公司用的一套監聽程式
使用的方法很簡單
解壓縮之後執行PORTMON.EXE
Computer→Conecto Local
Capture→Ports(選擇要監聽的埠號)→Capture Events Ctrl E
就可以開始監聽Com port,不會佔用Com port
唯一的限制就是必須比你的通訊軟體先執行
例如:
若要監聽超級終端機透過com1的對外連線
要先執行PORTMON.EXE,設定好監聽com1後
再執行超級終端機,如此一來就可以監聽com1
可以同時監聽不只一個com port
還可以透過網路監聽其他電腦的com port (不過這功能我沒試過)

這個軟體是用什麼方式達成的呢
結論就是想要做到這樣的功能並沒有我想像中的簡單
是這樣嗎

TWY
高階會員


發表:0
回覆:132
積分:151
註冊:2009-09-02

發送簡訊給我
#14 引用回覆 回覆 發表時間:2009-10-15 09:24:35 IP:211.21.xxx.xxx 訂閱
在消化完一些資料後得到以下初步結論:
1. Serial Port Monitor 確實可以不透過實體線材,單純用程式做到(在這之前我以為不可能,因為使用 COM Port 都會咬著)
2. 用 Google 大神搜尋,可以找到不少 form Delphi 的元件,收費約在 99~299 美金不等,沒有免費的(午餐)。
3. 要自己寫出這樣的功能,勢必要付出相當代價。將來確有需要就叫公司買比較快,不然就用樓上前輩建議的線材技巧,程式技術門檻會較低些。
4. 有人真有心寫出這樣的元件,也可賣錢了。(sysinternals 裡面有 learning resource 應該會有幫助)

TWY
高階會員


發表:0
回覆:132
積分:151
註冊:2009-09-02

發送簡訊給我
#15 引用回覆 回覆 發表時間:2009-10-15 09:31:19 IP:211.21.xxx.xxx 訂閱
在搜尋過程中,我也有看到一些元件是用來虛擬出 COM Port, carstyc 大大提的這個方法我覺得很有可能可行性也很高,就如同使用硬體線材技巧意思一樣了。
===================引 用 carstyc 文 章===================
不知道會不會是先去佔住原來的COM Port,然後再虛擬一個 COM Port出來給其它的AP用,這樣它就能達到『轉送』及『監控』的動作。


系統時間:2017-10-21 21:59:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!