日記一覧
当サイトに登録されている日記一覧仕事にPHPを使って自身新分野に挑戦中!
概要
こちらのデータロガーユニット を使ってPLCから受信したEXCELレポートを、ユーザーがWEBサーバー経由で最新版をダウンロードする、というもの。 EXCELのファイル名が固定化していないので、WEBサーバーにFTPクライエントを立てて、ユニットのFTPサーバーへ接続してファイル名を得ることから。
ASPで?
サーバーはWindowsXPのIIS。 ならばASPだね、ってことでASPでFTPクライエントコードを探したのだが、見つからず。 結局、ASP.netなこのページか。
WebClientクラスでFTPによりファイル転送を行うには? [@IT .NET TIPS]
しかし、このためだけに.aspxに踏み込むのはいかにも時間の無駄。 やはり色々準備されているPHPかな。 XOOPSで馴染んできたPHPなのでハードルは低くなっているし、イントラ内のシステムなので、セキュリティーへの配慮も負担が少ない。
PHPで?
ということで、PHP5をインストール。 IIS+PHPはあまりメジャーではないのだが、下記ページを参考にSAPIでやってみたらOK。
PHP5 インストール・設定方法(IIS 編) [Windows で PHP を使おう]
(注意)
IISで仮想ディレクトリを使う場合、「No input file specified」というエラーが出たら
doc_root =
としておくと良さげ。
FTP関数?
そして、PHP5に準備されているFTP関数を使えば、OK?
FTP関数 [PHP マニュアル]
これ、間違いなく使えて他のPCのWEBサーバーともログイン・「ftp_nlist」によるファイル名取得、ともOKなのに、このデータロガーユニット内のFTPサーバーとは相性が悪いのか、「ftp_nlist」でも「ftp_rawlist」でも 空の配列が返るだけで取得できない。
半日悩んだ挙句、下記のページを参考に fputsとfgetsで返答文字列を確認しながらやってみると、どうやらうまくいきそうな予感。
FTPクライアント [PHPのちょっとしたTIPS]
最終的には、上のページで配布されている、このクラスを使うことにして、無事にファイル名を得ることができた。
まとめ
私にとっては新分野ではあったが、ひとつ心配なハードルがクリアできたので、このまま行くつもり。
設備制御分野では「電気屋」と「システム屋」のドメインが分かれているので、こういうコラボで小ぶりな仕事には、私のようなマルチ人間は便利で重宝されるため、今後も突っ込んでいきたいと思う。
今年も、豊田スタジアムのソフト改修に、昨日・本日の2日間、行ってきました。
まずは遠景から
そしていつもの角度から。
2001年の竣工後、丸7年を経過。 さすがに故障が出だして昨年の秋?今年にかけて機械的なトラブルが散発しまともに動かせなかった。(雨の中のトヨタカップは、2chのスレまで立つほどの苦情が?)
そこで故障時の復旧容易化などの要望が出てきて、今回はその対応。 ちなみに昨年の記事は、こちら。
この1年間のトラブルで、関係者により様々な改修が行われたが、ここにきて台車のエンコーダー位置の重要性を再認識いただたいたようで。 昨日・本日の試運転でトラス台車の位置誤差が相互協調動作のズムーズさに影響することを確認できた。
竣工時の私の脳内奮闘の内容と、絶妙な運転のための小技の数々。 ここにきてようやく皆さんにわかっていただけて、苦労が報われたような気がした。
2日目の今日は、2往復していずれもノンストップで自動開閉を完了。 こうして動くのが普通なのだが、それでも久しぶりの勇姿に皆見とれていた。 やっと竣工時の状態を取り戻せたのかもしれない。
そして来年も、大きな改修が行われる予感。。
**
その他の写真
先日、機械屋脱却宣言をしたところだが、早速 近所の工場から電話が入り、緊急対応を要請された。
以前、前職場で作った仮想モードのソフトを、今回Qmotionへ置き換える仕事で、うまく行かないので来てほしいとのこと。 さて、どうなることか。
***
詳しい状況は書けないが、大きなメカが大きく振動して床が揺れていた。
1年も実践から離れていたのでmotionの勘を取り戻すのに時間がかかったが、共有メモリの設定ミスと、演算周期の設定の問題で、位置指令抜けが発生しているのが原因であった。
現場では散々悩んでいたようだが、嘘のようにスムーズに動くようになって感激された。
「仮想モードを安易に考えてはいけません。悩む前に私に相談してください」 (もちろん真意は、最初から私に発注してください、ということ。) と言っておいた。
久しぶりに自分の庭に戻ってきたような感じで、とても楽しく仕事ができた。 この続きは、また来週に続行。 やっぱりこれでなくっちゃ。
年明けから、まさにタイトルのとおり。
とくに今週は。
日曜晩に東京で前泊?月曜は長野、夜に新大阪まで移動。
火曜朝移動で鳥取県をかすめて岡山の奥地へ。水曜まで滞在。
水曜の夜に名古屋までたどり着き、木曜(本日)朝 横浜にて一日打ち合わせ、夜移動し愛知県内の工場へ。 先ほど終わってホテルで執筆中。
金曜(明日)引き続き工場立会いが終わったら、兵庫県へ移動、土曜日に打ち合わせして、ようやく千葉県の自宅に帰る、、予定。
今週はピークだけど、今年に入ってからこれに近い状況。 1?2週間分の荷物を携えてのこの手のどさ周りが3月頭まで続きまする。 そろそろこういう生活はきつい年頃。。 誰か助けて。[E:rightdown]
現場には4年ほどぶりになります、 豊田スタジアム。 OPENから5年半経った今でも、日本一、いやおそらく世界一難しい動きをしている開閉屋根だと思います。
今回は、とある名目での開閉屋根運転ソフトの改修案件で現調に行って参りました。 初めにお断りしておきますが不具合修正ではありません、ご安心くださ い。 ソフトの中身も決して難しく作っていませんが、その機能の多さ・奥深さゆえに、今でもソフト変更の際は私まで依頼をいただいてます。 ありがとうご ざいます。
以下、個人的な宣伝の一種と思ってください。
私の今の本業は、汎用ACサーボモーターのコントロールですが、この物件はサーボはありません。 14台のトラス(橋梁)の左右にある台車走行を遠隔でイ ンバーターの速度制御を行い、東京ドームの類のエアーマットとそれを支持するつなぎ梁との速度協調運転で、閉めたり開けたりするものです。 開閉所要時間 は、片道約1時間ほど。 動く物の総重量は、何と2000トン! そんな重量物が屋根上に乗っているんです。
閉め始めはカーテンを広げるように伸びてゆきますが、屋根の開閉動作の最大の見せ場は、最後に待っているつなぎ梁との速度協調運転です。 →は北側の道 路から見上げた写真ですが、これに写るワイヤーを一定速度で引っ張ることで、つなぎ梁自身が持ち上がります。 (正直言ってこの下は歩きたくありません。 何か落ちてきそうな錯覚が襲ってきます・・)
右の写真は、先頭トラスが協調運転中の写真です。 台車の速度は、つなぎ梁で拘束されて変形三角関数で徐々に低下させねばなりません。
この速度変更を2次関数に近似し、近似しきれない部分はインバーターとモーターの「電動機的すべり」によって解消するものです。 これを13回、各々微妙に異なる係数でリアルタイム計算し、屋根が開閉します。
(余談ですが、この制御盤の位置には参ります。 トラスの上を歩いて行って、ハッチからここに梯子で降りるときの恐怖感は相当なものです。)
この台車駆動、基本構想とその他色々な情報をいただいた以降の数値化リモデル・近似式作成・ソフト思想と設計・コーディングまでのほとんどを、提 案?作成まで(もちろん、多くの人との情報交換を経て)行いました。 (「生き物」と言われるエアーマットも煩雑な動作をしており、24時間継続運転する この部分のソフトは当時の同僚が作りました。 )
この手のメカメカしい物体のモーション制御は、私のような機械屋が設計することのメリットは非常に大きく、設計段階から危険予知を行いつつ、現調までに事前シミュレーションで完成度を上げておき、現場改造にもシミュレーターを活用することで安心して立ち上げを行うことができた訳です。
しかしまあ、こんなに手間暇かけて作っても、現調前には「台車がオーバーランして屋根から崩落する夢」を見たりしたものです。 今では笑い話です が、これだけの大物を制御室から遠隔でタッチパネルのスイッチ一つで動かすのは、自動運転以上に神経をすり減らされました。(笑) 当時は「もうやりたく ない」とも思いましたが、今では「またやってみたい」と思うことも(汗)。
一昨日は吹き飛ばされそうな強風と強烈な花粉に悩まされました。この時期は本当に辛い・・ 一方、お昼は(作業着のまま)4階のレストラン「 ヴェルデロッソ」で週代わりランチをいただきました。 メインにビーフシチューか海老の何かか選べましたが、シチューは美味しかったです。 海老は・・
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のコントロール配列群をやっと作り終えたので、本体コード移行に着手しなければ・・