Haskellメモ というか,High Sierra と FTDI USB Serial メモ

以前からぼちぼち開発しているRoverMiniコンピュータデータ取扱用のプログラム,ので本日はその原因究明と対策実施。

現象

  • macOS X を High Sierra にしたら,FTDIのUSBシリアル変換機がマック上ではttyデバイスとして認識されなくなった。
  • 同じハードで仮想マシン上のWindows10では同変換器を検出し,正常にECUと通信できるので,マック上のドライバの問題と想定。
  • メーカー(FTDI社)の最新ドライバなどをインストールしてみたが,状況は変わらなかった。
  • High Sierra ではセキュリティ強化のため,場合によっては「システム環境設定」のセキュリティとプライバシー設定で,明示的に権限許可を与えないと動作しない機能拡張があるが,現時点では許可催促の表示は出ていない(ただし,当該催促は最初にその機能拡張が動作しようとしてから一定の時間以内にのみ表示され,その後は消えてしまうとのことなので,OSアップデート後にケーブルを初めて挿入した際,これを見逃した可能性はある)。

原因探索

ネットで検索した所,以下のことがわかり,ドライバが複数あって,衝突して不具合となっている可能性があるものと思われた。

  • Appleは,しばらく前(少なくとも Marverics )から,自社のFTDIチップ用ドライバを mac OS に含めて提供している。
  • 幾つかのサイトでは,FTDI社のドライバとApple社のドライバの切り替えを行って問題が解決したことを報告している。(例1例2例3例4
  • 両ドライバとも,kext形式で提供されている。
  • kextとは,加除可能なOS機能追加モジュールであり,sudo kextstatで現在使われているモジュールの確認ができる他,sudo kextload xx.kext でモジュールを追加することができる。
  • 当該ハードには,OSバージョンアップ前からFTDI社のドライバが入れてあり,機能していたが,こうした場合,High Sierraのインストールでは,(クリーンインストールであっても?)サードパーティー提供のドライバが新たな権限許可を与えずとも動作するようになっている模様。

対策

ドライバを一つにする。Apple社提供のものでまずは実験してみて,その上で,FTDI社のものを実験してみるかを判断することにした。実際の作業としては,以下の通り。

  • 存在しているドライバの確認。→/System/Library/Extentions にAppleUSBFTDI.kext 2017/08/25 14:20 6.0.0 がある。また,Library/Extentions に FTDI社のドライバ D2xxHelper.kext 2015/11/09 2.0.0 があった。
  • kextstat | grep FTDI で動作している機能拡張を確認。今回の場合はなかった(両方共読み込み失敗の様子)。
  • FTDI社のドライバを削除の上,マックを再起動。
  • 手動でAppleのドライバを読み込み(cd /System/Library/Extentions  -> sudo kextload AppleUSBFTDI.kext)
  • kextstat で機能拡張が読み込まれているかを確認。この時点では読み込まれていない。
  • ケーブルを接続。kextstatで状況確認→ドライバが読み込まれている。
  • /dev/ を確認。無事,認識され,/dev/tty.usbserial-DJ0… として表示された。

まとめ

  • 今回のトラブルの原因は複数の機能拡張(ドライバ)を設置したことによる競合。
  • 純正とメーカー製の二種類のドライバで機能・性能が違いそうなので,今後,機能・性能で不審な点があった場合,ドライバを変えてみるという策をとってみる必要がある。

以上

 

Haskell メモ MyECU

Haskell の習作として Rover Mini の ECU (MEMS)モニタソフトを作りかけている。以下はそのために試行錯誤した際のメモ。順次追記予定。

  1. 16進数表記の文字コードを入力し,文字を得る。
    
     do
       charcode <- readLn :: IO Int
       let command = chr charcode
     

    ECUコマンド発行用。ECUコマンドは基本的に1バイト文字。符号なし1バイト整数を意味する Word8 をこの時点から使おうかと思ったが,chr 関数にWord8を引数とさせる方法を調べるのが面倒だった(多分,こちらの記事が役に立つ。あとで調べる。)ので,とりあえず Int で入力させることを決め打ちにしてこのようなコードに。コンパイラオプション({-# LANGUAGE OverloadedStrings #-}ghc -XOverloadedStrings )を活用する方法を使わなかったのは,単に使うオプション類をできるだけ少なくしたいというコーディングスタイルの趣味の問題。

  2. macOS 機または Raspberry Pi での動作を前提とし,USBシリアル変換ケーブル経由のデータのやりとりをデバイスファイル経由で行う。
    
    result 

    ByteString 内の hPut や hPutNoBuffring では,文字を書き込んでも制御が戻ってこない。下層の Unix システムコールを Haskell で使う Posix.IO の wirteFd あたりを使う必要があるか。Haskell の問題というよりは Unix の使い方の知識の問題。
    【2017.05.30 追記】結局,serialPortモジュールを使うことで解決。初期化やデータのやりとりができるようになった。protocol.c では初期化コマンド送出の途中に ping を入れているので,この仕組も取り入れた。

  3. コンソールで入力した16進の文字コードをECU側に発行し,その反応を,時刻付きでコンソールに表示する。
  4. コンソールに表示した時刻と反応のセットを,第二引数で指定したファイルに書き込む。
  5. シリアル通信が途切れたときのための例外処理の追加。

Miniの現状

ECUにモニターをつなげてセンサーデータなどを見られるようにしたうちの1992年式 Rover Mini Cooper 1.3i , かかりつけの修理工場さんにいろいろ修理や改造をしてもらっている。

  • スロットルポテンションメータ,O2センサの交換
    ECUからのデータで,たびたびエラーが出ていたので,交換。ポテンションメータは既に交換してあり,その際は出てくる値はおかしくないとのことだったのだが,ECUのデータをエンジニアにお見せして,値がおかしいことを納得してもらい,交換していただいた。交換時,モニターの値を確認し,正常状態であることを互いに確認。
  • 配線(ハーネス))の被覆交換。
    アイドリング時,突然回転数が落ち,甚だしきはエンジンが止まるという状態がここ数年でていたが,ECUデータで,電圧降下があった一方で,電装以外の機関故障が見当たらないとのことだったため,漏電を疑い,点検するということに。この年式は,配線ケーブルがECUに入る際,かなり急なカーブがあったり,サブフレームリブ?に開いている穴を通っているのだが,今回は後者の穴のところで結構,被覆が溶けていたので,漏電箇所と思われる。当該箇所を切り落として全体被覆を再度巻き,元の位置に。まだ,エンジン下部のほうに通っている所は点検していないが,いずれまた。修理直後はまだ降下現象があったが,このところ発生していないという謎現象。
  • 増設電源ソケットを常時電源配線からに
    増設電源ソケットのカスケード接続をしていたものを直結に。ここには電圧計,MacBookAir の充電用アダプタをつないでいたのだが,電圧計で,走行中でもしばしば出ていた電圧降下(11v台に下がっていた)が出にくくなった(ひょっとしたら上記の箇所の漏電の影響による電圧降下があったのかもしれないが,電圧表示が数秒毎なので委細不明。現在は,クーラー,ハイビーム,MBAの充電など過酷な使い方をすると,電圧降下は認められるが,まぁ小型車なので,こんなものでしょう)。
  • 方向指示器部品の交換
    方向指示器のストッパーが効かなくなったり,ハイビームの固定ができなくなったので,中古部品で調子の良い物に交換。交換して2度ほど,方向指示器を使うと異音がして戻らないという症状が出たが,簡単に直してもらえた。
  • キーレス受信機の固定
    妙にハイテク機器を揃えているうちのミニはワイヤレスで鍵の開け閉めが出来る(荷物の出し入れが面倒なのと,積雪時に鍵穴が凍結で使えなくなったいるするのでつけてもらった。初号機はすぐに故障したため,今は別のメーカーの二代目。)この受信機が,先日,突然落っこちてきて足元に。幸い,ペダルにひっかかるようなことはなかったが,固定してもらった。
    キーレスの開閉は便利ですが,同乗者がいる時は,ちゃんと助手席側から鍵で開けるようにしています。
  • ドライブレコーダーの設置
    前述のエンジン回転数降下時の状況記録と,自分自身の安全意識向上のため,通販でレコーダーを購入,自分で設置。ETC,USB対応オーディオとならび,購入時に比べて格段にハイテクになったなぁという小さな満足感。
  • 電装系の改造
    結構前に,前照灯の配線をリレー式にしてもらった。また,かなりのフューズを管式から縦型にしてもらった。その他,アーシングなどもやってもらっているらしい。おかげで,初期は毎年梅雨時期に飛んでいたフューズがまったくとばなくなった。

ECUのモニター接続は修理工場さんの意見も聞きながら自分で調べて部品製作やソフトの設定などをやりました(かかった費用は部品代の数千円のみ)が,エンジニアさんも興味を持たれた様子。あるものは活用しよう,大切にしようと言うことで,まだしばらくは,乗り続けられそうです。

それにしても,50年以上前の設計,20年以上前に購入した機械がちゃんと動き,修理もできる。ありがたいことです。

2012/06/02 の魚野のつぶやき

  • すでにサービス業が逆輸入されていますね。先日現地視察した香港シティースーパー,百貨店が目指す未来のひとつかな,日本スタイルの経営だなと思ったのですが,西武出身者の方が起こされたんですね。 → http://t.co/qAbW6LNw 11:14:30, 2012-06-02
  • 逆輸入というのは,日本にも支店ができているからです。 11:15:06, 2012-06-02
  • そうそう,普段,小売業はコトを売るサービス業にならなければといっているのでサービス業と言いましたが,シティースーパーは一般的分類では小売業。 11:39:50, 2012-06-02
  • 代車。miniは個性が強い車です。個体差も結構あるのでたまに別ミニに乗るだけでもものすごく新鮮。 http://t.co/bhrYY1yp 14:49:09, 2012-06-02
  • カゴメが企業買収防衛策として買い付け説明書の言語は日本語でという文言を明記した。KGMの報道発表→ http://t.co/Swisps91 海外からの事態を以前から想定はしていたでしょうが,公式に対策を打ったのでしょうね。原料調達以外の部分もだんだん国際化していくなぁ。 18:45:05, 2012-06-02
  • ここ何年か,愛知県診断士協会(診断協会愛知県支部)の理論政策更新研修講師を担当させていただいている。今年は7/26の6次産業化支援で話をさせて頂きます。申込はネット受付 ( http://t.co/U0xSQ71a のみ,7/2から(非会員は7/10から)とのこと。 20:05:47, 2012-06-02
  • せっかくなのでfb上の事務所ページも更新していくことにしました。一般(fb会員以外)の方も見られますがコメント等はfb会員のみ。魚野剣太郎中小企業診断士事務所 http://t.co/nQKMyyuI 23:52:05, 2012-06-02

[日記]新品

先日のminiの故障で発電機を交換してもらいました。ぎちぎちにつまったエンジンルームでひときわ異彩を放つ新品アイテム。ベルトのテンションが変わったのか,エンジン音も更に快調になってきました。

Mini Generator
Mini発電機

銀色と黒の二色の対比,工学的に意味のある直線,曲線,端正なアルファベットのロゴ,こんなところに引かれるのはやはり技術者だからでしょうかね。

Miniの発電機
Miniの発電機を交換。

そういえば,先日発表されたMacBookや現行のiMacにも共通するデザインです。MacBookはアルミボディでは初物という事もあり,見送りにしましたが,デスクトップはMacPlus以来購入していないのと,そろそろ大きな技術的飛躍が少なくなってきたので,考えてもいいかな。

新春にも発表されると噂のiMacに期待。

[日記]運がいい

キリスト教徒的には,神様に守られているというべきところ?いや,損得勘定の項目も入っているから,それはないかな?以下はこの数日の間にあったこと。

  • 12月からの仕事のオファーがあるものの,条件合わず…双方の調整で結局受けられることに
  • ニューヨークで購入したMacBookのバッテリの容量が半分ほどに…交換対象品に該当するとのことで新品交換
  • 大学に行こうとしたらMiniがバッテリ上がり…急遽タクシーに切り替えて,ほぼ定刻に講義開始
  • 書棚に入れておいた筈の書類が見つからず,泡を食う…いつもの封筒ではなく,クリアファイルに入れておいたものを再発見
  • 訪問先でMiniが再びバッテリ上がり…同行の金融機関の方の車から電気を分けてもらって一発始動
  • 電圧が下がり,交通量の多い幹線道の第2車線で信号待ち中にエンスト(15年以上乗っているMiniですが,走行中のエンストは2回目です)…クラクションも鳴らされずに,一信号待っただけですぐに路肩に寄せられる(乾燥重量700kg,軽い,軽い)
  • 実は当初は都市高速を使おうとしていた…入り口で渋滞していたので一般道に切り替えたのだが,もし高速でエンストしていたら,更に大変なことになっていた
  • JAFに救援依頼したら45分待ちといわれる…実際には15分後に到着
  • 時刻はすでに19時を回っていたが,冷却液もれですでに予約を入れてあった修理工場に無事入院

思いもかけないことはいろいろありますが,なんだかんだでいい方向に向かっています。ありがたいことです。

[日記]漏れ

Miniのラジエータ液が漏れている現場をみつけた。駐車スペースの床面がぬれていたので覗き込んでみたら,しずくが数秒おきにたれるくらいにしたたっている。もう何年も前からある日突然ラジエータ液が急に少なくなるというトラブルはあったのだが,漏れている現場を見たのは初めて。ようやくいたずらっ子を捕まえた気分である。

故障も気まぐれだとたしかに困りものなのだが,対処法がわかってしまえばそれも含めていいかなという気分になれる。幸い水の量や水温計に注意していれば車は走らせる事ができるし,適当なタイミングで小さなトラブルがおこってくれると,その度に構造や対処法の勉強をしようという気になるので,走りとあわせて楽しい車である。これが,最近の車や電気製品のようになにもかも覆われて中身を隠されてしまうと,表面的にはきれいでいいのだが,何かトラブルが起こった時に手の施しようも無くなる。常日頃からいろんな状態を見ていられるのが,安心につながる。

あいにく今週は結構忙しく,修理業者への持ち込みは来週になってしまいそうだ。企業訪問で三河湾や岡崎の方に行く計画もあるので,予備の冷却液携行は必須である。上手に長くつきあっていくには,酸いも甘いも含めた全存在を認めつつ,こちらができることをいろいろ工夫してみる事が必要である。これは,人も,モノも,同じ事。

気になる?

自転車を保守点検し,久しぶりに乗り回すようになったのは,既報の通り。マウンテンバイクなので,タイヤやサドルが簡単に取り外せる。助手席をはずすか,キャリアを積むことを計画しているが,今はまだ,Miniの後部座席にバラバラにして放り込んである。実は最初はフレームを助手席から後部座席にかけて前後方向においていたのだが,本日助手席を使う必要が出て,急遽,後部座席に全部押し込むことに。意外とMiniは内部は広いので,あの大きさでもちゃんと入りました。

この自転車バラバラ状態,通りかかる人は結構気になるようで,覗き込んだり,あの自転車,何?と聞かれる始末。むき出しで載せているから,しょうがないかな。

まぁチェーンやハブなどの油がシートに付いて,乗っていただく方に迷惑をかける可能性もあるので,さっさと対策をしなくては。

5000円で整備

この金額はMiniではなく,自転車ですが(携帯空気ポンプ,スタンドの購入)。

ベランダでタイヤの空気が抜けたまま日干しになっていた自転車を引っ張り出し,久しぶりに空気を入れてみた。ついていなかったスタンドを購入し,とろけかかっていたグリップ・ゴムをとりかえ,変速機,ブレーキのワイヤの位置を調整。24段変速のはずが8段変速くらいになってしまっているが,街乗りなら不便はなさそうだ。手始めに大学の図書館やMiniを預けている整備業者さんのところまで,片道30分くらいをそれぞれかけて走ってみた。ふむ,高校生時代とあまり変わらない感覚で乗れそうである。

名古屋は歩道が広く,交差点での道路との段差が抑えてあるのに加え,駐輪場が随所に整備されているので,歩行者優先や交差点での減速・一時停止などのマナーさえ守っていれば,自転車は実に便利壮快な移動手段となる。

Miniのほうも整備が終わり,スムーズなブレーキ操作感覚が戻ってきた。タイヤやサドルをはずせば自転車も簡単にMiniに載せられることがわかったので,夏の終わりに少し遠出でもしてみようかと思う今日この頃。

見立て

修理業者さんによるカークーラー白煙事件のお見立ては,冷え過ぎか,ドレインのつまり。ということで結局気になっているブレーキの点検・部品交換とその他細かなお願い(ラジエータ温度センサーへの並列開閉回路の設置,車高上げ)のみということにした。

お見立てといえば,先日ニューヨーク出張の際に同行した薬局の方のところにお邪魔してきたが,気になっている身体の症状(夏風邪の後期症状?)と現在とっている対策(自分なりの漢方市販薬の投薬など)を伝えたら,こうこうこういう理由でこうだ,だからこうだと,いろんな知恵を授けてくださった。

診断士も会社の健康状況や不具合の見立てと処方を生業としている。経営の問題や課題について顧客である経営者の方の納得を得つつ理解してもらい,経営者自身にも変わってもらうための動機づけのお手伝いをする,やりがいのある仕事です。