プリント基板設計・シミュレーション

TOP > アポロレポート > コラム > 第38回 プログラミングについて 『失敗した話』
コラム
2023/06/30

第38回 プログラミングについて 『失敗した話』

アポロレポート

『失敗した話』

 
 ときには私の失敗した話も少しはプログラミングの参考になるかも知れません。今まで数々のプログラムを作ってきましたが、ちょっとしたプログラムのバグで大騒ぎになったことがありました。
 おおよそ世のかなでプログラムミスによって世間が大騒ぎになったときのミスの原因は、ほんのちょっとしたことが多いようです。プログラムのミスというのはそもそもそういうもので、根本的な大間違いが原因であることは皆無です。それは、変数名の書き間違いだったり、ループの回数が一回多かったり、ビットを1つセットしていなかったと原因が分かってしまえば情けねなくなるようなミスによります。

 世間を騒がせるまでの大事にはなりませんでしたが、会社の中が大騒ぎになったことは私も経験しています。

 私がプリント基板のCADシステムを開発中のときに一回、これは会社レベルの騒ぎになることではありませんでしたが、資材部の某課長にえらく叱られたことがありました。CADシステムがほぼ完成に近くなると、様々な出力データのテストを実際に物を作って行なわなければなりません。物を作るということは当然それに対して費用が発生するということです。以前にもお話しましたが、私がプリント基板のCADシステムを開発したのは会社からの命令ではなく、あくまでも自分勝手な行動でしたので会社から予算などは1円もでません。ということは実際に物を作って確認するには、業者に無理を言って無料でやってもらうしかない訳です。

 プリント基板を作るときには、プリントパターンをフォトエッチングするためにそのパターンを透明のフィルムに描画したものをまず作らなければなりません。これを作ってくれる業者とは直接仕事のやり取りがありましたので、これは私が営業の方に頼み込んで無料で作ってもらいました。運良くこれは何も問題なくできあがりました。

 次に実際にプリント基板を作るのですが、プリント基板には片面基板、両面基板(2層基板)、多層基板と銅箔のパターンがある面の数で色々と呼び方も、制作費も変ってきます。とにかくこの基板が出来上がればCADシステムのテストは殆ど終わったようなものです。ですので基板の種類としては難度の高い多層基板(4層基板)をテストに作ることにしました。基板の発注は資材部が行なっていましたので、私はその担当者の某課長になんとか頼みこんで無料でテスト基板を1枚作ってもらえるところまで話をもっていきました。実際に多層基板を作るには、最初に内層といって基板の内側に挟み込む基板を作ります。この作業は基板屋でできるところもあれば、材料メーカに行なってもらわなければならないところもあります。内層パターンを挟み込んだ板が出来上がると、次に穴開けを行ないます。穴開けはCADシステムから出力されたデータを使用して、NCドリリングマシンを使用してガンガン穴を開けていきます。穴開けが終了すると、一番外層のパターンを生成した後、ソルダーレジストといって半田のが付く部分と付かない部分を印刷し、最後にシルク印刷といって、部品の記号や部品番号を基板に印刷をします。

 私がポカをやってしまったのは、ドリル穴開け用のデータでした。プログラミングの最初の頃にお話したことがありますが、ドリルデータは絶対座標か相対座標のどちらかで作成するのです。当時は紙テープでデータを渡していましたので、相対座標で出力した方が絶対座標よりもテープの量が少なくて済むという理由でその方式のデータを作成しました。この相対座標に落とし穴があったのです。

 普通プリント基板に搭載する部品はインチピッチの部品が多いので、インチ格子上に穴が乗るようにデータを作成します。例えば次のように1列に穴が並ぶのです。

 (0.0  ,0.0  )
 (0.3175,0.3175)
 (0.635 ,0.635 )
     :
     :

 コンピュータ上ではこのままの座標値を保持していますが、実際に物を作るとなるとNC工作機械では1/100mmまでのデータしか渡せないときには、この1/10000mmの値を1/100mmに丸め込んで機械を動かさなくてはなりません。実際上1/100mmでデータを出力しても±5/1000までの誤差で物ができあがりますので実用になるわけです。上の例の様に 0.3175 mmピッチで穴が並んでいるとしたときに私は、

  0 0
 32 32
 32 32
 32 32
  :
  :

 とデータを出力するプログラムを作ってしまったのでした。現在の穴の位置から次の位置までの変化量をそのまま1/100mm単位の整数にして出力するようにすればこのようになるのですが、実際に基板に穴を開けると、どんどん穴の位置が開いて欲しい位置からずれていったのでした。この理由は以前説明してありますのでこれ以上の説明はしませんが、私のところに電話がかかってきました。

 「このまえ頼まれた只で作ってもらっている基板だけど、穴がとんでもないところに開いてしまっているぞ!」とまず第一声。資材部の某課長の怒鳴り声。「どうするんだ!」「どんなふうになっているんですか?」「穴がだんだんずれていって最後は5mm以上もずれているぞ!」「そうですか....原因を調べてみます。」「原因がどうのこうのよりもこの板はどうするんだ!」とお互いに立場がありますのでこんな会話がされ、とにかく原因を調べることになりました。休日を返上してその原因を調べてプログラムを修正して再び紙テープにデータを出力した後、資材部にその原因を知らせるべく電話をしました。「このまえの穴の位置がずれてしまった基板の件ですが、原因がわかりました。」「馬鹿!原因があるからあんなことになるんだ。原因がどうのこうのじゃなくて、この後あの基板はどうするんだ。」
「もう一度開けてもらえませんか?」「基板屋は実物に穴を開けてしまったんだぞ。また作れと言うのか!あの一枚でいくらかかると思ってんだ。俺はこれ以上は基板屋には無理を言えないぞ!」
 これは困ったことになった。ここのテストができなければ長い間こつこつと作り上げてきたシステムが頓挫することになってしまう。こうなれば後は泣き崩しの一手しかありません。平身低頭、泣き付くだけ泣き付いてなんとかベーク板に穴を開けてもらうことのみを承知してもらいテストをしたのでした。最終的にテスト基板は作らなかったのですが、穴開けデータは正常に出力できると分かったのでテストはそれでOKということにしました。というよりもそうするしかなかったのでした。

 プリント基板のCADシステムが稼動し始めて2ヶ月ぐらい過ぎた頃のことです。今度は製造部から電話。「部品がさかさまに付いてしまっているんだけれど....」と担当者からの声でした。「変だなあとにかく原因を調べてみます。」と私。

 プリント基板ができあがると今度は実際に部品を取り付けます。昔は部品も大きかったので人間が手で1つ1つ半田付けを行なっていましたが、表面実装部品といって穴を開けずに表面に乗せて半田付けを行なうものでは、1x2mm程度と小さいのでもはや人間がこれを1つ1つ付けていたのでは生産性があがりません。そこで、それも機械に行なわせるようにCADシステムからマウントデータを出力するのです。

 私はここでもほんのちょっとした大きなミスをやらかしてしたのでした。マウントデータを出力するプログラムで、内部で長さを求めるために絶対値にした値をそのまま角度の計算に使用していたのです。取り付け角度が0度と90度の部品は正常に出力されたのですが、180度のものは0度に、270度のものは90度になってしまっていたのです。これは穴開けのテストを行なったときと比較にならない大きな問題です。実際に製品になる基板で発生した不具合なのです。最悪の場合は基板制作からのやり直しになって、出荷が遅れてしまう可能性があるのです。なにせ得意先はNHKとかいった国内の放送局やアメリカの放送局なのです。部品の値段も一般の民生品のようなものではなくもっとランクの高いものを使っている上、大量生産品ではありませんので最終的な基板一枚の最終的なコストは数十万円にもなってしまうのです。私は顔面蒼白になりました。

 とにかく製造部の部長に不具合の連絡をしました。部長が言うにはもう既に調整部門に渡ってしまっている基板がかなりあるというのです。絶体絶命だ...とにもかくにも次は調整部門の部長に連絡、そして自分の部の部長にも報告。自分の失敗を対処するときに一番辛いのがこのときです。失敗は誰にも知られたくはないものですが、ここで黙っていてはいけません。少なくとも自分の所属している部署の長に報告することです。きっとなんとか対処してくれるものです(なにせこのときの私は役付けのない平社員でしたから)。
 報告が済んだ後は善後策をとらなければなりません。渡しは急遽プログラムを1本作りました。自分の作ったCADシステムから出力されたデータで作ったすべての基板で部品が逆方向に付いている基板と、その部品のリストを作成するものです。超特急でそれを数時間で作り上げ、リストを作成し各関連部署に走り回りました。

 でも運が良かったのか、逆に部品が付いてしまう基板とその部品の数が少なった上、調整部門では逆に付いているのを発見して改修してくれていたのです。頭を下げまくって謝りましたが、内心ホット胸を撫で下ろしたものでした。

 CADシステムが完全に落ち着くまでには1年以上はかかった記憶があります。以前お話したポリゴンの塗りつぶしがうまくいかなくて、フィルムに『す』が入ったり、各種の障害チェックを行なうプログラムが誤動作したり様々な問題が発生し、その都度直したものです。それも実際に物を作らなければなりませんのでのんびりはしていられないのです。問題が発生したときにはできる限りその日のうちに対処し次の日には正しいデータを出力しなければならないのです。

 思い返してみれば、今回お話しこと以外にも薄氷を踏む思いで苦境を切り抜けたことが数多くありました。多分これからも間違いなく逃れることはできないことだと思います。しかしながら苦境を切り抜けることで鍛えられるは間違いのないことです。精神的にも技術的にも皮がむける(肉体的にではありません)ものです。
 多分皆さんも多かれ少なかれ苦しい経験はしたことと思います。言い古されたことですが、恐れていては話が始まりません。プログラムはあくまでも使ってなんぼの道具なのです。

 失敗した話に限らず色々な思い出話をこれからもしますので息抜きに読んで下さい。

 それではまた次回。


そのお悩み、
アポロ技研に話してみませんか?

アポロ技研でワンランク上の物創りへ!
そのお悩み、アポロ技研に話してみませんか?