仕事に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]
最終的には、上のページで配布されている、このクラスを使うことにして、無事にファイル名を得ることができた。
まとめ
私にとっては新分野ではあったが、ひとつ心配なハードルがクリアできたので、このまま行くつもり。
設備制御分野では「電気屋」と「システム屋」のドメインが分かれているので、こういうコラボで小ぶりな仕事には、私のようなマルチ人間は便利で重宝されるため、今後も突っ込んでいきたいと思う。
先日以来、PHPで案件に取り組んでいます。
三菱のデータロガーユニットの「クセ」に悩まされつつ、だいぶ進んできました。 昨日と今日は、WEB画面でのグラフ表示にチャレンジ。
WEBブラウザ上でのグラフ表示には色々な方法がありますが、今回はできるだけ簡単に(書くコードが少ないという意味)時間をかけず、見栄えをあまり凝らずに行きたいので、 Javascriptでやってみました。
といっても、いつものように、オープンソースを使います。
Chart Widget Demo(WebFX)
自由度は相当低いですが、その分、敷居が低いですね。 今の私には丁度良い。(笑)
結果、こんな感じです。 20~1000レコードを60秒おきにリロードし、データロガーユニットからFTPでダウンロードしグラフ描画します。 意外に軽い。
今回はこんな感じで済ませましたが、もっと本格的なグラフ表示も試してみたいですね。
たまにはやらないと、忘れてしまいそうです。
今回は、シーケンサのデバイスを定義ファイルに従って読み出してCSVファイルに書き出すというVisual Basic .NETのシンプルなものでして、現場での要望に従って1日で書き上げました。
ところが、シーケンサデバイスのコメントを定義ファイルに日本語で書いたまでは良かったのですが、このファイルをForm上の表示と CSV書き出し後にEXCELで開いたときの文字コードの違いなどから、両立ができませんでした。
前
のVB6迄であれば、何も考えずにShift-JISで両立できたと思いました。 .NETはUNICODE(UTF-8、etc)が標準でして、 他の
文字コードは何やらやらねばならぬようでして、今回は勉強している時間も無いしオマケソフトだったので英語コメントで許してもらいました。
まあ、オブジェクト指向でカプセル化や多態性などを利用して構造化しやすい、標準でマルチスレッドも使えるなどメリットも大きいわけですから、このくらいはガマンしなけりゃならないんでしょう・・
いつも参考にするサイト: どぼん!のプログラミング道
d3forumの後継フォーラム・掲示板モジュール、「xcforum」を作り始めました。
自分にはかなーりハードルが高いのですが、 facebookのグループで色々相談しながらできそうなんで、もしかしたらできるかも。
それに、「factory」という、モジュール自動生成サイトがるのでこれを利用します。
で、今後の参考になるかもしれないので、できるだけメモを残しておきます。
...
仕事で、シーケンサからRS485マルチドロップ通信にて、とある制御機器と通信することになった。
シーケンサの計算機リンクユニットは、元々はその名の通り計算機(コンピュータ)との通信を目的に開発されてきたものであって、シーケンサは割と我儘言ってもコンピュータ側でプロトコルなりを調整してくれるはずであった。
しかし、相手が制御機器だとそうはいかない。 伝文にチェックサムの有/無混在していたり、ACKのみ送信してきたり要求してきたり、色々な仕様に対応しないといけないから、きっとアウエイな仕事の進め方をせざるを得ないんだろう。。と思って三菱のコールセンタで相談したところ、今回は想定していた「無手順」方式ではなく「通信プロトコル」方式の通信を使うことで解決できるとわかった。
この機能、GXWorks2の「ツール」-「インテリジェント機能ユニット用ツール」-「シリアルコミニュケーションユニット」-「通信プロトコル支援機能」 で設定・デバグツールが開いて使える。
(以前のGX-Developer1には付属せず、別途Configulator-SCというソフトを購入する必要があったのだが、さすがに新しいほうのWorks2だと同梱されていたので助かった。)
シーケンサと通信シミュレーションを行うための、PC上のシミュレータはVB.netで作る。 VB.net2005以降にはSerealPortコントロールが使えるようになっているのでまあこれで十分。以下の参考サイトのサンプルコードをベースに、ASCIIコード通信→バイナリー通信に変更して、受信データに応じて返答を送信するように作り込む。
画像は、受信したバイナリデータをHEXデータにしてテキストBOXに表示してみたところ。
参考:VB.NETでシリアル通信を行う(金澤ソフト設計)
シーケンサとの通信に、USB-RS485コンバータ(UTS-485TB-V2)を購入。 このメーカーのは、USB-RS232Cコンバータでも実績があり間違いない。 4,500円程なのでお財布にも優しい。
通信とかパソコンのプログラムは本職ではないけど、色々勉強しながら作り上げてゆくのは大変だけど楽しいものだ。
(余談)
- Sharp Develop
こんなSDKがあったのを知らずにいた。 VisualBasic Express Editionも無償なので良いのだが、インストーラを作ることができい。 その点、Sharp Developは「Wix」という使い辛いけどインストーラを別途追加すればできるようになる。
(参考)セットアッププロジェクト-WiX(余暇でSharpDevelop)
- チェックサムでXOR方式
ググってもなかなかわからなかった、XOR方式のサムチェック。 1の補数とか2の補数とかは情報あるけどこれはなかなか出てこない。 結局、三菱のマニュアルに書いてあった「水平パリティ」がそれだと判明。(汗)
(参考)誤り制御について(ネットワークの基礎)
アップデータモジュール「xupdate」は、6月23日に予定の XOOPS Cube conference 2012 の席上で発表が予定されている、Xoops X (ten)に同梱されるユーティリティ系モジュールです。 (現在開発進行中ですので、まだ本番環境には使わないでください。)
これをXCL (Xoops Cube Legacy) 2.2 以降にインストールすることで、他のモジュールやテーマのインストール、アップデートをFTPクライアントを使わずに迅速に行うことが可能になります。
え、どこかで見たり聞いたりした話だった? ええそうです。wordpressなどではずいぶん以前から採用されていた仕組みですね。XOOPS Cubeもようやくそこに追い付くわけです。
...
山形県内の某所への出張、現地調整含め2週間の業務が全て終了しました!
思えば、4月末に見積もりを出した時は、現地近隣の競合他社との競争なのでまあ受注は難しかろうと思っていたのですが、 6月~7月に仕事がぽっかり空きそうだったので、思い切って利益を最小限にカットして回答したところ受注できた案件です。 一人でやっていると出てゆくお金が少ない分、こういう時に融通が効きますね。
仕事の中身は、この時の日記にも書いたように、RS485で専用制御機器と通信せねばならず、それなりに手がかかるだろうけど何とかなるさ、とたかをくくっていたところ。。
RS485通信は、上記の日記のとおり事前シミュレーションが功を奏して、割とスムーズに立ちあがりましたが、 枝葉の部分で事前準備が完全に整っていなかったところに、お客様から早速の多数の要望の洗礼。。
耳栓必須な騒音職場で、耳栓していてもうるさくて、昼間の調整が終わったら早々に定時で引き上げ、夜な夜なホテルでソフトを作り上げる毎日でした。
でも終わってみれば、実にスムーズに完了し、予定より1日早い引き渡しとなった次第。 今日、20ページオーバーの画面操作説明書を暫定版で提出し、一区切り付きました。 成功のカギは、事前の準備で一番危うそうなところを重点的に済ませてあったことと、現地でお客様が早めに要望を出してくれたことでしょうか。
そして忘れてはならないのが・・ ここにきた時だけ味わえる、この肉!
たまには、良いよねー。
さてと、増えた体重の減量計画を立てなくちゃ・・
2週間前に製作を開始した、パッシブアッテネータが音出しできるレベルまで完成し、mbedコンパイラを使用したC/C++プログラムでLPC1114マイコンのUARTシリアル通信によるリモコン操作環境ができました。
出来上がったレシーバー側のアッテネータ基板、上面も裏面もなかなかの集積度。 自分の実力の割にはだいぶ頑張った感があり。 抵抗は結局、入手が容易な BispaのLGMFSAシリーズを、念を入れてパラで使うこととしました。
ボリウムを付けたリモコン側は、左側に7セグメントのボリウム表示を装備するつもりでスペースを空けてあります。
mbedのオンラインコンパイラで、C/C++プログラムをUSB/UART通信を使って適宜デバグしながら、リモコンボリウム側とレシーバー側別々に作っていき、接続してリレー切り替えが問題ないことを確認して音出ししました。
音質のほうですが、これならそこそこ聴けます! まだぼやけた感じですが、エージングですぐに良くなるので、これからが楽しみです。
あと、どうも-8dbの音量がおかしいです。 全体的に2.5dbステップくらいになっている気がする。 ふー。 大変だったけど、やればできるもんですな。
というところまで書いたところで、良く聴き込むと、どうもぱっとしません。
他の抵抗の銘柄を試したわけではないので結論を出すのは早すぎるのはわかっていますが、 ボリウム最大(0db)にして、MoodeAudioプレイヤーで32bitにアップサンプリングしてソフトウエアボリウムで絞るほうが断然音が良いのです。0dbの時でも、例の1個100円のリレー2個が通っていますので、リレーの接点による悪化ではないようです。
高域の質感、低域の空気感、、歴然とした差があり、ちょっとやそっとの改善では太刀打ちできそうにありません。
ということで、ラインアンプを物色していますが、その前に、UcD32MPパワーアンプがバランス入力だということを思い出しました。
こんなの入れたらどう変わるか、ちょっと興味あります。
・・ってことで早速ポチって昨日共立エレショップから届いた、不平衡→平衡変換ラインアンプキット。 さっさとはんだ付けして、接続して音出ししました。
一発で音は出ました。
音質は・・鮮烈だった高域はおとなしくなってしまいましたが、自作STEPアッテネータのdbSTEPが割とまともになり、アッテネータによる音質変化が減りました。音量を絞っていっても、割とまともな音質で鳴っています。 単に全体的に悪くなっただけなのかとも思いましたが、そうでも無いような気がします。
問題としては、不平衡回路のアッテネータ抵抗を通るとノイズが乗ります。 抵抗を通らないSTEPではノイズ無し。 この辺も音質に影響ありそうですね。 FBのごとうさんコメントによれば、GNDループの排除(金属ケース使用の一点接地)、DRV134内臓の50Ωの出力抵抗は合計160Ωになるように外部に110Ω付近で試聴しながら増設、ラインケーブル必須、とのことらしく、まだ調整が必要なようです。
ともあれ、一つの経験値としては、これも有りだと思います。 音の良い平衡ラインアンプ、簡単なのがあれば作りたい。。
難しいですが参考サイト:平衡プロジェクト
本日、朝5時から、公開サーバーのphp、mysqlのバージョンアップを敢行しました。
バージョン
- php 4.4.7 → 5.2.3
- mysql 4.0.25 → 5.0.27
巷のうわさで特に危険だったのは、mysqlのほうでして、 v4.0→4.1でマルチバイト文字の処理が変わっているためです。
今年の年初にxoopsを始めたとき、手順が悪くてmysql4.3にせずに旧バージョンで始めてしまったのが悔やまれますが、そろそろアップしないと機能に制約が出そうでしたので、時間がとれそうな今やっておこう、ということで始めました。...