金融系メインフレームはなぜCOBOLをつかうのか
http://togetter.com/li/761401
これに感化されましたw 金融系ではCOBOLを使うことが不思議がられています。どーしてそんな古い言語を使うのか? 今どきの言語を使わないのか? 使う理由は?
同じ事が、産業系でもあります。レイヤー分けて書いてみますw
#1)末端ローカル機器
制御系の末端です。センサーを電送したり制御をそこで完結したりする機器。タイマーとかリレーとか末端機器といってもいいです。それ以外には、温度調節器(TIC:Temperature Indicate Controller)とか圧力調節器(PIC:Pressure Indicate Controller)とか、液面制御器(LIC:level Indicate Controller)とかですね。
#2)中間にある制御機器
盤内に入ってる機器です。タイマーとかリレーとかPLC(Programmable Logic Controller)とか、いろいろ
#3)中央監視機器
中間の制御機器や物によっては末端ローカル機器からの情報をここに纏めて表示します。たまに、制御機器に司令を出してるものもあり。
##開発言語
[末端ローカル機器の開発言語]
ほとんど、コイツらは組み込み開発をされているのでCで書かれている事が多いです。あまり考える必要はないかも。物によっては中身がFPGAとかもあるので、其の場合はVHDLとかImpulseCとか。(それ以外にもあると思いますが私が見たものや書いたものだけを紹介しています。HDLですね)
[中間にある制御機器]
リレーとかタイマーは電気的な物なので言語無いですw そして中核に位置するのがPLCとなります。これらは、ラダー言語で書かれている事がほとんどです。実際には、PLC自体はIEC61131-3の言語があり其の種類だけ使えるのですが、理由がありほとんどがLDで書かれています。これが本題ですね。中には専用のHDLで書くものもありました。かなり特殊な部類です。LDは割と一般的な言語です。
[中央監視機器]
中央監視機器はディスプレイに表示させるためのI/Fでありディスプレイからタッチパネルやキーボードで運転停止司令や、各種制御機器へパラメータを出力したり読みだしたりします。ネットワークを昔はARCNETやHP-IBで実装するか、メーカ独自のプロトコルで実装するものが多かったですが、いまは、Etherを使ったTCP-IPで接続し、喋ってるプロトコルもBACnet等や普通のシリアルに変わってきました。ハードもWindows機や専用に開発されたOSだったりしましたが、いまはLinuxやUNIXが使われることも多いです。ソフトウェアも昔はVisualBasic,HP-UX-Basic,等が多かったですが、いまは普通にCやC++で書かれているソフトウェアが沢山あります。
##本題
どーして古いまま新しくしないのか?
実は、出来ないんですw この中にあるLD言語ですが記述はラダーという手法で梯子のように書いていきます。アナログを扱う場合は、実はアセンブリ記述に近く、例えばアナログを入力するときには、MOV k4X0 D00
とか書いてると、K4X0から読みだしたデータをD00に格納しなさい。という事になります。これを実はCで書いたりする事や、もっと簡単なファンクションブロックというもので記述する事は可能なのですが、工業系に限って言えば「納入した客先が万が一の時にプログラムを読める」という事が必要になります。
すると、客先はプログラムのプロではないので読める言語で記述する必要が出てきます。また、1年中稼働し定期検査でプラント全体を停止するのは年に1度、全種類の機器を点検するのに約1ヶ月とかいうレベルでしか時間を取れないので、新しいものを納入して動作確認を実機で総合的にやるには時間が足りない。
シミュレータを作成して実機の前にもっと先進的な機器と言語を使ってやるには、コストが掛かり過ぎ、現状のものと利益が変わるか?となると変わらない。
そーなると更新されないっていう結論に導かれます。
最初から機器の更新を見据えた設計構成ですと可能なんですが、その更新を見据えた設計はとてもお金と設計時間がかかる。きっと銀行も同じでシステムを更新して新しい風をいれて設計し直しても、それは銀行の利益に直結することが出来ない・・・
きっと同じような事が起こっているんだと思います。COBOLから今どきの言語仕様に変える。変えた所で利益に差が出るのか?ってなると、その計算は可能ではあると思いますが、利益が変わるほどのパフォーマンスの差が出ない事には設備投資は無理です。
もちろん、其の内にメンテナンス出来る技術者の枯渇などで安定運用が難しくなりだすと少しづつ更新されそうではありますが、何時の時代も枯渇しそうになっても枯れた技術を会得していく技術者がいる。その技術者が居る限り、古い技術が死ぬことはなさそうです。
昔の技術を使い続ける理由は、とても無駄で進歩が無い様に思いますが会社が営利企業であり続ける限り、昔の技術を捨て新しい技術を導入するには導入した際に、昔の技術と今の技術で置き換えるコストが新しい技術で回収出来るか?がとても重要になる事が大きな理由だと思っています。
今、COBOLの資産を使いやすくするためにメインフレームの置き換え時にインタープリターのように使えるサーバやVMのような構成があると聞きますが、その時代を経てから最終的には置き換わるでしょう。ただ、だいぶ先まで掛かりそうな気がします。
とても、良く似ているお話だなーって思い書いてみました。