• 締切済み

プロトコルの決め方(RS232C)

VB6.0を使用して、画像処理プログラムの開発を行っているのですが、処理結果を別機器(PLC)へ送信しなければならなくなりました。漠然とRS232Cでデータ通信を行おうと考えてたのですが、上司から「まずプロトコルを決めないと、232Cもクソもないやろ」と怒鳴られました。232Cの使用を前提として、プロトコルを決めたいと思うのですが、上司に説明する文書としてどのような書式を用いればよいのか見当がつきません。(トホホ明日中に説明しろと言われております) VBと別機器の動作としては、別機器からスタート信号をもらい、PCで画像撮像・処理を行い、処理データ(小数点以下3位程度×2個)を別機器へ送信するといったものです。 上記動作そのものが「プロトコルを決める」ということではありませんよね?スタート信号や処理完了信号の文字を決定するところまでを含めて「プロトコルを決める」ということなのでしょうか? アプリケーションとしては複雑なものではないのですが、いかんせん基本が分かっていないので、私の説明も理解していただき難いものがあるかと思います。上記動作のアプリケーションに似たプロトコルのサンプル文書があれば非常に助かるのですが。。。 よろしくお願い致します。

みんなの回答

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

サードメーカーの出しているOCX系は遅いので うちのSEは自作してます。 PLC側の指定したアドレスのデバイスDとかWに データーを書き込む・または読み込むハンドラーのような物です。 三菱側の設定もモード1・2・3・4とあったはずで うちの会社はモード4を使用してます。 通信電文のヘッダーに%Wとかコマンドを乗せて+アドレス+データ+BCC 見たいな感じ。 そうするとPLCから書き込み完了の電文が帰ってくる。 三菱の通信ユニットはRS-422が基本なのでPC側の直近に 422-232のコンバーターを入れる。 http://japan.moxa.com/product/TCC-100.htm フェニックスコンタクトの↓なんかは、DINレール取り付けで 制御盤に取り付けやすい http://eshop.phoenixcontact.com/phoenix/treeViewClick.do;jsessionid=FhmFnL0Gy0FLG13vBFtd260zVJqTvm9LLmJsp2MpQWspCL4h2H9r!-43163078!NONE?UID=236784&parentUID=236783&reloadFrame=true

  • kiki_s
  • ベストアンサー率59% (147/248)
回答No.5

三菱製PLCが基本って盤屋さん?多いですね。 うちはオムロンが基本です(^^;; メーカの対応がいいから気に入っています。 >ところで「OCXなど」って何でしょうか? OLEコントロールの一種です。 OLE 2.0に準拠したソフトウェア部品で、呼び出して利用する外部コマンドと同じ様なものです。 正しくは「OLEコントロール」といいますが、 拡張子がOCXになっていのるで、こう呼ばれるようになっただけです 正確には、「Object Linking and Embedding」といいますが、 今はOLEコントロールもActiveXコントロールと呼ばれています。 必要な情報を渡してやると、通信の部分は意識しなくても、 読み書きが可能になりますが、 直接データメモリなどに書き込みますので、 注意しないと駄目な場合もあります。 OLEコントロール(ActiveXコントロール)は、 フリーソフトにもあるみたいです。

kyabanock
質問者

お礼

ご回答ありがとうございます。 盤屋ではなく自動機・検査機のメーカです。要求仕様・スピードによってマイコンやPC、PLCを使い分けたりあるいは併用したりしています。 ActiveXコントロールですか。。。最近、PC&USBカメラからの画像取込でDirectX(DirectShow?)を使ったりしたんですが、双方ともにさっぱり分かりませんです。お互い関係あるのかな?やっぱ勉強必要です。 また機会があれば色々と教えてください。

  • kiki_s
  • ベストアンサー率59% (147/248)
回答No.4

横レス申し訳ありません。 プロトコルには、ハードとソフトがあると思ってもらえばよろしいかと。 Ethernetを使うかRS232Cを使うか、それともUSBを使うかなど、 どの様なインターフェースにするかがハードのプロトコルで、 例えばRS232Cを使う事にした時、 通信情報の内容をどの様にするかを決めるのがソフトのプロトコルです。 三菱製PLCとの事ですが、情報量にもよりますが、 コマンドから通信させるのは力業の部分も多々あります。 内容によっては、OCXなどを利用する方が、 簡単に済む事が多いですね。 三菱は最近触らなくなったので、 覚えていませんが、OCXがあったと思います。 確か、何かのソフトにバンドルされていて、 価格が結構高価だったような・・・ サードメーカなら MELSEC OPCサーバ http://www.faweb.net/opc/opcserver_melsec.html なんてものもあります。 オムロン製であれば、CompoletとFinsGatewayで簡単にPLCへ読み書きが出来ます。

kyabanock
質問者

お礼

ご回答ありがとうございます。やたらと「プロトコル」にこだわってしまってすみません。 オムロンがよさげとのことですが、客先からの指定がない限り、うちでは三菱が基本みたいなんです。。。 ところで「OCXなど」って何でしょうか?

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

http://www.fukufukudenshi.com/LineMonitor/RS-232C.html とりあえず、これを読んでみてください。 上司の方もあなたも「プロトコル」を勘違いしています。 RS-232Cを使うと決めたのであれば、ハードウェアよりのレイヤ(1と2かな?)の「プロトコル」を決めたことになります。 あとは、ソフトウェアよりのレイヤの「プロトコル」を決めればよいのです。 上のURLを参照していただければわかりますが、パソコンのCOMポートは同期通信をサポートしていませんので、ASYNC(非同期通信)しかありえません。 ので、スタートビット・ストップビット・パリティビット等を決めれば環境が整います。 非同期通信ですから、勝手にデータが流れます。 さて、ここで問題があります。 非同期通信しかサポートしていませんから、どうにかして「ハンドシェイク」しなくてはいけません。 ここで上司の期待している「プロトコル」の出番です。 「データ送信開始」コマンドはどうする? 「データ送信終了」コマンドはどうする? 「相手機器と【ちゃんと受け取れた】かの確認」はどのようにする? などなど、山盛りあります。通信相手の仕様に依存するので、 サンプル文書はないと思います。しいていうなら、相手機器の通信機能マニュアルになるとおもいます。

kyabanock
質問者

お礼

ご回答ありがとうございます。 やはり私は「プロトコル」という言葉の意味から正しく学ばなければならないようです。ご紹介いただいたURLも昨年末に一度、目を通しているのですが・・・。ただ、PC・マイコン・PLCのプログラミングや基板設計まで簡単にやってのける上司には何も勘違いはないと思います。(私が「簡単に」なんて言うこと自体、ウソ臭いですかね) プロトコルとは、ご回答いただいた<<「データ送信開始」コマンドはどうする?・・・>>を定めたものそのものを指すのでしょうか?例えば、レベルは断然違うのですが、IPやTCP、HTTPと呼ばれるプロトコルはこれと同義で、EthernetがRS232Cに対応していると考えております。 また、プロトコルはハードよりとソフトよりのものがあるとおっしゃっています。まずRS232Cを選択したということが、「プロトコルを決める」ということの一部として理解してよろしいでしょうか? もう少し詳しいことを申しますと、実はPLC側のハード設計が今日から始まっており、それに対してこちらから通信仕様をまとめ、一度打ち合わせを行いたいのです。そういった意味も含め、資料としての「サンプル文書」をいただければなぁと思う次第なのであります。

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.2

PLCって何のPLCですか。 プログラマブルコントローラならば その仕様書にRS232C送受信の手順すなわち プロトコルの仕様も載ってるのでは?

kyabanock
質問者

お礼

ご回答ありがとうございます。 Pesukoさんへのお礼でもその他詳細を追記させていただいております。

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

>と怒鳴られました 何で怒るのか良く解らないけど・・・ 相手のPLCは決まってますか? 三菱かな? 三菱ならRS422になると思うけど、メディアコンバーター通しますか? 232CならFXに直接ですか? 三菱のプロトコルは理解してます? DとかWに画像処理PCから指定アドレスに書き込みに行く事になると思うけど。 >上記動作そのものが「プロトコルを決める」ということではありませんよね これらを私たちは動作フローと呼んでいます。 回答にならないけど、決まっていない事が多いように感じます (ここに書いてないだけ?)

kyabanock
質問者

お礼

早速のご回答ありがとうございます。 三菱Qシリーズで、PLC側は別担当者です。シリアルコミュニケーションユニットを取り付けるようです。 メディアコンバータ・・・PCとシリアルミュニケーション直接のつもりでした。 三菱のプロトコルっ???という感じです。 CC-LINKで直接アドレスへ書き込みの経験があるのですが、今回はPCにCC-LINKボードを取り付けず、PCのCOMポートで対応したいと考えています。 引き続きご指導よろしくお願い致します。

関連するQ&A

  • ハイパーターミナルによるRS-232C通信

    仕事の関係でアラーム用PCからRS-232Cで受けた信号を特型I/Fユニットで分配して4つの業務用機器を制御するというこの特型I/Fを発注したのですが 現場に納めたところうまく動作していないと言われ近日中に動作チェックをしたいのですが当方営業職なものでやり方がよくわかりません。 (製作元ではアラーム側と同じ信号を出してI/Fから信号がでることを確認済) ハイパーターミナルを使えばできそうだということなのですがどうすればいいのでしょうか。 わかりやすいサイトなど教えて頂けないでしょうか。 USBに接続するD-sub9ピンの変換コネクタは持っています。 通信プロトコルの規格は以下になります。 非同期:転送レート9600kbps:データ長7ビット:ストップビット1ビット:パリティ偶数:フロー制御RTS/CTS(ケーブル端末処理) 動作確認したいことは下記です。 1:アラームPC側から11バイト長のメッセージが送られてくるらしいので、PCと直接繋いでコマンドが正常にきているか受信したい。 2:1が正常なことを確認できた上で特型I/Fの出力から同様のコマンドが出るのかを確認したい 3:アラームPCのかわりにノートPCを繋いでメッセージを送信したい。 他に必要な情報あれば指摘下さい。 よろしくお願いします。

  • RS485とRC232Cについて

    ここのカテゴリーでいいのかわかりませんでしたが、質問させていただきました。 私が今使っている機器は家庭用及び産業用の空調制御のマイコンですが、RS485のインターフェイスがあります。現状使用していないのですが、ここには各空調機器の運転時間や運転動作回数、週間スケジュール(タイマ)などの機能が搭載されています。この機能を使用するにはどうしたら良いのかわかりません。 RS485からRC232Cの変換でノートパソコンに信号を入力することができるようですが、どのようなソフトでこの信号を見ることができるのでしょうか?また、信号が生のデータの場合、この空調制御マイコンのメーカーに何をどうきいたらいいのかさっぱりわかりません。通信について、関連のサイトを教えていただけませんか?

  • WindowsAPIでシリアル通信プログラム(RS232C)

    Windowsで、VC++やVBを使わずに普通のC言語で簡単な文字列(コマンド)を外部機器に送信するプログラムを書きたいのですが、WindowsAPIというものの存在は知っているものの全くもって触れたことがありません。 取り合えず、パソコンから外部機器に文字列を送信することが出来ればよいのですが、すぐ実装に役立つような書籍などはありませんでしょうか? VCやVBでシリアル通信プログラムの解説をしている書籍は見つかるのですが、WindowsAPIで行っているものが見受けられません。 もし、ご存知でしたらよろしくお願い致します。

  • RS-232Cの分岐はできますか?

    はじめまして、kouichi125と申します。 早速ですが、PCとPCにてRS-232Cの通信をする際、どちらか1方のRD信号のみを分岐させ、もう1台の別のPCでも受信したいのですが可能なのでしょうか? 要するに、親PCからの送信された信号を、子PC2台で受信したいのです。 その他の信号線が絡むと、1対1の通信しかできないのは分かるのですが、受信する信号線(RD)だけだと、単純にケーブルの皮膜を剥いでRDと、GNDをそれぞれ、別のコネクタに分岐すれば出来そうな気がするのですが、そのような感覚で良いのでしょうか? 聞いた話だと、20k程の抵抗を入れて電流を制限しなければならないそうなのですが、いまいち意味が分かりません。 この分野はほとんど素人同然なので、是非、みなさんのお知恵をお貸しください。 また、参考になりそうなURLだけでも教えて頂けると助かります。

  • VB2005でWin32APIを用いてRS-232CのRTS信号を、デ

    VB2005でWin32APIを用いてRS-232CのRTS信号を、データ送信中だけHIGHにさせるプログラムを作成中です。 色々調べて、Win32APIを使うことで、それらしい動作をさせるプログラムを作れることが分かり、色々調べてコーディングしたのですが、上手く動きません…。処理の流れは以下のようになっています。 (1) CreateFile()関数でCOMを開く。   (CreateFile()の「フラグ」には"FILE_FLAG_OVERLAPPED"を指定) (2) CreateEvent()関数にてイベントオブジェクトを作成。 (3) EscapeCommFunction()でRTS信号をHIGHに設定。 (4) WriteFile()関数でRS-232Cへデータを送信する。 ※ここまでは、オシロスコープにて正しく動作していることを確認しています。 (5) データ送信完了を待つために、SetCommEvent()関数で"EV_TXEMPTY"イベントマスクをセット。 (6) WaitCommEvent()で送信完了を待つ。   ⇒WaitCommEvent()関数が、データ送信完了を待たずに抜けてきてしまう(Falseがリターンされる)…。 (7) そこで、WaitForSingleObject()を使ってイベントハンドラが"シグナル状態"になるのを待つ。   ⇒タイムアウトに"INFINITE"を指定すると、無限待ち状態に陥ってしまう。   ⇒また、タイムアウトに"1000"を指定すると、約1秒後に"WAIT_TIMEOUT"が返ってきてしまう。 WriteFile()関数、そしてWaitCommEvent()関数の引数には、OVERLAPPED構造体へのポインタを渡しているのですが、思うように動いてくれません。 ※Win32APIの関数宣言の記述方法(データ型など)が誤って、このようになっていたりするのでしょうか… どなたかヒントでもお教えいただけると、大変助かります。 以上、よろしくお願いいたします。

  • シリアル通信ができません

    VBの5.0を使っています RS232Cケーブルで計測器の制御・情報取得を目指していますが上手くいきません このサイト(http://spectrum123.at.infoseek.co.jp/vb/vb_5/vb_5.htm) を参考にしています 現状では実行すると制御機器が「Remote Mode」を表示するので何らかの信号が出ていることは間違いないのですが 計測器の説明書にしたがってコマンドを送信してもリアクションがありません どうか、よろしくお願いします

  • Visual Basic 2010を使ってRS-232Cとの通信をした

    Visual Basic 2010を使ってRS-232Cとの通信をしたい。 現在、機器とPCとの通信のやりとりをするため、機器のマニュアルを見ながら悪戦苦闘しています。 通信のやり取りについては、マニュアルにVB6を使った例が書いてあります。 しかしVB6が手に入らなかったので、Visual Basic2010を現在使っています。 マニュアル(VB6向け)には ・On the Project Menu, click Components to bring up a list of additional controls available in VB6. ・Scroll through the controls and select Microsoft Comm Control 6.0. Select OK. In the toolbar at the left of the screen, the Comm Control will have appeared as a telephone icon. ・Select the Comm control and add it to the form と書いてあります。 よく分らなかったのですが、上のメニューの「Project」⇒「Add reference」を選び、「COM」の中にあった「Microsoft Comm Control」を選びました。 が、左のツールバーには電話のアイコンは出てきませんでした。 2010の場合、VB6と違って別のやり方をしないといけないのでしょうか? ご存知の方がいましたら、教えて頂きたいです。よろしくお願いします。

  • RS232C通信(PC⇔PLC)

    PCとPLCでシリアル通信を行っています。PLCからPCへステータス受信要求し、PCから正常アンサーがあればPLCからPCへ処理開始指令コマンドが出力されるというプロトコルです。実際には、PC側ステータス正常の場合、PLCへの正常アンサーを出力するところまでは行くのですが、その直後にPLCから送信されているはずの処理開始指令コマンドを受信することができません。一連のコマンド送信・受信の間隔が狭すぎるのかと思い、PLC側で処理開始指令コマンド送信前に10msecのウェイトを設けるとPC側で受信することができました。(PLC側の送信が悪いのか、PC側の受信に問題があるのか不明ですが、、、) シリアル通信では、上記のような問題が発生しないように送受信の間隔等なんらかの規約が定められているのでしょうか??ウェイトを設けることなく通信を行いたいのですが、考えられる対処法を教えていただけませんでしょうか。よろしくお願い致します。 なお、通信機器の仕様は以下の通りです。 PLC:三菱シリアルコミニケーションユニット QJ71C24N-R2 PC:WinXpSP2、COMポート、VisualBASIC6.0のCommイベントによりデータ受信(10msecウェイトなしでは、処理開始指令コマンド送信時にCommイベントが発生しませんでした。) ※アスキー文字、PLC・PCともに送信終了コード(CR+LF)でバッファデータ読込み

  • RS-232Cのストレート結線(オス-メス)

    お世話になります。 パソコンからある機器にRS-232Cを使い接続しようとしています。 機器側説明書には「ストレート結線のケーブルで接続」とあります。 しかし、パソコン側はオス、機器側はメスのコネクタが付いている為 当然ですがケーブルは「オス-オス」「メス-メス」ではなく、「オス-メス」に なります。 ストレート結線と言う事なので、同じピン(位置)に同じピン(位置)の信号線が 接続されていれば良いと言うことなのでしょうか。 それとも、ケーブルについているコネクタ同士をくっつけた(差し込んだ)時に 信号線がループするような状態にならないといけないのでしょうか。 それともまったく違うのでしょうか。 ご存知の方がお見えになりましたら、よろしくお願いします。

  • WinSock プロトコルスタックバッファについて

    開発環境 XP、VC2005、C/C++、WinSock WinSockでネットワークプログラミングをしています。 例えば、下記のようなコードでデータを送信するとします。 int send_byte = send(socket, buf, byte, 0) このとき、変数byteには1024が入っているとします。 上記のコードをループさせてデータを送信すると、 しばらくsend_byteには byteと同じ値1024が入っています。 でも、プロトコルスタックバッファが満杯になり、 send()が処理しきれなくなった場合に、 byteは1024なのに、send_byteが例えば500などになります。 つまり、中途半端に送信してしまいますよね。 これはWinSockの仕様だと思いますが、 できれば中途半端には送信したくないのです。 このように中途半端に送信しない方法はあるでしょうか? send()するまえにプロトコルスタックバッファの空きが調べられれば なんとかできそうな気もするのですが・・・。 よろしくおねがいします。

専門家に質問してみよう