2018年9月24日 星期一

HMI 回憶錄 (4)

硬體篇(續)


這應該是硬體篇最後一篇,畢竟不是硬體專業,再寫下去就自曝其短,哈哈哈...

下圖是系統方塊圖,很多地方漏掉(憑印象隨便畫的,大家別介意),比方電源,LCD...說真的你現在上淘寶隨便買張實驗板就可以拿到完整的電路圖(對岸叫原理圖),連 Wi-Fi、ZigBee @#^&^...全都給你,差別只在於一般實驗板沒有做隔離(isolation),電源輸入不是 DC 24V。

早年 SoC 沒有內建 Ethernet MAC 時,還得外掛一顆 10M Ethernet SoC(為何不掛 100M?因為沒必要), 當年參考資料很少,印象中只有一本 Embedded Ethernet and Internet Complete,筆者當年功力不足,看了還是覺得無法接不上地氣,不像現在門檻低多了,EN28J60 居然有中文版 datasheet,想起筆者當年在 IC design 短暫打工時被逼著用爛英文寫 Application Note 給兩岸 RD 看(很好笑吧),老闆還找了曾經擔任過台gg的法務來修改我們的英文(被改的滿江紅,噗)~


據說台灣第一台 HMI 的 CPU 用的是 8051,抱歉筆者太晚出生沒見過,筆者進入這個行業時剛好 x86 系列準備停產,HMI editor 還是 DOS 版本。

這一系列很受歡迎,當時聽說有客人怕以後買不到先大量採購擺著,據資深 HW RD 表示,不少客人認為這一系列比 ARM 版本 HMI 穩定。

這顆 x86 不是什麼 8086、80286、80386,而是 80186。工控界有多愛這顆?當 Intel, AMD 停產後,據說台灣某幾間工控大廠找 IC design house 開 IC(至於怎麼拿到 x86 授權不得而知),於是這顆分身又繼續活了好多年,到現在還有人用,像x格就在直接在網頁上寫他的 PAC CPU 是 80186

這顆可以用 Turbo/Borland C++ 開發軟體,2006 年 Turbo C++ 變成免費軟體更是如虎添翼。不像 ARM  如果不想花錢買 MDK(早期是 RealView,授權費至少 30萬!),就要裝 VirtualBox/VMware + toolchain,搞不好還要寫 makefile(有個偷懶的方法是用 QtCreator),更別說 10 幾年前 VirtualBox/VMware 也沒那麼成熟,相形之下雖然 Turbo C++ 只有 DOS 界面但起碼有 IDE 親民多了。

讀者看到這裡應該會疑惑:「為何 x86 會比 ARM 穩定?」,但現在 ARM SoC 遍地皆是,難道 1x 年前 ARM 設計功力比較爛?

筆者猜想以下幾點原因:
  • 1x 年前 ARM C compiler 沒有發展多年的 x86 C compiler 穩定(事實上當時筆者使用的 ARM SDT(比 RealView 更老的編譯器)碰到一些寫的不好的 code 還會編譯到當機)
  • 1x 年前精通 ARM 的人還沒有現在這麼多(未來搞不好要換 RISC-V 了科科)
  • interrupt latency: 早期 ARM 原廠設計無論 IRQ, FIQ 都只有一個進入點,於是進入 ISR 後要透過暫存器來判斷發生哪種中斷,於是不少廠商改變原廠設計自己加入 interrupt vector table,加入各種 interrupt priority...變成各自為政,如果讀者跟筆者一樣有在玩 STM32,就會知道 Cortex-M 系列 ARM 對 interrupt 大幅修改,不但強調 Low Interrupt Latency(而且是常數時間),甚至連 nesting ISR 怎麼寫也不用學了(這個禁斷密技職場上還真沒看過有人用過)。
  • 80186 沒有 ARM9 之後普遍都有的 I/D cache,cache 會造成程式變成 Non-deterministic(ARM 特別強調 Cortex-M is deterministic)
  • 未知的未知

80186 架構,取自 wiki 百科:

現在用什麼 CPU 恐怕已經不是重點,現在台灣工控廠不是用 Freescale 就是用 TI,如果你嫌貴也可以考慮台廠,比方新唐這顆 NUC972DF62Y  封裝 64MB DDRAM,有 11 組 UART,價格才 5USD 左右(淘寶上就查得到),支援 Linux buildroot...據說當年某工控廠為了多一點 UART 花了 3000 萬請 IC design house 開 IC,時光飛逝...

當年老闆請一位台大畢業的高材生擔任筆者主管,據他表示 HMI 的架構跟 PDA(還有多少人記得?)一模一樣,但 PDA 早已從歷史消失,而 HMI 到現在還有人靠他吃飯。印象中這位高材生只做了半年就跳槽去x海,他離職前說雖然這邊給他的月薪很高,但他說他這種在一線 3C 大廠打滾過的人看的是股票,月薪只是拿來吃飯交房租,後來再聯絡時他已經賺了兩棟房子,你說筆者會不會很羨慕?從當年筆者拋下優渥的工作至新竹跟 ChamberPlus 老大學習這件事你就知道筆者不正常了,哈哈哈...

有兩件跟硬體打交道的往事值得一提。第一件是舊架構用 touch panel 外接 ADC 讀取座標點很穩定正常,換成新 SoC 改用 SoC 內建 touch panel controller 就出問題了,座標偶爾會飄到意想不到的地方。

(樣圖取自台達 DOPSoft)

這在工控上是嚴重工安問題,印象中最後的解法是取平均(印象中是取 10 次還是 4 次),也就是新取得的 x,y 值如果跟之前的平均差異太大就予以丟棄,但是這會讓觸控變慢,使用者體驗變差。後來經由 ChamberPlus 前輩的說明,才知道這種作法是一種 Low Pass Filter,在統計學的時間數列分析裡有類似的概念,稱為動平均(Moving Average)

當初的解法也許應該換成 ChamberPlus 在文章中提到的一階濾波器(First Order Lag Filter,時間數列分析裡有一模一樣的公式,稱為 Basic exponential smoothing)。但更重要的是應該要找出 root cause,到底這是 SoC bug 還是電路設計問題?搞不好把 datasheet 好好讀一遍,電路拿出來檢查一遍就知道問題在哪了。筆者也想到前主管說找 RD 找剛畢業的就好了,剛畢業的 RD 一眼就能看出問題在哪嗎?

還有一個就是 RS485 Tx/Rx 切換到底要用軟體還是硬體來做?當時 HW RD 堅持不肯換成筆者推薦的 MAX13487(Half-Duplex RS-485/RS-422-Compatible Transceiver with AutoDirection Control),因為這顆 IC 當時有點貴,HW RD 認為如果一年賣 10 萬台,用普通 RS485 Transceiver 可以省下很多錢。

從成本考量的觀點沒錯,不過到筆者離職時一年也沒賣到 5 萬台,而且 MAX13487 價錢一直在跌(後來筆者發現高檔機種偷偷在用 XD,而且淘寶上一堆 RS232 轉 RS485 都用這顆)。重點是用軟體切換的版本問題一直沒解乾淨,CPU loading 居高不下。首先 Linux 不像早期寫 firmware 隨便讓你填暫存器,再來是碰到一些高 baudrate 的 PLC 如西門子 S7-300/ET-200S,baudrate 高達 187.5K - 1Mbps(Profibus 到達 12Mbps),你要軟體很精準的用 GPIO 控制 Tx/Rx 非常困難(筆者曾經看過歐美大廠 source code 用了非常多 hardware timer 調精準度),就算你有本事拿著 LA/Scope 調出來,難保下一次軟體改版時特性又跑掉,然後你又要重調,當然這樣不怕沒工作就是了(養匪自重?)。不過從趨勢來看,RS485 Tx/Rx 切換可以說很少看到有人用軟體作了,即使後來 Linux 刻意支援 RS485,你會發現他的參數提供了 RTS delay,表示這問題不好解啊!(強者我同事認原因是因為現代 SoC 都有提供 UART FIFO,大家可以想想為什麼)

硬體的東西就談到這裡,下一篇會談 HMI 核心 - 軟體!

2018/9/25 補充

前面 RS485 提到西門子 PLC,當時好不容易擠出來 protocol driver,本來有機會去客人那邊換掉競爭對手的產品,客人說你們不用來了,因為原本通訊有問題,現在沒事了。這件事來來回回發生好幾次,撇開客人故意整人,各位有看出問題在哪嗎?

2 則留言:

  1. "從當年筆者拋下優渥的工作至新竹跟 ChamberPlus 老大學習這件事你就知道筆者不正常了"

    不好意思,誤了你的青春。不過,你後來也放棄工控領域而轉頭豬屎屋啊。

    可見這一個工控領域真的讓你傷透了心啊。其實,你也不用太難過啦。

    凡走過必留下痕跡的。只不過,要不回的是時間而已。

    至於這篇文章中,後段有提到關於 UART 再到 RS485 這一點硬體應用上。

    我在最近這一年中,因工作關係有用到 CAN Bus ,真的覺得他還蠻好用的。

    你之所以提到最後終究都想用一些IC Desgin 方式來提升硬體效能。

    其實CAN 本身就是架構在一定的硬體通訊協定的標準硬體架構。本身也含有一些糾錯

    提示能力。透過簡單的暫存器的讀取與設定就可以完成資料交換與傳輸功能。

    而且也隨著現代 32 bit MCU 大量推廣,已經有許多 MCU 也都提供CAN bus 介面了

    所以,的確硬體的東西不用太過於擔心成本或應用上的問題。

    需要擔心的是系統平台的建立與整合。這一點還是得回到軟體工作上了。

    個人小小意見,若有不妥之處,也請指教與糾正。

    回覆刪除
    回覆
    1. 您言重了,那是小弟的個人選擇...如果沒去跟您學習眼界大概也僅止於此了

      而且就算優渥,小弟當年認識的同事幾乎全鳥獸散,甚至有人差一點就可以退休也無法如願,就像您說的,沒有一間公司可以讓您永保安康

      其實最大的感想是很多東西是時機財,過了就過了,過了就不太會有你的機會跟位子了,寫這些東西就是放下他~

      至於重回豬屎屋,完全是意外,混口飯吃而已,沒太多想法,有人說華人老男人的心態是「可有無也可」哈哈哈

      您舉了CAN bus,其實就算是Profibus,雖然他的電氣訊號還是RS485,不過就小弟看過的實際產品上還是外掛了一顆專門處理token的IC,大廠尚且如此,小廠硬要蠻幹,台灣早沒了那個時空背景了,也沒幾個客人會為了省點錢冒這種風險,不值得

      刪除