こんにちは、インターンの北島です。
このブログは企画が立ち上がってから1年近く放置してしまったという話を第1回で書きましたが、逆に書き始めてからはグイグイと進んで早くも第5回です。
案ずるより産むが易しというやつですね。
読んでいただけている方、ありがとうございます。
前回は試作した際のことを書きました。いかがだったでしょうか?
今見返してみるとなかなか拙いハードウェアを試作していますが、その失敗を生かして本番は良いものが作れたと思います。
さて、今回は実際に搬送装置を動かすための頭脳であるソフトウェアについて説明したいと思います。
前回まででPCからマイコンを通してモーターを回し、かごを運ぶことができました。原点復帰もできるようになりましたから、かごを持って、運んで、置いてをずっと繰り返せるようになりました。
しかし、それだけではめっきはできないのです…。
めっきのスケジュール
めっき生産は前処理→めっき処理→後処理で成り立っていることは第1回で書きました。
ライン上にめっき槽は3つあり、うち1~2槽が稼働しています。
*上の図で時間を「?分~」と書いているのは、このときまだ大型槽は未使用なので実際にどの程度の時間がかかるか見当がつかないためです。
上の図の通り、実はめっき処理に一番長い時間がかかっており、その間に後処理や前処理ができてしまうんです。
ということは時間を節約してスループットを向上させる事ができます。
そのためには、あるかごをめっきラックにおいてめっき処理している間に他のかごを前処理してしまう、もしくは後処理してしまう必要があります。
なので開始ラックに置かれたかごをどんどんめっきしていくためのタイムスケジュールを自動で組み立てなくてはいけません。
タイムスケジュールを立てるために必要なパラメータ
「めっきは生き物」と言われる通り、めっきの調子は日によりけり、時間によりけりです。こればかりはそういうものとして最初から織り込んで考えていくしかありません。
前処理や後処理にかかる時間についても判断は難しく、浴槽から浴槽に移動させる時間と浴槽につけておく時間(これが時々変更になるかも)を足し合わせて合計時間を出すわけです。
以上のことから、最初からすべてのスケジュールを決定することはできません。その都度スケジュールを計算して運ぶべきかごを決定する必要があります。
具体的に考えてみましょう。
なお、このときは仮に、前処理に15分、めっきに80分、後処理に15分という設定にしました。わかりやすく具体的な数値を置いているだけで、他の数値に変えても考えることは同じになります(というより他の)。
状況1
上の図では、かご1のめっきが終わる前にかご2が前処理ラックまで移動できることがわかります。かご2を動かすべき状況です。
状況2
かご2を動かしました。めっきラック1が空いていますから、かご2をめっきラック1に移動させて大丈夫でしょうか?
ここで少し状況が複雑になっています。
- かご2をめっきラック1に移動させている間にかご1のめっき終了時刻が来てしまう。
- かご1が後処理ラックにある状態でかご2のめっきが終了してしまい、かご2がめっきを出て後処理ラックまで移動したいのにかご1が占領しているという状況になってしまう。
の2つの状況にならないように気をつけなくてはいけないからです。
今回は幸い、1.には当てはまりません。
2.はどうでしょうか?
かご2がめっきラック1に移動してからかご1を回収ラックまで一気に運ぶとすると、現在からかご1が回収ラックに到達するまでが15+5+15=35分です。かご2がめっきに入ってから35-3=32分が経過していますが、めっきが終わるまでは80-32=48分ありますから大丈夫ですね。
かご2を移動させましょう。
そのあとめっきが終わり次第かご1をめっきラック2から回収ラックまで運ぶことになります。
状況3
かご2をめっきしている間にかご3がラインに入ってきました。かご3を前処理ラックまで運ぶことに問題なかったので運び終わった状況です。
ラインの中が混み合ってきましたね。
かご2とかご3の状況は、ちょうど上のかご1とかご2の状況と一緒です。
ということはかご3をめっきラック2に運んでいいということでしょうか?
…いえいえ、かご1が回収ラックにいる以上、もしユーザーがかご1を回収していかなければかご2は後処理ラックより先に動けません。
ということはかご3はめっきが終わっても行く場所がなく、めっきラック2から動けずにめっきされすぎてしまうことになります。
つまり、先が詰まってしまいそうなときにめっきを開始してはいけないということです。
この状況ではかご3は動けません。
ユーザーがかご1を回収してくれるのを待つことになります。
すごく難しいパズル
それぞれのかごが次の動作に何分かかるかだけでなく、めっきラックより先を詰まらせたり、動作している間にめっき終了時刻が来てはいけないという制限もあることがわかりました。
とても難しいパズルを説いている気分です。
このパズルの答えはどのようにしたら出せるでしょうか?
相談してみた
試作の際にほかのインターンの方に頼ったように、こういうときには積極的に他の人を頼ることにしています。
今回はアルゴリズムに詳しそうなソフトウェアチームの方に相談してみました。
少人数なベンチャーだけあってチーム間の垣根はとても低く、ちょっと席を移動して声をかけるだけです。
自分「~というわけですごく複雑で難しいんです。どういう方針がいいと思いますか…?」
ソフトチームの方「状態遷移図書いてみたら?」
状態遷移図をおすすめされました。知らない名前です。
調べてみると、いくつかの状態を取りうるシステムについて、状態をノードとして状態間の遷移条件でつないでいくというもののようです。
今回のシステムの取りうる状態はラックが5~6個でかごがあるかないかで2^6程度あります。さらにめっきがあと何分掛かるかによって分かれます…。
数が多すぎて状態遷移図では難しいようです。
ソフトチームの方「それなら具体例を考えたときの判断基準をフローチャートにしてみたら?できたら状態遷移図を考えた時の状態すべてがそのフローチャートで正しく判断できるか確認してみるといいね」
なるほど。
フローチャートは「はい」「いいえ」などでたどっていくと答えにたどり着く、という図のことです。よく性格診断とかでありますよね。これは知ってました!
具体例を考えてみると、状況が複雑になってくるのはめっき中のかごが存在するときです。めっき終了時刻を考えて行動する必要が出てきてしまうからです。
めっき中のかごがないときにはめっきより先が詰まってしまわないようにだけ気をつけていればどんどん運んで大丈夫そうです。
ということは、まずはめっき中のかごの有無で分けてみよう…、というように考えていきます。
結果として、フローチャートでは多くても20個程度の質問で答えにたどり着く事ができました。
状態遷移図で考えた100個以上の状態についてもこのフローチャートで確認して正しいことを確認できました(かなり大変でしたが)。
…ついに、パズルの答えが出ました!
少しのことにも先達はあらまほしき、とはまさにこのことです。ソフトウェアチームの方に感謝です。
一人で煮詰まってしまうときには相談するのが一番ですね。
さらにさらに
実はめっき後の後工程(めっきラインの後処理ではなくレジストを塗ったりする工程です)の前にフィルム表面を洗浄するために、めっきラインの浴槽を使おうという話がありました。
フィルム表面を洗浄するだけなので、前処理を途中までやるとめっきを飛び越えて後工程の途中を行う、という処理です。開始ラック→後処理ラック→回収ラックという動きをします。
これをめっき生産と一緒にやろうというわけです。
かごごとに、どの槽に何分つけるかが違うだけでなく、そもそも使わない槽や飛び越えるラックがあるということになります。
…更に難しいパズルの出現です笑。
でも結果としてどの槽を使うかを自由に設定できるようになったため、実験がやりやすくなりました。
たとえば、「めっきが不調なのは前処理に原因があるんじゃないか」という考えになったときに前処理だけして直接回収ラックに行くかごを設定できます。
生産を完全に止めたりしなくてもラインの部分検査ができるわけです。
副産物ではありますが、結構すごくないですか?
最後に
さて、今回はかごを運ぶ判断についてかきました。パズルの答え(アルゴリズム)はそのままプログラムで実装されています。
プログラムが正しくかけているかをテストするプログラムも当然書いているわけですが、これがまた長くて…。でもテストしたことで自信を持って動かせるということでもあります。
次回は実際に工場でラインを立ち上げた際の話ですよ!
お楽しみに。