• 締切済み

TeraTerm シリアル通信の垂れ流しデータ取得

ターミナルソフト「TeraTerm」の「マクロ」を使用して、RS-232C 経由でシリアルポートに接続された端末機器(測定器)と通信するソフトウェアを開発中です。 「マクロプログラム」の中から「あるテキストデータ」を送信(sendln)すると、端末機器からは時々刻々の測定値データを1行ごとに連続して垂れ流しで返してくれる。 この垂れ流れてくるデータを取り込んで、ある種の判断処理プログラムを制作したいのだが、この手の言語に不慣れなこともあって、相談させてください。 一般的な場合、コマンド「recvln」を発行するとシステム変数「inputstr」に受診データが格納されるのだけど、今回のような垂れ流されるデータのの場合も同じようなことをするのだろうか? コンソールに時々刻々と垂れ流しデータが表示されているのだから、何か重複してしまう操作のように思えてならない。 もっとスマートな処理方法があるように思えてならない。 なるべくリアルタイムに近い処理をさせたいので、無駄な処理は省きたい。 ご教授やアドバイスをいただければ助かります。

みんなの回答

noname#206655
noname#206655
回答No.1

通常、垂れ流せれたデータが溜まると、割り込みが発生します。 その割り込みを受け取って1バイト受信します。 これをTeraTermにやらせようというのですね。 通信には「同期」と「非同期」がありますが、TeraTermで目的の事が出来るかどうか?VisualBasicではRS-232Cのモジュールが売ってると思います。VBは基本、割り込みが使えません。C言語なら割り込みを記述できますが、現実的ではないような。 貴殿や、貴殿の仲間でどんな言語が出来るのでしょう。 Windowsなどの言語の元では、厳密なリアルタイムは難しいと思います。

HitArts
質問者

補足

早速のご回答をありがとうございます。 開発言語は「VB」とか「C言語}ではなく、TeraTerm の「マクロ言語」を想定しております。 TeraTerm 画面をユーザーI/Fとして利用できるので、開発工数は極めて少なくなります。 取り急ぎです。

関連するQ&A

  • teratermマクロ 文字列分岐

    お世話になっております。 下記の件ご教授願えませんでしょうか? teratermを使いサーバに文字列を送り、返ってきた 文字列によって処理を行いたく、下記のようにマクロ を作成したのですが、どうやら、5行目にエラーが発生 してしまい中断という形になってしまいます。 --------------------------------- Prompt1 = '?' sendln 'y' setsync 1 recvln if inputstr = Prompt1 then sendln 'y' else end if setsync 0 --------------------------------- やりたいことは文字列'y'を送信し、 プロンプトで'?'以外の文字列が出力されるまで、 'y'を送信し続ける。 という内容です。 お手数ですがご教授願います。 ちなみにですが、teratermのバージョンは4.57です。

  • teratermマクロ でSQL?

    teratermマクロでLinuxサーバにログインして、 処理を実行し最終的にはファイルをはき出させる、という プログラミングをしたいと思っています。 そこで質問なのですが、「teratermマクロを使って、 Linuxサーバ上のデータベースにアクセスし、 SQLの命令を実行する」ということは可能でしょうか? teratermマクロのsendlnコマンドでSQLの実行が 可能かどうかを知りたいです。 ご存じの方いらっしゃいましたらよろしくお願いします。

  • teratermマクロでファイル一覧を表示させたい

    teratermマクロで、lsで取得したファイル一覧をmessage boxで出力させたいです。 しかし、recvlnを用いると、一行しか取得できないので、一覧を表示することができません。 この場合、どうすればよいでしょうか。 よろしくお願いいたします。 例 sendln 'ls -l test/txtfile' 結果→ 1.txt 2.txt 3.txt ‥‥ recvln recvln ←これだと一行しか取得できません。 messagebox inputstr '確認'

  • [teraterm] waitコマンドで停止しない。

    お世話になっております。 現在teratermのマクロを作成しているのですが、waitコマンドがうまく動いてくれない箇所があります。 どなたか解決策をご教授いただけないでしょうか。 【質問】 UNIX上にてシェルを実行後、コマンドプロンプトが戻ってきた時点で"echo $?"にてシェルのリターンコードを確認するマクロを作成しています。しかし、シェルの終了に時間がかかるためか、コマンドプロンプトが戻ってくるのを確認せずに"echo $?"を実行してしまっています。 【プログラム(該当箇所)】 timeout=20 sendln 'シェルの実行' wait ']$ ' sendln 'echo $?' wait '0' 【コンソール上】 ]$ シェルの実行 echo $? シェルの実行結果 ]$ 以上、よろしくお願いいたします。

  • シリアル通信でのデータ取りこぼし

    はじめまして。 現在、計測機器からシリアル通信で測定値を取得しています。 その測定機器は1秒間当たり、1000データ測定できるのですが、 プログラムで収集した際、取りこぼしが多く発生します。 取りこぼしがないよう収集するには どうすれば、いいのか、教えていただけないでしょうか? よろしくお願いします。 動作の流れは  (1)測定ボタンを押す  (2)1秒間測定する (1000データ) → 保存 ◆教えてほしい箇所  (3)1秒後自動的に終了する 環境  OS:Windows XP  プログラム:VB.NET 2008  通信:RS232C  測定データ1個当たり:X.XXXX (6桁)

  • teratermマクロをVBAで実行

    teratermマクロについてご教示願います。 teratermマクロを組んで、Linuxサーバにログインして処理をする.ttlファイルを作成しようと思っています。 その.ttlファイルを、VBAのプログラムから実行することは可能でしょうか? やりたいことは、EXCELのシート上にある「実行」ボタンを押下すると、VBAからteratermマクロが実行される、という処理です。 可能かどうか教えてください。また、もしご存じであればその際の VBAの組み方も同時にご教示いただければと思います。 よろしくお願いいたします。

  • TeraTermのマクロで制御文字のやり取り

    TeraTermマクロの初心者です。 マクロで機器と通信しようとしたのですが上手く行きません。 機器はデータの先頭に[STX]、終端に[ETX]が付く、次のような文字列を 送ってきます。  [STX] データ文字列 [ETX] これに対して、TeraTerm側からは[ACK]の文字を送らなければなりません。 そこで次のようなマクロを作ってみましたが、駄目でした。。  1: while 1 ;無限ループ  2: wait #3 ;ETXを待つ  3: send 6 ;ACKを送る  4: endwhile 2行目の後に、pause文を入れたりして調べたところ、どうも2行目が実行 されていないようです。 分かる方がいましたら、教えてください。

  • tera term マクロのinputbox

    teratermマクロでinputboxを使い、 機器へ接続しています。 何も入力されない場合、終了させたいのですが、 if inputstr = "" goto end ではダメみたいなのですが、 どなたか良い方法ございましたら、 ご教授のほど宜しくお願い致します。

  • Teraterm[connect]応答がない

    WinServer2008(32bit)でteratermマクロを起動しています。 マクロファイルの内容(ファイル名:MACRO.TTL) 1>>filedelete 'NM_00.LOG' 2>>connect 'xxx.xxx.xxx.xxx:22 /ssh /2 /auth=password /user=xxxx /passwd=xxxx /timeout=20' 3>>if result<>2 goto timout_connect 4>>filedelete 'NM_01.LOG' ・・・中略・・・ 97>>timout_connect 98>>filedelete 'NM_99.LOG' 99>>end BATファイルの内容(ファイル名:MACRO_RUN.BAT) ttpmacro.exe MACRO.TTL BATファイルはteratermがインストールされた 「ttpmacro.exe」が存在するフォルダにあります。 上記BATファイルをWinServer2008(32bit)で動作をさせると 問題なくマクロの処理が実行されます。 この処理を端末を問わず行いたいとの要望があり webシステムを作りました。(silverlight5+VS2010C#) 実際の動作は下記の様なイメージです。 ・操作端末(Win7)⇒⇒⇒WinServer2008(32bit)⇒⇒⇒Teraterm接続先 ココでBATファイルを起動する事は出来たのですが 2>>の[connect]コマンドが無応答となってしまっています。 'NM_00.LOG'←消えている 'NM_01.LOG'←残っている 'NM_99.LOG'←残っている タスクマネージャーには ttpmacro.exe、ttermpro.exe、cmd.exeが残っています。 IIS(Ver7)、teraterm(Ver4.90)での設定等何か必要な事があるのでしょうか 宜しくお願いします。

  • シリアル通信におけるプログラム終了が遅い件

    今、Visual Basic6.0でシリアル通信を行うプログラムを作成しています。完成後に実行させると思い通りに端末からのデータを表示してくれるのですが、[切断]といったポートを閉じる操作をしたときにプログラムが終了するまでに30秒から40秒ほどかかってしまいます。ソースを書き直して再度実行するなど、終了するたびに毎回同じくらいの時間がかかります。Windowsのハイパーターミナルでもデータの受信・表示ができる上、[切断]ですぐに終了するのですが、自作のプログラムではそうはいきません。解決方法をよろしくお願いいたします。

専門家に質問してみよう