none
關於serialport透過usb to comport 的問題 RRS feed

  • 一般討論

  • 各位大大好:

    因為專案需要

    透過serialport來開發rs232的應用,

    不過客戶表示,

    電腦上有沒有com port,

    要求開發時要用usb to comport來作,

    我的程式透過comport to comport 來執行都沒有問題,

    一但透過usb to comport就會發生錯誤,

    之後用datascope的機器去收資料,

    才發現usb to comport時,

    怎麼datascope上顯示的資料跟我送出去的資料不一樣。

    我有事先有找了一下網路上的資料,

    但大部份的回答都是說「不信任usb傳輸資料」

    不知道有沒有什麼方法,

    在無法變更硬體架構下,

    能在usb to comport時, 

    不會造成資料錯誤的問題。

    以下是片段的程式碼

     byte[] send_ok_code = {不方便公開傳送碼 };
     byte[] test = new byte[165];
     serialPort1.Read(test, 0, serialPort1.BytesToRead);
     if (test[0] == 0x6c && test[1] ==0x4d)
           {
            test[0] = 0x1a;
            test[1] = 0x3f;
            test[2] = 0x7d;
            serialPort1.Write(send_ok_code , 0, 3);
           }

    麻煩各位前輩的指導了,感謝大大!!

    2012年12月12日 上午 01:16

所有回覆

  • = =? 你用的是哪個牌子的 usb to comport?

    目前市面上賣的應該不會有這個問題說~~


    學無止境

    2012年12月12日 上午 05:53
  • 如果你用AccessPort去監聽呢?也是跟你送出去的不一樣嗎?

    先前看璉大有介紹文:http://tlcheng.wordpress.com/2010/10/05/%E6%8E%A8%E8%96%A6%E9%80%9A%E8%A8%8A%E5%BF%85%E5%82%99%E7%9B%A3%E8%81%BD%E8%BB%9F%E9%AB%94-accessport/

    2012年12月12日 上午 06:00
  • 我還真沒見過用 USB 轉 SerialPort 會出現不一樣狀況的.

    所謂的不一樣, 有仔細分析過兩段 Byte 陣列的差異在哪些地方嗎 ?

    我能想到的可能性就是

    (1) Baud Rate, Stop bit, Data bit 或 Parity 的設定有誤

    (2) 有通訊干擾


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年12月12日 上午 08:43
    版主
  • to 昏睡大大:

    請問您有推薦的廠牌嗎??

    to 阿尼大大:

    我是外接一台專門查看收送訊號的機器來看,其他同事都透過那台機器來檢視自己開發的程式收送訊號有沒有問題。

    所以我只能懷疑是usb to comport出問題??還是我程式上需要改善??

    to bill大大:

    1、設定上是沒有問題的,因為我把執行檔移到有comport的電腦,用comport to comport,是可以正常執行的。

    2、能對通訊干擾說明一下嗎?小弟不才T___T


    • 已編輯 bensanuj 2012年12月14日 上午 01:53
    2012年12月14日 上午 01:51
  •  byte[] send_ok_code = {不方便公開傳送碼 };
     byte[] test = new byte[165];
     serialPort1.Read(test, 0, serialPort1.BytesToRead);
     if (test[0] == 0x6c && test[1] ==0x4d)
           {
            test[0] = 0x1a;
            test[1] = 0x3f;
            test[2] = 0x7d;
            serialPort1.Write(send_ok_code , 0, 3);
           }

    仔細看了這段Code才發現~ 你是要送send_ok_code 出去~ 怎麼會在這之前變更test的內容? 是寫錯嗎?


    學無止境

    2012年12月14日 上午 01:54
  • to 昏睡大大:

    嗯嗯,是寫錯了!

    原本以為只透過一個byte[] test來處理,

    會導致發生問題。

    才多加了一個byte[] send_ok_code,

    就忽略掉那三行test[0]~[2]吧@@"

    不過送出去前,更改test的內容,

    應該不會影響到我送send_ok_code的問題才對。


    2012年12月14日 上午 02:52
  • 量一下送出去訊號的電壓吧。

    USB to Serial Port 若是沒有配置升壓電阻,會因為 USB 本身只有 5V 造成訊號電壓不足,所以完整良好的設計套件要配上升壓電阻,我看過 2500 左右的,昇壓電阻是可以用 Jump 開關的,一般 500 以內的,都是做死的,不能變更,有些比較遜的廠商會忘了做,大部分則都會配置昇壓電阻。如果設備端對訊號電壓要求比較高,則電壓不足的設備會無法正常辨識。

    另外,雜訊問題,可以先確認電腦有接地,不懂的話,電腦要插牆孔是三孔的,接地不是自己隨便接,接地棒通常是大廈蓋好時,會打一隻以上的接地棒到岩盤,接地電阻必須小於十歐姆,經過電工法規測量過,台電才會送電,通常建築物的三孔插接地會導到接地棒,所以可以讓你電腦接地。完全正規的接地,訊號地跟電源地必須分開,不過電腦電源地跟訊號地接在一起,所以就忽略吧... 雜訊的慘況與接地後的改善可以看看這篇:

    [殘念] 電腦接地很重要


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年12月14日 下午 02:18
  • TO 心冷大大:

    謝謝大大提供的資訊,

    我的電腦有第三根的接地,根據我向大廈管理委員會詢問的答案

    是有打一隻接地棒的。

    另外,大大提到的一般500以內,沒有升壓的問題,

    經由內部同事討論的結果

    「你不能開發一隻程式,然後客戶要用你的東西,還得先額外買一個高檔的東西吧。除非是在簽審合約就配套好的,但目前的客戶是新的需求,所以客戶只會要求我隨便拿什麼來轉接,都要是可以使用的」

    目前還在研究為啥會有這種情況,

    網路上是有人說,vs2005的serialport元件有bug.....

    有研突出來再分享出來給各位大大

    2012年12月22日 上午 06:46
  • 如果 .Net Framework 的 serialport 類別有這麼致命的Bug, 早就被罵翻了, 所以我不太能茍同這個問題出在 SerialPort 類別.

    我覺得你還是換一條其它廠牌的測試一下,我用過這麼多種, 從來沒見過你說的現象. 基本上我傾向你的轉換器本身有問題.



    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年12月22日 上午 08:16
    版主
  • 2500 元左右是開發者專用的,你們單位沒研發部門嗎?開發者本身要用的東西值域最大,功能最多的,不然怎樣開發、追蹤、測試?

    至於 .Net 2.0 的 SerialPort 沒有 bug 。身為開發者應該先懷疑自己、確認自己無誤後,進行驗證,才能開始懷疑是硬體問題、編譯器問題、作業系統問題。

    套你說的邏輯,如果有 bug 的話,為啥一堆軟體都能正常執行?我自己用 .Net 就寫過一堆 232/485 的程式了,這是有鬼嗎?

    USB to Serial 全球主要用兩家晶片為主,電路圖也都可以找到建議電路圖,但不見得每家的技術跟工程師都會按照原廠建議去做,所以你不先確認是不是你手上硬體問題前,你怎樣確認無法通訊問題?你是沒辦法要求客戶一定要買哪家的設備,但客戶買地雷產品也要你解決... 你要不要改行改做電子工程師?

    一般來說,確認硬體問題最簡單的方法就是用原廠軟體測試,有很多設備是自訂通訊協定,這是最沒爭議的,找客服幹繳時,人家也會問你有沒有用原廠軟體通訊過,原廠軟體通訊無誤時,就表示電腦硬體線路到設備間都沒問題。若是沒有原廠軟體的,AccessPort 是個很方便穩定的工具,他不只監聽通訊內容,你可以直接把你要通訊的內容手動打上去進行測試。

    如果仍然無法通訊到設備,釐清是誰的問題時,最簡單是換個設備,確認你的通訊設備及線路沒問題,最常見是線路問題,接錯、雜訊、短路、電壓、電阻的問題都會發生在這。所以換個設備通常是換對訊號有燈號顯示的,如果夠熟悉,自己用 LED 燈也可以簡單偵測。

    會勸你換設備是因為有很多便宜的設備真的有地雷... 會告訴你 USB to SerialPort 有升壓電阻問題,是因為我就碰過缺升壓電組的... 我也用過升壓電阻可以透過 Jump 來調整是否啟用的,從研發角度來看,買這種東西該投資的還是得投資,不然就會變成甚麼狀況都搞不懂。我看過工作溫度最低的,商用產品 10 ~ 45 度,最高的工業產品 -40 ~ 85 度,對入門者建議先選擇工業用的大廠牌。開發部門應該用的是有燈號指示的產品,你才知道在實體線路之前的狀況,甚至中間在接上裝置前,可以透過 Repeat 之類產品來確認中間的訊號狀況。

    從你的回應是,你們完全是一摸黑,還不想花錢,那你們將來追蹤問題、協助客戶找問題時,會完全無法解決。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年12月23日 下午 04:07
  • 重看你的問題:

    1. 你有說過拿到有 COM Port 電腦上可運作,這表示程式沒問題,所以你不應該懷疑 SerialPort 類別問題。

    2. 用 USB to SerialPort 不成功,有可能是線的問題,或是推不動,你找個可外接 12 ~ 24 Vdc 變壓器的 USB to SerialPort 測看看,有些裝置驅動電壓要 7 Vdc 以上,從 PC 的 COM Port 可以輸出到 7 Vdc 以上, USB to SerialPort 在無外接電壓下,通常不行,若是這問題,要聯絡裝置商確認,看看裝置商那邊可不可以降低通訊電壓,不然就要考慮高檔的 USB to SerialPort 或是換別家的裝置了。

    若是裝置本身通訊電壓偏高,通常你一跟裝置商說你用 USB to SerialPort 連的時候,他的客服工程師就會注意到這是 FAQ 而告訴你不行。我碰過的都是一問他就會主動說要用通訊卡或是主機板上內建的,這種就要靠上面說的,可外加電壓的產品才行。

    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。


    2012年12月23日 下午 04:17
  • to Bill大大:

    我也覺得應該不會是元件bug的問題

    但我有試了三條 usb to comport,分別是500、1500、1500

    結果都行不通,

    我會再去找心冷大大說的2500元來測試,好跟客戶解說。

    to 心冷大大:

    心冷大大,或許上一篇的回答,用辭上不太好,

    先跟您說聲不好意思。

    每間公司有每間公司的運作模式,

    老闆給予限有的資源,小弟我也只能盡力去達成要求

    部門的其他同事也都一樣是這樣,

    不是不願花錢去換設備,而是有換過兩條了

    只是沒有換成您提的,專門開發用的2500元轉換器

    這點我會再向主管提出。

    電壓這方面,我會研究完試試,

    再跟您回報情況是如何。

    小弟我很虛心的請教版上的各位大大,

    看你回覆的感覺卻很氣憤,

    在此再跟您說聲不好意思。

    也希望您能再多多指教

    感激不盡

    2012年12月24日 上午 01:38
  • 看到心冷大的提點, 我突然想起一件過去發生過的案例.

    我曾經遇過一個設備是用某幾台特定電腦的內建 COM Port 才會通的 (而且我用的是原廠的測試軟體) , 用USB 轉一定不通. 這個原因我想和心冷大的說明應該是一樣的.

    既然你有好幾條, 其實你可以測試看看用兩條 USB-SerialPort 對接對傳, 如果這樣是正確的.

    那問題大概就是心冷大所說的原因了.

    至於客戶那邊, 其實這 issue 可以算在設備上, 也只能要求客戶照辦.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年12月24日 上午 04:02
    版主
  • 想太多。

    不要把老闆的責任當成自己的。

    能解決自己解決,不能解決外包吧。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年12月25日 下午 02:31
  • 你好, 我們也有利用 .net 寫軟體透過 usb to com 做 rs232 溝通的產品,

    我們也都用一些很便宜的, 也沒有溝通上的問題,

    這種 hardware 除了良率, 應該不會有什麼大問題了,

    至於 .net 的部份, 打從心裡都沒去懷疑過他的 serialport 會有問題,

    你可以先試試對接起來(記得 tx/rx 不要弄錯了), 用 terminal 軟體去測試,

    先試試資料正不正確, (注意 baudrate, data bits, stopbits, parity, handshake 等設定),

    以上部份, 試完如果 ok, 就從軟體著手, 原則上就是寫個大量傳資料, 跟收資料,

    收資料的部份, 先不要做其他的動作(protocol 處理等), 單純把資料存起來供比對, 或是直接 read 完就丟掉,

    用工具去看看資料正不正確,

    在正常環境下, 直接 com port 對傳, 跟透過 usb 轉 com port 的結果都是一樣的,

    而我的習慣, serialport 的資料處理方式, 跟用 tcp 差不多, 都是以 stream 的方式來處理,

    因為在下 read 的同時, 可能 rs232 還是有資料繼續進來,

    例如,  bytestoread 為 3, 可能你 read 2 bytes 後, bytestoread 變成大於 1 的數字,

    沒有處理好, 會變成連續丟掉幾個判定不合法的 command,

    以上是我寫這方面軟體遇到的一些狀況跟測試方式, 看對你有沒有幫助

    2012年12月26日 上午 01:37
  • 補充一下:

    我曾經負責替公司委外製作 USB to Serial 的案件,所以有一陣子特別有在看電路圖。

    現在基本上都是採購內地大量生產的工業級設備,比台灣的便宜,有燈號,可加電壓,有 Repeat ,有集線器,有各式的訊號轉換器,還有可以透過電話線路的轉換器,玩過 1km 以上的無線 Serial Port (2.4 GHz) ,還玩藍芽的 SerialPort ,大概能玩的項目都摸過了。

    經驗上來說,都是硬體會出問題,還沒碰過 .Net 自己會出問題。

    讀通訊埠的程式碼,論壇上談到爛掉了,自己搜尋吧。我習慣用 MemoryStream 暫存。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年12月26日 下午 03:11
  • 這問題我覺得  回歸到原點來重新確認

    1.利用comport軟體(AccessPort,終端機,pcomm....),直接透過電腦對設備下指令是否正常

    --->若不行檢查線材或是設備端(確認硬體正確性)

    --->線材的檢驗....換線或是將該線換台主機測試

    --->另外設備規格,有的tx rx其實表示方式不同,因為之前有遇過設備上的tx其實是請你接tx,而非認知的rx,可能要確認一下

    2.這時用您寫的程式下指令,基本上你的comport軟體應該也能接收到資訊

    --->若不行就是程式問題,找問題修正(確認軟體正確性)

    這樣分開找問題我覺得會比較快一點


    • 已編輯 dodolon 2012年12月27日 上午 10:57
    2012年12月27日 上午 10:44