化建模到Server部署全解析)
先說(shuō)結(jié)論把觸控屏仿真封裝成 App再通過(guò) COMSOL Server 推到設(shè)計(jì)端是我這幾年在顯示觸控行業(yè)做過(guò)最值當(dāng)?shù)囊淮瘟鞒谈脑臁_^(guò)去我們團(tuán)隊(duì)處理觸摸感應(yīng)層的設(shè)計(jì)評(píng)估基本依賴(lài)專(zhuān)職仿真工程師手動(dòng)建模單次出圖加分析少則半天多則一周改用 Application Builder 做出參數(shù)化觸控仿真 App 后工藝、結(jié)構(gòu)、傳感器設(shè)計(jì)幾個(gè)方向的同事直接在瀏覽器里打開(kāi)一個(gè)鏈接用平板或觸屏一體機(jī)改幾個(gè)參數(shù)幾分鐘就能看到電容差值的變化趨勢(shì)。這篇文章會(huì)把這條鏈路完整拆開(kāi)為什么這么做、模型怎么建、界面怎么搭、服務(wù)器怎么部署以及哪些地方最容易翻車(chē)。不管你是剛接觸 COMSOL還是已經(jīng)在用 Application Builder只要手里有類(lèi)似的高頻仿真評(píng)估需求應(yīng)該都能從這套方案里找到能直接抄作業(yè)的部分。1. 觸控屏設(shè)計(jì)為什么需要“仿真App化”1.1 傳統(tǒng)觸控仿真流程的痛點(diǎn)做電容觸控傳感器設(shè)計(jì)的人應(yīng)該都有同感日常需求大多長(zhǎng)這樣“把電極間距從 4.2 mm 調(diào)到 5.0 mm評(píng)估信號(hào)會(huì)變化多少”聽(tīng)起來(lái)是個(gè)小事但在傳統(tǒng)流程里這一個(gè)小問(wèn)題要走的鏈路很長(zhǎng)。需求方把參數(shù)丟給仿真工程師仿真工程師打開(kāi)原始模型先看幾何表達(dá)式里哪些地方引用了舊間距然后修改尺寸、重新生成幾何、檢查網(wǎng)格有沒(méi)有退化再求解、后處理、導(dǎo)出曲線最后寫(xiě)一頁(yè)結(jié)論。整個(gè)過(guò)程快則半天慢則一兩天而且這還沒(méi)算上排隊(duì)等待的周旋。這個(gè)模式的問(wèn)題不只是慢更深層的麻煩是專(zhuān)家資源被鎖死。一個(gè)團(tuán)隊(duì)里真正能把 COMSOL 模型調(diào)明白的通常就一兩個(gè)人所有人想評(píng)估靈敏度、做方案對(duì)比都得排隊(duì)找他們。需求方和仿真工程師還經(jīng)常“語(yǔ)言不通”需求方說(shuō)的“電極間距”到底是中心距還是邊距單位是多少是否包含橋接區(qū)域這些定義來(lái)回確認(rèn)就要花不少時(shí)間。更麻煩的是老模型被反復(fù)手工修改后很容易出現(xiàn)參數(shù)不一致、表達(dá)式寫(xiě)死、網(wǎng)格設(shè)置被上一輪任務(wù)污染之類(lèi)的隱性錯(cuò)誤等結(jié)果出來(lái)發(fā)現(xiàn)不對(duì)返工成本非常高。這些問(wèn)題本質(zhì)上都不是仿真本身難而是“模型被當(dāng)成了手工件在流通”。仿真工程師花 80% 的精力在重復(fù)勞動(dòng)上真正有價(jià)值的物理理解和方案判斷反而被壓縮。后來(lái)我意識(shí)到與其繼續(xù)優(yōu)化這張人工流水線不如把模型本身變成產(chǎn)品——用一個(gè)交互式 App 把參數(shù)的調(diào)整、計(jì)算、出圖全部自動(dòng)化讓使用者自己操作這就是整個(gè)項(xiàng)目最初的出發(fā)點(diǎn)。1.2 參數(shù)化仿真模型是App的地基App 化不是把模型隨便丟給業(yè)務(wù)人員去點(diǎn)而是要把模型里所有可能被調(diào)整的變量提煉成參數(shù)并且保證這些參數(shù)能被安全、穩(wěn)定地修改。以電容觸控傳感器為例一個(gè)最小可用的參數(shù)集合至少包括下面這些參數(shù)物理含義典型范圍/初值pitch感應(yīng)電極的周期/中心距3~6 mmelec_w電極線寬菱形圖案短軸0.8~2 mmcover_t蓋板玻璃厚度0.4~1.1 mmoca_tOCA 光學(xué)膠層厚度0.05~0.2 mmfinger_g手指與蓋板玻璃表面間距0~2 mmepsr_cover蓋板玻璃相對(duì)介電常數(shù)6.5~7.5epsr_ocaOCA 相對(duì)介電常數(shù)3.0~4.0參數(shù)化建模最核心的要求是改參數(shù)后幾何必須自動(dòng)更新不能有斷點(diǎn)。幾何建模時(shí)每一個(gè)尺寸都要引用參數(shù)表達(dá)式而不是硬編碼數(shù)字陣列周期、電極寬度、層厚度全部寫(xiě)成pitch、elec_w這種帶單位的形式網(wǎng)格和研究設(shè)置也要跟著幾何自適應(yīng)。很多人在這一步偷懶覺(jué)得“我先把這版算出來(lái)”結(jié)果后面封裝 App 時(shí)幾何一變就報(bào)錯(cuò)或者網(wǎng)格嚴(yán)重畸變最后返工的時(shí)間比一開(kāi)始好好做還多。另外要注意參數(shù)化建模并不等于把所有細(xì)節(jié)都參數(shù)化。真正進(jìn)入 App 的參數(shù)越少越好內(nèi)部結(jié)構(gòu)件、輔助域、邊界條件這些“專(zhuān)家才需要操心”的東西一律固定死在模型里。App 使用者看到的參數(shù)就是他們業(yè)務(wù)上關(guān)心的輸入其他的交給模型本身。1.3 Application Builder與COMSOL Server的分工一句話版本Application Builder 負(fù)責(zé)把模型變成“會(huì)算的界面”COMSOL Server 負(fù)責(zé)把界面變成“隨時(shí)能打開(kāi)的服務(wù)”。Application Builder 是 COMSOL Multiphysics 桌面環(huán)境里的一套開(kāi)發(fā)工具它允許你在完整模型的基礎(chǔ)上用表單編輯器拖出輸入框、按鈕、繪圖區(qū)把模型里的參數(shù)和結(jié)果映射到這些控件上。用戶(hù)打開(kāi) App 后看不到復(fù)雜的模型樹(shù)只看到你設(shè)計(jì)好的操作界面改參數(shù)、點(diǎn)按鈕、看圖流程被固定成一條很清晰的操作路徑。COMSOL Server 則是負(fù)責(zé)把編譯好的 App 作為服務(wù)發(fā)布出去。App 文件上傳到服務(wù)器后團(tuán)隊(duì)成員不用安裝完整版 COMSOL只需在瀏覽器里輸入地址就能打開(kāi)同一個(gè) App 運(yùn)行計(jì)算支持平板和觸屏筆記本這類(lèi)設(shè)備。打個(gè)比方Application Builder 是做儀器面板的車(chē)間面板上有旋鈕、表頭和指示燈COMSOL Server 是供電和布線的承包商把面板裝到配電房里讓遠(yuǎn)處的人也能伸手操作。兩者配合觸屏終端上的 App 才真正跑得起來(lái)。只裝 Application Builder 不在服務(wù)器上發(fā)布App 只能留在本機(jī)自?shī)首詷?lè)只部署服務(wù)器不把模型封裝好那服務(wù)器也只是一個(gè)遠(yuǎn)程跑仿真的空殼。2. 觸控屏仿真模型的物理與建模要點(diǎn)2.1 電容式觸控到底在算什么投影電容式觸控屏最常用的是互電容掃描方案發(fā)射電極 TX 和接收電極 RX 在交叉位置形成一個(gè)寄生耦合電容 C_m掃描芯片一路一路地給 TX 加激勵(lì)然后在 RX 端同步檢測(cè)電荷變化。手指接近屏面時(shí)手指本身的高介電常數(shù)和導(dǎo)電性會(huì)改變附近電場(chǎng)的空間分布導(dǎo)致這個(gè)交叉位置的互電容出現(xiàn)一個(gè)可觀的偏移量 ΔC觸控芯片就是靠檢測(cè) ΔC/C0 的比值來(lái)判定觸摸位置和強(qiáng)度的。所以在 COMSOL 里仿真觸控核心任務(wù)就是計(jì)算“沒(méi)有手指”和“有手指”兩種狀態(tài)下的互電容差。這在物理上就是一個(gè)靜電場(chǎng)邊值問(wèn)題電極上給定電位周?chē)橘|(zhì)是空氣、蓋板玻璃、OCA 膠層、基膜等手指可以簡(jiǎn)化成一個(gè)高介電常數(shù)的介質(zhì)塊也可以進(jìn)一步處理成接地導(dǎo)體塊采用哪種建模方式取決于你想算的信號(hào)是電容變化趨勢(shì)還是絕對(duì)值。COMSOL 里做這類(lèi)仿真建議用 AC/DC 模塊的靜電接口Electrostatics配合 Terminal 邊界條件求解完成后可以直接提取電極間的電容矩陣。有人會(huì)問(wèn)用電流接口不是更接近觸控芯片的真實(shí)激勵(lì)嗎從嚴(yán)格意義上確實(shí)如此但對(duì)于觸控感應(yīng)區(qū)域的設(shè)計(jì)評(píng)估靜電近似在絕大多數(shù)頻率范圍內(nèi)已經(jīng)足夠而且計(jì)算成本低得多更適合封裝成 App 給團(tuán)隊(duì)反復(fù)點(diǎn)擊。2.2 模型幾何與材料參數(shù)建模時(shí)不需要把整個(gè)屏幕都建出來(lái)那會(huì)讓 App 卡到?jīng)]法用。常規(guī)做法是只建一個(gè)感應(yīng)單元的對(duì)稱(chēng)周期單元用周期邊界條件或足夠大的空氣盒把邊界效應(yīng)吸收掉。以三層結(jié)構(gòu)為例底層是 RX 電極層中間是絕緣基膜和 OCA頂層是蓋板玻璃TX 電極在另一個(gè)平面上與 RX 形成交叉。具體建模時(shí)我習(xí)慣把電極簡(jiǎn)化為零厚度的理想導(dǎo)體面用 Terminal 邊界條件直接賦予電位不需要建出真實(shí)的 ITO 厚度。ITO 雖然是導(dǎo)電材料但在靜電分析里它的體電導(dǎo)率幾乎不影響電容結(jié)果真正決定電容的是電極平面布局和覆蓋介質(zhì)層。這樣的簡(jiǎn)化能讓網(wǎng)格數(shù)量降一個(gè)量級(jí)而且不會(huì)損失關(guān)鍵趨勢(shì)信息。材料參數(shù)方面蓋板玻璃的相對(duì)介電常數(shù)常見(jiàn)在 6.5~7.5 之間化學(xué)強(qiáng)化玻璃如大猩猩玻璃一般取 7 左右OCA 光學(xué)膠在 3.0~4.0 之間空氣為 1。手指的簡(jiǎn)化建模可以取一個(gè)約 8×8 mm 的規(guī)則塊體平均介電常數(shù)取 50~80也可以直接把手指面設(shè)為接地邊界。兩種方式我都試過(guò)趨勢(shì)一致但絕對(duì)值略有差異如果是看方案對(duì)比用介質(zhì)塊更穩(wěn)妥。2.3 激勵(lì)設(shè)置、網(wǎng)格與求解實(shí)際操作步驟我按項(xiàng)目順序列一下方便對(duì)照在靜電接口里給 TX 電極設(shè)置 Terminal 1電壓為 1 V給 RX 電極設(shè)置 Terminal 2初始電位移或接地狀態(tài)按模型需要設(shè)定。周?chē)諝庥蚪ǖ诫姌O尺寸的 3~5 倍以上邊界默認(rèn)零電荷即可如果想更精確可以再加無(wú)限元域。研究類(lèi)型選穩(wěn)態(tài)Stationary觸控屏仿真不需要頻率掃描除非你在做柔性屏變形或電磁干擾等其他物理場(chǎng)耦合。網(wǎng)格劃分優(yōu)先用掃掠網(wǎng)格加邊界層電極的邊緣容易產(chǎn)生電場(chǎng)集中邊界層能明顯改善表面電場(chǎng)分布圖的精度。求解完成后通過(guò)“全局矩陣求值”導(dǎo)出 Terminal 電壓與電荷的關(guān)系直接得到電容矩陣手指狀態(tài)與無(wú)手指狀態(tài)分別求解一次兩者相減得到 ΔC。后處理里最能說(shuō)明問(wèn)題的量是 ΔC/C0。C0 是無(wú)手指時(shí)的互電容ΔC 是手指接近后的變化量觸控芯片的靈敏度指標(biāo)跟這個(gè)比值直接相關(guān)。設(shè)計(jì)人員看表格或者看一條趨勢(shì)曲線就夠了三維電場(chǎng)圖反而是次要的App 里我一般會(huì)放一個(gè)二維切片圖方便他們直觀看到手指對(duì)電場(chǎng)的影響區(qū)域。網(wǎng)格無(wú)關(guān)性驗(yàn)證這一步不能省。我踩過(guò)的坑是電極尖角處容易產(chǎn)生電場(chǎng)奇異點(diǎn)網(wǎng)格加密到一定程度后局部場(chǎng)峰值還在緩慢變化但電容積分值其實(shí)早就收斂了。所以 App 內(nèi)部我用的是固定網(wǎng)格不開(kāi)放給使用者調(diào)整前期花半天時(shí)間驗(yàn)證一套“算得準(zhǔn)又算得快”的網(wǎng)格后面所有使用者都會(huì)受益。3. 用Application Builder封裝可觸控操作的界面3.1 從模型到App的轉(zhuǎn)換流程在一個(gè)調(diào)好的參數(shù)化模型基礎(chǔ)上進(jìn)入 Application Builder整個(gè)封裝過(guò)程大概分五步。第一步在 App 編輯環(huán)境的設(shè)置窗口里指定輸入和輸出。輸入一般就選前面說(shuō)的pitch、elec_w、cover_t、oca_t這些全局參數(shù)輸出選擇要展示的結(jié)果比如 ΔC/C0 數(shù)值、電場(chǎng)繪圖組、電容隨參數(shù)變化的表格。第二步新建表單開(kāi)始往畫(huà)布上拖控件。數(shù)值輸入框、按鈕、繪圖窗格、狀態(tài)標(biāo)簽都是最常用的表單布局盡量向移動(dòng)端靠攏留足空白別把界面塞得太滿(mǎn)。第三步把按鈕事件和方法綁定起來(lái)。默認(rèn)的 App 已經(jīng)有“計(jì)算”邏輯但往往不會(huì)完全符合你的需求需要自己寫(xiě)方法代碼控制“改參數(shù)、跑研究、刷新結(jié)果”的順序。第四步在桌面端直接點(diǎn)“運(yùn)行”做本地測(cè)試把流程跑通確認(rèn)每個(gè)輸入框改完之后的輸出是對(duì)的。第五步將包含 App 的 .mph 文件保存并上傳到 COMSOL Server。Outputs 定義得越干凈后面界面就越清爽。我第一次做的時(shí)候把十幾個(gè)結(jié)果數(shù)值和四個(gè)繪圖組全部塞進(jìn)去結(jié)果用戶(hù)打開(kāi) App 后面對(duì)一大片圖不知道看哪個(gè)。后來(lái)收斂成兩個(gè)核心數(shù)值指標(biāo)加一張趨勢(shì)圖反而沒(méi)有人再問(wèn)“這個(gè)圖是什么意思”了。3.2 面向觸控操作的界面設(shè)計(jì)這個(gè)項(xiàng)目標(biāo)題里特意強(qiáng)調(diào) Touchscreen Design其實(shí)有兩層意思。一層是產(chǎn)品對(duì)象是觸控屏另一層是 App 本身也在觸屏設(shè)備上被使用所以界面設(shè)計(jì)必須為觸控服務(wù)。這一點(diǎn)在實(shí)際使用時(shí)遠(yuǎn)比想象中重要。我在 iPad 上測(cè)試第一版 App 時(shí)發(fā)現(xiàn)從電腦到觸屏不是簡(jiǎn)單的等比縮放很多交互邏輯需要推翻重來(lái)。比如傳統(tǒng)桌面上用戶(hù)習(xí)慣用鍵盤(pán)輸入精確數(shù)值但在平板上彈出數(shù)字鍵盤(pán)會(huì)擋住半個(gè)屏幕操作體驗(yàn)很差。所以主參數(shù)我建議優(yōu)先用數(shù)值輸入框配合上下步進(jìn)按鈕如果版本支持滑塊控件就更好手指一拖就能連續(xù)調(diào)參不需要精確打字。核心計(jì)算按鈕要放在界面底部或右下角這是拇指最容易觸及的區(qū)域按鈕目標(biāo)尺寸至少做到 44×44 pt太小在車(chē)間里戴著手套根本點(diǎn)不中。另外觸屏沒(méi)有“懸停”狀態(tài)凡是依賴(lài)鼠標(biāo)懸停才顯示的菜單、提示、隱藏按鈕在觸屏上全部失效。界面結(jié)構(gòu)要盡量扁平用選項(xiàng)卡把“基本參數(shù)”“材料參數(shù)”“結(jié)果查看”分組讓使用者在有限的頁(yè)面里快速切換避免在一個(gè)超長(zhǎng)頁(yè)面里上下翻找。字號(hào)也要加大觸屏設(shè)備的使用距離通常比電腦遠(yuǎn)16 px 以下的小字在廠房亮度環(huán)境下很難看清。分享一個(gè)具體例子我的第一版 App 把七個(gè)參數(shù)全部放在一頁(yè)流式布局里在 iPad 上往下翻三屏才能看到運(yùn)行按鈕實(shí)際用起來(lái)大家怨聲載道。后來(lái)改成三個(gè) Tab 頁(yè)加底部固定按鈕操作路徑縮短一大截培訓(xùn)成本也幾乎降為零。觸控界面設(shè)計(jì)的核心原則就是讓用戶(hù)少想、少翻、少輸入。3.3 關(guān)鍵方法與事件邏輯Application Builder 里的事件代碼是 Java 風(fēng)格的 API核心邏輯其實(shí)就三件事把表單輸入寫(xiě)回模型參數(shù)、跑研究、刷新結(jié)果。給一段簡(jiǎn)單示意代碼具體對(duì)象名和 API 請(qǐng)以你實(shí)際版本和表單命名為準(zhǔn)// 按鈕點(diǎn)擊后的核心方法邏輯 var f form(input); model.param().set(pitch, f.editField(pitchField).getString()); model.param().set(elec_w, f.editField(widthField).getString()); model.study(std1).run(); model.result().numerical(capTable).run(); form(output).label(status).text(計(jì)算完成);初學(xué)者最常見(jiàn)的錯(cuò)誤是表單里的字段名和模型參數(shù)名對(duì)不上或者寫(xiě)錯(cuò)單位。model.param().set()的第二個(gè)參數(shù)是字符串表達(dá)式必須帶單位比如5[mm]如果只傳5COMSOL 會(huì)認(rèn)為它是一個(gè)無(wú)量綱數(shù)在某些幾何約束里直接導(dǎo)致幾何無(wú)效。方法代碼里一定要加輸入校驗(yàn)。cover_t 不能為負(fù)數(shù)pitch 必須大于電極寬度f(wàn)inger_g 不能超出合理范圍。這些校驗(yàn)可以放在按鈕事件開(kāi)頭也可以直接限制輸入框的取值范圍。我在早期版本里沒(méi)有做校驗(yàn)用戶(hù)快速拖動(dòng)參數(shù)時(shí)偶爾會(huì)觸發(fā)幾何報(bào)錯(cuò)體驗(yàn)很差。加上前置校驗(yàn)之后App 在觸屏上的“非預(yù)期崩潰”基本消失。這里還有一個(gè)小技巧開(kāi)發(fā)階段在方法里多加幾個(gè)日志輸出把參數(shù)值、求解狀態(tài)打印出來(lái)方便定位問(wèn)題。我曾經(jīng)花了整整一個(gè)下午排查“參數(shù)改了結(jié)果沒(méi)變”最后一查是方法里只改了參數(shù)忘了調(diào)用 study 的 run 方法。這類(lèi)低級(jí)錯(cuò)誤在日志面前一眼就能看穿。4. 部署到COMSOL Server并讓團(tuán)隊(duì)用起來(lái)4.1 服務(wù)器部署與配置App 封裝好之后最關(guān)鍵的一步是部署。COMSOL Server 的安裝本身不復(fù)雜但有幾個(gè)要點(diǎn)值得單獨(dú)講。第一COMSOL Server 需要單獨(dú)的許可證不能用普通 COMSOL Desktop 桌面端的許可證直接當(dāng)服務(wù)器用。很多人第一次做方案預(yù)算時(shí)忽略了這一條到上線前才發(fā)現(xiàn)缺授權(quán)會(huì)非常被動(dòng)。第二安裝完成后用comsol server命令啟動(dòng)或者注冊(cè)成系統(tǒng)服務(wù)。Windows 環(huán)境下可以直接用服務(wù)管理器Linux 環(huán)境我建議用 systemd 托管設(shè)置開(kāi)機(jī)自啟和異常重啟。默認(rèn)端口是 2036瀏覽器訪問(wèn)地址一般就是http://服務(wù)器IP:2036/web記得在防火墻、安全組里放行這個(gè)端口。第三生產(chǎn)環(huán)境一定要上 HTTPS。直接用明文 HTTP 跑在內(nèi)網(wǎng)可能問(wèn)題不大但只要 App 可能被外網(wǎng)訪問(wèn)就必須用 Nginx 或 Apache 做反向代理終結(jié) TLS 證書(shū)。這個(gè)配置不屬于 COMSOL 特有但很多工程師會(huì)忽略結(jié)果賬號(hào)密碼在網(wǎng)絡(luò)上裸奔。第四在 COMSOL Server 的管理頁(yè)面創(chuàng)建管理員賬號(hào)上傳 .mph 文件設(shè)置訪問(wèn)權(quán)限和并發(fā)會(huì)話數(shù)。這里有個(gè)容易混淆的概念每個(gè)用戶(hù)打開(kāi)的 App 會(huì)話都會(huì)占用一個(gè)并發(fā)許可證名額所以“用戶(hù)數(shù)多”不等于“許可證夠用”你得根據(jù)實(shí)際并發(fā)峰值來(lái)規(guī)劃授權(quán)規(guī)模。配置項(xiàng)常用值說(shuō)明通信端口2036COMSOL Server 服務(wù)監(jiān)聽(tīng)端口Web 訪問(wèn)80/443經(jīng)反向代理瀏覽器訪問(wèn)入口并發(fā)會(huì)話視許可證而定每個(gè)活動(dòng)會(huì)話占一個(gè)許可會(huì)話超時(shí)30~60 分鐘自動(dòng)回收空閑會(huì)話用戶(hù)賬號(hào)按角色劃分管理員/普通用戶(hù)/只讀用戶(hù)補(bǔ)充一個(gè) Linux 部署的坑用 systemd 啟動(dòng)時(shí)環(huán)境變量經(jīng)常不對(duì)導(dǎo)致 COMSOL Server 找不到許可證文件。我最后是在 ExecStart 里顯式加了-f /path/to/license.lic參數(shù)并且用獨(dú)立的運(yùn)行賬號(hào)啟動(dòng)才徹底解決這個(gè)問(wèn)題。如果你在 Windows 上部署建議重點(diǎn)關(guān)注服務(wù)賬號(hào)的權(quán)限不要用普通臨時(shí)賬號(hào)跑生產(chǎn)服務(wù)。4.2 客戶(hù)端訪問(wèn)體驗(yàn)平板與手機(jī)部署完成后使用者在瀏覽器里輸入地址登錄后就能看到可用的 App 列表點(diǎn)開(kāi)即用。不用安裝任何客戶(hù)端這是 Web 方案最大的優(yōu)勢(shì)也是它能覆蓋平板、觸屏一體機(jī)這類(lèi)設(shè)備的原因。但 Web 端在觸屏體驗(yàn)上也有一些限制。3D 繪圖在瀏覽器里的交互雖然支持觸控旋轉(zhuǎn)和縮放但模型一復(fù)雜就會(huì)明顯卡頓。所以封裝 App 用于 Web 端時(shí)我盡量在界面里放二維切片圖、曲線圖和數(shù)值表格三維視圖只作為可選的輔助參考并且降低渲染分辨率。實(shí)測(cè)下來(lái)2D 圖在 iPad 上非常流暢3D 大模型就力不從心了。表單控件在瀏覽器里對(duì)觸摸事件支持得很好滑塊能直接拖動(dòng)按鈕點(diǎn)擊反應(yīng)正常。需要注意一個(gè)細(xì)節(jié)瀏覽器頁(yè)面縮放和觸屏手勢(shì)可能會(huì)跟 3D 視圖的旋轉(zhuǎn)手勢(shì)沖突導(dǎo)致拖動(dòng)畫(huà)面時(shí)頁(yè)面也跟著滾動(dòng)。解決辦法是固定 App 頁(yè)面寬度盡可能采用平板橫屏使用并引導(dǎo)用戶(hù)把頁(yè)面“添加到主屏幕”后全屏啟動(dòng)減少瀏覽器 UI 的干擾。如果你有重度用戶(hù)比如需要頻繁做參數(shù)掃描的工程師我建議他們?cè)谄桨寤蛴|屏筆記本上安裝 COMSOL Client。這是 COMSOL 官方的桌面客戶(hù)端連接服務(wù)器運(yùn)行 App 比瀏覽器更流暢繪圖交互也更完整。但維護(hù)成本比 Web 高一些所以我的做法是大多數(shù)普通用戶(hù)走 Web核心工程師用 Client各取所需。4.3 團(tuán)隊(duì)交付與管理實(shí)戰(zhàn)App 上線只是開(kāi)始真正讓團(tuán)隊(duì)用得順、不出亂子管理才是關(guān)鍵。我總結(jié)了幾條實(shí)戰(zhàn)經(jīng)驗(yàn)。權(quán)限要按角色分。設(shè)計(jì)工程師只需要能打開(kāi) App、改參數(shù)、看結(jié)果不需要看到模型樹(shù)和內(nèi)部物理設(shè)置管理員才需要維護(hù) App 文件、查看日志、管理賬號(hào)。COMSOL Server 里可以給不同用戶(hù)設(shè)置不同權(quán)限這一定要用起來(lái)否則有人在界面上誤改了內(nèi)部幾何表達(dá)式整個(gè) App 就廢了。會(huì)話要定期回收。設(shè)計(jì)工程師經(jīng)常開(kāi)著 App 去開(kāi)會(huì)回來(lái)之后會(huì)話還占著許可證時(shí)間一長(zhǎng)并發(fā)名額就被占滿(mǎn)了。管理員可以在管理界面設(shè)置會(huì)話空閑超時(shí)比如 30 分鐘自動(dòng)回收能明顯緩解“明明沒(méi)有人用許可卻滿(mǎn)了”的尷尬局面。日志一定要開(kāi)。COMSOL Server 會(huì)記錄誰(shuí)在什么時(shí)候運(yùn)行了哪個(gè) App、運(yùn)行了多久這些日志在做項(xiàng)目追溯和分析報(bào)告時(shí)非常有用。我們有一次項(xiàng)目評(píng)審要復(fù)現(xiàn)某個(gè)參數(shù)組合直接翻日志就找到了當(dāng)時(shí)的輸入省了很多溝通成本。這里再提一個(gè)我在第一個(gè) App 上線時(shí)踩過(guò)的坑當(dāng)時(shí)我把模型樹(shù)完整暴露給了用戶(hù)結(jié)果有同事好奇去改了內(nèi)部的幾何表達(dá)式后面所有計(jì)算結(jié)果都變得很奇怪。重新封裝時(shí)我把所有內(nèi)部節(jié)點(diǎn)設(shè)為不可見(jiàn)只保留表單上暴露的那幾個(gè)輸入問(wèn)題再也沒(méi)出現(xiàn)過(guò)。封裝 App 的核心原則就是用戶(hù)能看到的只會(huì)是他們應(yīng)該操作的東西。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 App在瀏覽器里打不開(kāi)這個(gè)問(wèn)題是上線初期出現(xiàn)頻率最高的。先別急著懷疑軟件壞了按順序排查服務(wù)器端口是否連通。直接 telnet 服務(wù)器 IP 2036或者 curlhttp://服務(wù)器IP:2036/web看有沒(méi)有響應(yīng)。防火墻和安全組是否放行。很多企業(yè)內(nèi)網(wǎng)的機(jī)器默認(rèn)不開(kāi)端口這一步能解決一半以上的“打不開(kāi)”問(wèn)題。瀏覽器是否兼容。COMSOL Server Web 端對(duì)主流瀏覽器都支持但版本太舊的瀏覽器會(huì)出現(xiàn)白屏建議用最新版 Chrome、Edge、Safari 或 Firefox。會(huì)話是否過(guò)期。長(zhǎng)時(shí)間未操作會(huì)觸發(fā)超時(shí)回收刷新頁(yè)面重新登錄即可。最常見(jiàn)的原因是內(nèi)網(wǎng)到服務(wù)器的端口沒(méi)放行以及用戶(hù)走了代理導(dǎo)致無(wú)法訪問(wèn)內(nèi)網(wǎng)地址在日志里一查就能定位。建議把這些排查步驟整理成一頁(yè)給用戶(hù)減少管理員被重復(fù)問(wèn)詢(xún)的次數(shù)。5.2 觸屏上操作卡頓卡頓的原因通常有三個(gè)。第一模型網(wǎng)格太密單次求解就要好幾分鐘這在觸屏上會(huì)顯得非常笨重。對(duì)策是給 App 單獨(dú)做一套“交付檔”網(wǎng)格只需要滿(mǎn)足設(shè)計(jì)評(píng)估精度不需要追求論文級(jí)精度。第二3D 繪圖在 Web 端渲染消耗大對(duì)策是在 App 里盡量用 2D 圖和表格。第三服務(wù)器計(jì)算資源不足多個(gè)用戶(hù)同時(shí)跑參數(shù)掃描時(shí) CPU 被占滿(mǎn)。對(duì)策是限制并發(fā)數(shù)、給服務(wù)器配更多核或者用集群做分布式計(jì)算。這里再說(shuō)個(gè)實(shí)話COMSOL Server 的計(jì)算是實(shí)打?qū)嵪?CPU 的App 再方便也逃不過(guò)物理規(guī)律。我為了把 App 跑得絲滑特意用對(duì)稱(chēng)單元把 3D 模型縮減成 2.5D 等效再把網(wǎng)格從 30 萬(wàn)單元壓到 8 萬(wàn)結(jié)果精度損失不到 3%但求解時(shí)間從 4 分鐘降到 40 秒。對(duì)交互式 App 來(lái)說(shuō)這個(gè)取舍非常值得。5.3 參數(shù)改了結(jié)果