• ベストアンサー

古い計量機器からのrs232cを使用したデータ入力について

知り合いが現在、15年以上たった計量器を利用してましてPCの入れ替えを機会に、この計量器からデータを取り込めないかと相談を受けました。計量器メーカーからは手書きのコネクタ配線図を入手しましたが 計量器側のコネクタ=フルピッチ50ピン pin1LSB~16MSB(バイナリ出力) 17~25(なし) 26~50(GND) コンピュータ出力  トランジスタ・オープンコレクタ  負論理、バイナリ と言う内容だけでした。 この出力から現在のPCへrs-232c入力として25ピンか9ピンへ取り出すためにはどのような結線のケーブルが必要でしょうか?私は16ピンからバイナリ出力では9ピンに入力不可能な気がします。今ある情報は全て書きましたがこの情報だけでの判断は難しいでしょうか? ちなみに、入力データ処理についてはvbで作成予定です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • matyrcry
  • ベストアンサー率47% (101/213)
回答No.9

仕様にある通りなら、16本ともデータラインでストローブライン(読むタイミングを 指示する信号)はありません。 更新周期毎にデータを書き換えるタイミングがあり、そのときにごく短時間ですがデータを 読み損ねるタイミングがあります。 慣れた(金と手間を惜しまない)設計者なら、確実な手順を決めてデータを保証する と思いますが、通信に時間がかかり、操作をコーディングする手間もかかり、取り合いのた めに双方向のIOを用意しないといけない(=信号の電源確保の問題が出るかも)ので、 連続して複数回読んで、一致すれば取り込む(いわゆる2回一致読み込み)で逃げているこ とが多いのではないでしょうか。 データ更新中か、データホールドの取り合い信号が用意されてなければ、そういう方法で 取り合うものとして設計されているのだと思います。 うちの古い製品(なぜか”計量器”だったり)もそういうのが多いです。

marokun
質問者

補足

ありがとうございます。 垂れ流しデータの取り込みロジックが分かってきました。 中盤ではあきらめかけてましたが、やる気になってきました。実際の作業はまだ1ヶ月ほど先になりそうですが、その時にはまたよろしくお願いします。

その他の回答 (8)

  • Pesuko
  • ベストアンサー率30% (2017/6702)
回答No.8

通常のパラレル転送の場合通信データの取りこぼしが無いようにするのが普通です。 これをパラレルの ハンドシェイク といいます。 例えば  (1)計測器がIOデータ 例1111111100000000 を出して保持 (2)計測器が ストローブ信号を 出す (3)PCが ストローブ信号を受信するまで待つ。 (4)PCが ストローブが立ち上がればIO信号をデータとして読み込む (5)PCが データを2バイト読み込んでストアする。 (6)PCが 読み込み完了信号(ACK)をだす。 (7)計測器が ACKを受信するまでストローブ・データを保持する (8)計測器が ACKを受信すると ストローブをOFFする。 (9)計測器が ストローブをOFFすると (1)に戻り次の1ワードデータ転送に移行する。  つまりPC側でOUTがひとつ必要なのです。 貴方が言うように 計測器が垂れ流しの場合データがまともに受信できません。 ひとつの方法として ストローブのタイミングを固定時間で出す場合もありますが、受信側がストローブタイミングより 十分早い処理が可能で無いといけませんし、何処かでタイミングがずれると修復不可能になるので通常しません。 また(2)でストローブが必要なのは (1)で出力した16Bitデータが電気的に全て出力されるのにμsecオーダーで ばらつくのです。 したがって 全てが正常に出力されたタイミングでストローブが出てきます。(出力機器により時間が違います) このストローブ出力タイミングが機器ごとに違うために、同期が取れないので受信完了としてACK(アック)を帰してます。 PS 私が最初に書いた開発環境とはPLCの開発環境です。 一番単純な ハンドシェイク http://www.picfun.com/parallel01.html プリンタポート(8bit)の割り付け http://www.picfun.com/parallel02.html 計測器に良く使われる GP-IB(パラレル)規格 http://www.orixrentec.co.jp/tmsite/know/know_gpib.html

marokun
質問者

補足

詳しい説明ありがとうございます。 計量器の仕様を見るとストローブの発信とackの受信ができそうにないので、なんとか垂れ流しを受信できるようにしようと思います。最悪受信に失敗してもpc側で修正可能な仕様にするつもりですし、そこまで重要データでもありませんので。 詳しいお教えのおかげで少しやる気になってきました。 pc側のアプリを作ってから挑戦しようと思います。 コンテックのボードも準備しなくちゃ。

  • matyrcry
  • ベストアンサー率47% (101/213)
回答No.7

パラレルIOを操作した経験はおありでしょうか? '1' を伝えるのに、 シリアル伝送では1本の信号線をON/OFF状態を一定時間毎に00110001のように 変化させて伝えますが、 パラレル伝送では8本の信号線のON/OFF状態を同時に00110001のようにして 伝えます。(受ける側も8本を同時に読んで解釈します) 信号を読むタイミングは別の信号を1本使って伝えることが多いですが、ない場合 もあります。(使う人が勝手に決めます) シリアル伝送は232Cならスタートビットで始まりストップビットで終わるなど 大半で伝送の規則が定義されていますが、パラレルの場合は規則なしで自由に使わ れることが多く、対象器物の動きに合うように自分で信号線を操作してするのが普 通です。 USBやイーサのようなシリアルと違って運用規則自体が曖昧なので、単純な変換 アダプタのようなものはないですよ。

marokun
質問者

補足

パラレルIOの操作経験はありません。 シリアル・パラレルの動作を理論では分かってるつもりですが、パラレルが規則なしで使われていることが多いのは知りませんでした。 そこでデジタル入出力IFが必要になるんですね。 おかげで今、必要なことが理解できました。 デジタル入出力IFが私に扱える程度のものか確認してから導入可否を決めようと思います。

  • Pesuko
  • ベストアンサー率30% (2017/6702)
回答No.6

ごめんなさい、ストローブとか少しoutも必要でしたね。 とりあえず コンテックPIO-32/32L 35000円 32点カード http://www3.contec.co.jp/B2B/ConIWCatProductPage_B2B.process?Merchant_Id=1&Section_Id=2&pcount=0&Catalog_Id=2&Selected_CatalogMaster_Id=&Product_Id=715

参考URL:
http://www3.contec.co.jp/B2B/ConIWCatProductPage_B2B.process?Merchant_Id=1&Section_Id=2&pcount=0&Catalog_Id=2&Selected_C
marokun
質問者

補足

計量器からの垂れ流しデータのpcへの入力のみと考えてましたので、outは必要ないと思います。 だとしたら入力のみ16のIFでよいでしょうか。 あと、開発環境と言われましたが、pcとソフト類だけじゃだめなのでしょうか。ある程度は自宅で作成して現場で調整テストを考えてます。

  • Pesuko
  • ベストアンサー率30% (2017/6702)
回答No.5

marokunさん 市販のパラレル<>シリアル変換を使用とおっしゃってますが、市販品の多くはプリンター用の8bitパラレルのはずです。 今回16BITのワード転送になりますから、無理ですよね。 私がPLCを使うといったのはコンテックさんなどのPIOボードがかなり高額なためもあります。 開発環境をお持ちなら安い高速PLCですと数万円で済みます。 PLCがパラレル<>シリアル変換機として作動するわけです。 またPLCを使用しました場合、ACK等が特殊タイミングでもプログラムで組んで変更できるから柔軟なんです。 marokunさんがVBでハンドラを作成可能ならPIOボードだけで済みますからそのほうが安いかもしれません。 例えばコンテックの PI-32L が定価23000円 in32点 

参考URL:
http://www2.contec.co.jp/products/products.cgi?HTML=DTL&KATA=PI-32L(PCI)H
marokun
質問者

お礼

なるほど、それでシリアル-パラレル変換器は36ピンだったのですね。 PLCやPIOとなるとちょっと敷居が高そうな気が…。 ハンドラ作成にどの程度手間が掛かるかも分かりません。コンテックのサイトで情報を集めて出来そうか考えてみます。

  • matyrcry
  • ベストアンサー率47% (101/213)
回答No.4

PCベースでのPIO取り合いは経験が無いのであま り参考にならないかもしれませんが... 16 オープンコレクタ PC ボード くらいでGoogleで検索かけると拡張ボードの紹介記事 が結構ヒットします。 自分なら三菱かキーエンスあたりの小さいPLCを使 うんですが、PLCの準備環境がないならインターフ ェースあたりのPIOボードを付けて処理したほうが、 質問主さんの分野的に楽そうと思います。 省配線の分野で232C(かイーサ)で操作するリモ ートIOなんかどっかありそうな気もするんですが、 ちょっと見つからなかったです。

marokun
質問者

補足

お答えありがとうございます。 PIOボード?検索して見てみましたがピンと来ません。 どうも私のよく分からないところまで来てしまいました。 ケーブル結線とパラレル-シリアルコンバータで、後はソフトで何とかと思ってましたがそんな簡単な話じゃないんでしょうか? ある程度は調べて実行する覚悟がありますが、あまりに時間とお金が掛かりそうなら断念しようかと思います。

  • Pesuko
  • ベストアンサー率30% (2017/6702)
回答No.3

まあ通常の処理なら早いPLCが妥当だと思います。 16Bitのパラレルで、多分ストローブが1chでしょうか? IOをストローブでワード転送し、データがバイナリーならそのままDTエリアに転送して、レジスタをストローブ毎にシフトすればいいと思います。 データ量が大量なら100ワード単位でバッチ処理的にPCへデータ転送をかけて行き、転送処理が終わった所から初期化するようなイメージでしょうか。 うちの課がすごく得意な部分ですが、ここでは受注活動も出来ないので・・・・

marokun
質問者

補足

お答えありがとうございます。 うーん、PLCが必要な程のことではないと思ってました。 ストローブ?トリガとなる出力があるのか入手した資料からは分かりませんでした。(質問に載せたのが現在の全資料です) データ量はごく少量です。計量した重量最大6桁程度までの数値のみです。 ケーブルは加工が必要なようですね。 フルピッチ50から16本をシリアル・パラレルコンバータの36ピンに繋いでシリアルデータとして取り出す。でも、36ピンのピン配列も分かりません。ネットで調べて何とかなるのかなあ。 制御系のプログラミング経験はありませんがフリーのシリアル通信モジュールもあるので何とかなるかと考えてました。本当に出来るんでしょうか? 仮に発注できるほどの仕事でもありませんしね。 予算は6桁行かない位なので。

  • c80s3xxx
  • ベストアンサー率49% (1634/3294)
回答No.2

出力は16ビットのパラレルデータなので, そのままでは当然 RS232C では取り込めません. ピン数の問題ではなく,ポートの仕様の問題です. 解決策は,シリアルエンコーダを作るとか買うとかするか, パラレルインタフェースボードを PC につけるかでしょう. パラレルインタフェースボードは,汎用品がいろいろな 会社から出ています.値段はピンキリですが, けっして安いものではありません. VB でアプリを作るなら,インタフェースボードを 操作するための ocx なりがボードに付属している事を 確認してから買うようにしましょう. プログラミングの手間がまるで違うので. それはそれとしても,計量器側の信号のタイミングとか そういう情報がないと,やっかいですね. たとえば,データが書き換わったときにそれを知らせる 信号端子とかもなにもないわけですか. プログラム側で,取り込み時にラッチとか考えないと 誤動作しそうです.

marokun
質問者

お礼

やはり、この情報では機器から16ビットのパラレル出力されるって事ですよね。パラレルインターフェースボードを少し調べてみます。しかし機器+開発コストが6桁以上掛かるならあきらめようかと思います。 機器側にしても、出力タイミングは機器のあるボタンを押した時らしいですが、メーカーの事情で詳細情報がこれ以上得られるか不明です。手探りでの作成になりそうなのでリスクが大きそうならやめておいた方が無難に思います。何しろ昭和の時代の機械ですし、出力ポートが生きているかどうかも分かりません。 的確なアドバイスありがとうございました。

noname#65504
noname#65504
回答No.1

プログラミングについては詳しくないのですが、私の所では、 RS-232C → USB 変換ケーブルを用いています。 これではだめでしょうか?

参考URL:
http://www.iodata.jp/prod/mobile/serial/2003/usb-rsaq2/index.htm
marokun
質問者

お礼

お答えありがとうございます。 usbもシリアル入力なので無理だと思われます。 やはりパラレル-シリアル変換が必要なようです。