1年に2回くらいしかやらない、PCのプログラムが必要な案件が来ました。
某スタジアムの開閉屋根の走行プログラムの改造。 本体制御はモーション制御なのですが、改造のシミュレーションをパソコン上のシミュレーターを使って行うものでして、そのシミュレーターのプログラムです。
以前は、VB6のタスク2つで、中間をC+の共有メモリで繋いでいました。 これをVisualBasic.netに移行して、ネイティブなマルチスレッドで1本化するものです。
ご存知のとおりVB6->.net 移行の際のネックは色々ありまして、単純にプロジェクトのアップグレードで動く物の方が少ないくらいです。 一番困るのは、「コントロール配列が使えない」ということでして。。
このように、14台ある物体の各ランプを種類毎にまとめたり、数値表示を出したりといった使い方ですから、まず間違いなく コントロール配列を使ったほうが簡単でコードも読みやすいです。
VB6なら、コントロールをコピー?ペーストすると、勝手にコントロール配列にしてくれました。 Label1でしたら、Label1(0)、Label1(1)・・ という具合です。
しかし、.netに変わってからは、Label1をコピーすると、Label1-1、Label1-2・・となってしまいます。 オンラインマニュアルを見ると、
「Visual Basic .NET では、コントロール配列はサポートされません。イベント モデルに加えられた変更により、コントロール配列が不要になりました。Visual Basic 6.0 では、イベントがコントロール配列によって共有されていましたが、Visual Basic .NET では、複数のコントロールからのイベントがイベント ハンドラによって処理されます。このことにより、同じイベントを共有する異なる型のコントロールグループを作成できるようになります。」
とあります。
一般的には、 こちらのサイトにあるような方法が簡単にコントロール配列を作れるでしょう。
ただ、クリックイベントなどの際にどのコントロールが対象なのかを判断する時の処理がわかり辛かったり、同じコントロールの配列群を多数set作る 場合などを考慮し 私の場合はコントロールの配列は 「System.Collections.CollectionBase」 クラスを継承したクラス で 「ControllArray」による方法を使用しています。
これは、予め汎用的なControllArrayクラスを作成しておけば、追加呼び出しなども自由ですし、よりオブジェクト指向の書き方になってきます。
**
まあこの程度のことは、プログラマの方からすれば「何を今更低次元な。」 なんでしょうが。。 これが本業でないプログラマにとっては、結構面倒なわけです。
さて、42setのコントロール配列群をやっと作り終えたので、本体コード移行に着手しなければ・・
世の中、シミュレーションが花盛りです。(Speakerの話題では、ないっす)
工場設備用シーケンサの世界でも、常識になってきています。 常識と思っていない、そこのアナタ、遅れていますよ。(笑) これからは、シミュらないと。
筆者は以前よりこれを使ってきていまして、1ユーザーとしてそれなりに意見を持ってメーカーに声を上げてきました。 ここらで少々紹介します。
1、三菱電機製Melsecシーケンサ用のプログラムを、PC上で廻してシミュレーションを行うことが、かなり手軽にできるようになっています。
GX-Simulator(三菱電機のサイト)
さて、上記サイトを見ると結構使い出があると思ってしまいますが、まーだまだ完成度はいまいちです。 何といっても、実CPUで常識な「RUN中書き込み」がこれで可能となったのは、昨年なんです。 それ以前は変更したら一旦STOP処理して、全部書き込んでからRUNさせる、という手順しかありませんでした(ってやってらんないよ!)。 晴れてようやくRUN中で可能となり、使える代物になりました。
動き物でない計算だけの検証は十分に使えます。 ただこれだけなら、実際のCPUがあればそれにソフトを入れて検証しても手間は同じですよね。
それから、筆者の環境ではモーションCPUへのDDRR/DDRW命令があるとエラーが出てRUNできない不具合が出ました(もう改善されているかも知れぬが)。
2、続いて上記にバンドルされている周辺ツールとして、IOシステム設定というのがあります。↓はその設定画面です。
信号やデバイスの条件を4つ(AND2つ、OR2つ)まで設定でき、一定時間経過をもって、信号をONさせたりデータに定数を格納したりできます。 このデバイス格納は、以前私も大いに要望していた機能ですから、少し進んだようです。 また、タイミングチャート形式での設定も可能で、そちらは自由度 が上がります。
しかし、この変数の格納に、どうしてデバイス指定できないのでしょう か。 難しい注文ではありません。 例えば [DMOV D1000 D1010] とか、[BMOV D1000 D1010 K20]とかと同じことができないと、モーションコントローラとの連携ソフトのシミュレーションには使えません。 できればインデックス修飾(間接指定) なども・・言い出すと限りなし。。 (といっても、どのみちモーションとは連携試験軸数も多いので大変ですけど)
結局、電磁弁+シリンダや、 モーターをモデル化した専用のシミュレータ周辺ツールを自分で作ってしまったほうが早い気がします。 GX-simulatorはMX- componentから通信が可能ですので、VB6やVB.netで作れます。 (ここでもマルチスレッドの問題が昨年の夏に解決したばかりですが。)
昔、 豊田スタジアム開 閉屋根システムの操作卓CPUのシミュレーションを行った時には、VB6からCCリンクボード経由でシーケンスCPUデバイスをモニタ/書き込みを行い、 パソコンに26台分の台車駆動インバータの役割をさせていましたが、規模が大きくなればそのような専用ツールの開発も意味が出てきます。
3、GOT(タッチパネル)をシミュレーションして、 GT-simulator2(三菱電機のサイト) という、上記GX-simulatorや実際のCPUとシリアル通信で連携して一環したデバグを行えるツールが(別売で)あります。 ただし、1台分し か接続できませんので複数台のシミュレーションは個別に行うことになります。 また、同様に「局番設定」などの機能は使えず、全てのデバイスは自局デバイ スに書き換わってシミュレーションされることになります。
まあ、ここまで書きましたが筆者は良く使っています。
何といっても既存設備の改造などで、試運転時間を圧縮するには必須のアイテムです。 日中は実機で試運転、夜間はホテルで改造・バグアウト(っていつ寝るん?) ・・最初から立ち上げるようなものでは、それほど重要とは思いませんが。
昨 日も朝から、GP-PRO画面をGOTに変換して1画面テスト用に追加し、改造ソフトを作って夜中の1時にシミューレションまで完了しました。 今回は自 分が試運転に立ち会えずお客様にお渡しするソフトなので、慎重を期すためにシミュりました。 GP-PRO画面をGOTに変換するGT- Converter2が取りこぼしが多く、実使用には耐えませんが部分テストなら何とか使えます。
今後もこの方面は積極的に活用してゆく所存ですので、三菱電機さま、どぞよろしくです。
工場設備のソフト製作には様々な課題があるけれど、技術論や精神論を超えたところに「まず動くようにすること」の重要性がある。
久しぶりに、simulatorと向き合って仕事をすることになっているので、今日はこの話題にお付き合いください。
simulationを行うことは、実際の立ち上げ業務を速やかに行うために今や非常にウエイトが高いといえる。 5年前にシーケンサのシミュレータ という記事を書いたときにはまだまだ認識が低い人も多かったが、最近では「少なくともシーケンスとタッチパネル間のバグアウトくらいはsimulationかけておいてね」が常識になりつつある。
一昔前になるが、豊田スタジアム のソフト作成・現場仕様変更には、物を動かすまでテストができない状況もあり、simulatorが大変強力な武器であった。 ただ、この時の方式はsimulatorそのものをVisualBasicで作ったので、応用性とか 他のメンバーによる改造には不向きなシステムだった。。
現在携わっているのは、ブラックボックス化された古い制御装置のレトロフィット(置き換え)の案件。 この場合、「今まで動いていた装置」であり、置き換え後に許される立ち上げ時間は短く、そしてバグによって機械を壊すことは即生産阻害に繋がる。
まさにsimulatorに期待される場面なのだが、今回はできるだけ簡便に、且つ改造が容易な方法でやってみた。
画像のように、制御装置のシーケンサと通信するポスト通信アプリケーションをVB.netで作ってPC上で動かす。一方で同PC内で実体の無いsimulator側シーケンスをGX-simulator上で稼働させ、電磁弁・シリンダモデルや、サーボ位置モデルを動かして、結果をポスト通信アプリ経由で実シーケンサに返すもの。
このようにしておけばsimulator自身はシーケンスで書けるので誰でもメンテできるし、実ソフトとsimulatorは完全分離できるため転用性も向上する。
ということで、9月に制御盤出荷予定の案件で、これを十分に活用してソフト製作に取り組んでいる。 simulatorソフト製作は案外面倒で、バグアウトが目的なのかsimulator製作が目的なのか、わからなくなることもあるのだが、今回の方法が今後のsimulation環境へプラスになることを期待している。
# 自分の仕事の歩みは、simulatorとの付き合い方の変遷という部分も大いにある、と思うこの頃。
いつも自社のITばかり紹介していてはブログの意味が無いので、たまには本業の話題を。
(右の写真の右側です)
三菱電機の AJ65BT-G4-S3 (通称:G4-S3) を買いました。 CCリンク経由でリンク内PLCのモニタ/書き込みを行うためです。
ずいぶん昔からG4ユニットはありましたが、Aシーケンサ限定のものでした。 2000年にQモードに対応した後継機種G4-S3が発売になりましたが、あまり使う機会はありませんでした。
今回は、古い機械でAnAシーケンサで制御している装置の一部をQモーションに置き換えるもので、全体制御は今までどおりAnAで行うものです。
当時のネットワークはMelsecnet2でしたから、Qシーケンサは割り込めません。 かといって、このためだけにNet10にするのも勿体無い。 → 必然的に、CCリンク(トランジェント通信を使用:下記注2参照)を採用となりました。
また、新規制御盤と既存制御盤が離れているため遠隔読み出しできないと不便なのですが、生憎AシリーズのCCリンクではCPU経由での読み書きは出来ません。 G4-S3ユニットをCCリンクに割り込ませておけば、AシーケンサもQシーケンサも読み書きできます。(注3)
下の画像はGX-Developerの接続先指定のスクリーンショット。
AnAシーケンサでは通信速度が通常のCPU接続では9.6Kbpsですが、G4-S3を経由すると38.4Kbpsになります。 今となっては38.4Kbpsでも遅いのですが、9.6Kbpsはめちゃくちゃ遅いので この速度アップはばかになりません。 Qシーケンサ相手なら、115Kbpsで通信できます。
現場の効率アップを考慮すると今回の案件だけでも十分ですが、1つ持っていれば今後も有益か(?) とも考えて購入に踏み切りました。
今月一杯はソフトデバグやら盤メーカー・機械メーカー立会いなどの出張で手一杯の予定。 現地が終わったら、このG4-S3は外して持って帰ります。(笑)
** 注意
注1: G4-S3を使用して、古い大型AシリーズのPLCを読み書きする場合は、CCリンクマスタ/ローカルユニット(AJ65BT11)の機能バージョンB以降、ソフトウエアバージョンJ以降が必要です。
資料: PDFファイル
注2: AnAシーケンサへのトランジェント通信は、デバイス直接指定はできません。 ランダムアクセスバッファメモリ経由となります。
注3: 実はまだ通信できていなかったりします。 構成に無理があるのか、三菱電機へ問い合わせをしてみます。
→ 061126追記: AnAのユニットが古かったようでして、00年の別のユニットに交換したら通信できました。 これで38.4Kbpsで通信できます。(嬉)
仕事で、めずらしく制御盤の図面を書いた。
テスト盤ということで急ぐくせにコストをかけられないので、止む無くAutoCAD-LTを使って。
まあ、実績のある図面からほとんど拝借したのだが、元々電気屋ではない自分は図面は読むものであって書く機会はほとんどなく、1面分全て自分で書いたのは初めて。
今日はその出荷前検査を行い、ユニバーサルモデルのモーション制御のACサーボモーターをJOG運転まで実施し、引き取ってきた。 明日は客先工場へ持ち込んで、配線工事を立会い。 来週には不具合なく引渡しの予定。
たまには自分で図面を書かないと勘が鈍るから、今回の案件はちょうど良かった。
年明けから、まさにタイトルのとおり。
とくに今週は。
日曜晩に東京で前泊?月曜は長野、夜に新大阪まで移動。
火曜朝移動で鳥取県をかすめて岡山の奥地へ。水曜まで滞在。
水曜の夜に名古屋までたどり着き、木曜(本日)朝 横浜にて一日打ち合わせ、夜移動し愛知県内の工場へ。 先ほど終わってホテルで執筆中。
金曜(明日)引き続き工場立会いが終わったら、兵庫県へ移動、土曜日に打ち合わせして、ようやく千葉県の自宅に帰る、、予定。
今週はピークだけど、今年に入ってからこれに近い状況。 1?2週間分の荷物を携えてのこの手のどさ周りが3月頭まで続きまする。 そろそろこういう生活はきつい年頃。。 誰か助けて。[E:rightdown]
今日は仕事ネタ。
モーションで多軸制御をしていると、シーケンスで同じ回路を沢山書く場面に良く遭遇しますね。
警報回路とか、各軸の位置決め回路とか。
同じ回路の展開はコピペ+デバイス置換で作ってゆく事が多いと思いますが、どうしてもタイプミスが残ってしまって、立ち上げ時にすぐに動かなかったり潜在バグになったり、変更の際の打ち込みの手間が大変だったり、悩みの種です。
どうしたら良いかなと考えていたところで、ふと三菱のGXWorks2の編集で右クリックしてみると、「CSVファイルからの読出」「CSVファイルへ書込」メニューがあるではないですか!
ということで、今回はこれを試してみました。
GXWorks2の回路編集状態で右クリックすると、コンテキストメニューが出てきます。その一番下に、ありますネ。
私が実行した手順は、以下のとおりです。
標準的な回路を1つ作って、CSVファイルへ書き込む
多軸展開したい回路のベース回路をひとつ、ラダーで作ります。
ここで、次のような注意点があります
- 後で変更する可能性がある回路はできるだけ無くしておく。
実際の運転プログラムからの指令やインターロックなど、軸単位で異なる条件や、現場で変更しそうなところは、総合接点として入れておき、そのコイル回路を別プログラムに書くような構成です。 - デバイスマップをよーく考えて作っておく
当然ながら、デバイスのマッピングには細心の注意を払い、無駄なく、デバイスのかぶりがないように設計しておきます。
書込んだCSVファイルを参考に、EXCELで編集
ここは腕の見せ所です。
- CSVで書きだしたファイルは、ニモニック表記になっています。 「そんなのわからない」 なんて言わずに良く見ているとすぐに理解できてきます。
- 多軸展開となる部分や、位置決めポイント展開となる部分などは変数としてEXCELでデバイス番号の計算式を作ります。
- 書き出しのために1行にしないといけないので、その部分は軸数ぶんのコピペは仕方ないでしょう。 必要に応じてマクロ化したりすれば、割と簡単になりそうですけど、変更しやすいように作っておくのがミソなので最小限がオススメです。
- 最終行に「END」をお忘れなく。
CSVファイルで保存
書き出した時のCSVを参考に、1シートの縦に長ーいシートをつくり、それをタブスペーサのテキスト形式で保存します。
CSV形式で保存すると、カンマ区切りになってしまうので、GXWorks2で読み込めません。 タブ区切りで保存しましょう。 私の場合はテキスト形式でやりました。
文字コードの変換
私のローカルPC環境の問題かもしれないですが、Shift-JISで書かれたタブ区切りのCSVファイルは、読み込みに失敗します。
- 一旦、テキストエディタで開いて、unicodeで保存。
- その後、拡張子をcsvに変更します。
GXWorks2で読み込み
例の右クリックのコンテキストメニューで、読み込みます。 表示中のプログラムにごっそり上書きされるので、要注意。
いかがでしょうか。 使い方は人それぞれですが、なかなか良いと思いますよこれ!