質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Q&A

0回答

2173閲覧

Node.jsでのシリアル通信について

TakeTakeTake

総合スコア23

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

0グッド

1クリップ

投稿2016/07/28 13:16

Node.jsを使ってシリアル通信を行いたいのですが、C言語で以下のような感じのコードと同じ事をやりたい場合
どのように実装するのでしょうか?
(電文が途中で欠けたり、タイムアウトした場合の考慮が必要と考えています)

Node.jsでもserialportを使ってのシリアル通信はできたのですが、
長い電文だとコールバックで取得した値をコンソール出力して見ると、毎回サイズがバラバラ(何度かに分割されている)なので電文の解析が必要と思っています

C

1const unsigned char atai[4] = {0x01, 0x02, 0x03, 0x04, 0x05}; 2 /* ヘッダー データ部サイズ データ データ フッター */ 3 4unsigned char buff, size, cnu; 5while(1) 6{ 7 /* 1バイト目 */ 8 //処理:1byte受信するまで永久待ちする 9 if(ヘッダーを受信したか?) 10 { 11 /* 期待した値 */ 12 } 13 else 14 { 15 /* 期待した値じゃないので再度1byte目を待つ */ 16 continue; 17 } 18 19 /* 2byte目(サイズ) */ 20 //処理:1byte受信するまで3秒待ち 21 if(タイムアウトか?) 22 { 23 /* タイムアウトしたので再度ヘッダー待ち */ 24 continue; 25 } 26 else 27 { 28 受信した値をsizeに格納; 29 } 30 31 /* 3バイト目以降 */ 32 for(cnt=0; cnt<size; cnt++) 33 { 34 //処理:1byte受信するまで3秒待ち 35 if(タイムアウトか?) 36 { 37 /* タイムアウトしたので再度ヘッダー待ち */ 38 continue; 39 } 40 else 41 { 42 受信した値をbuff[cnt]に格納; 43 } 44 } 45 46 /* 3+sizeバイト目(ヘッダー) */ 47 //処理:1byte受信するまで3秒待ち 48 if(タイムアウトか?) 49 { 50 /* タイムアウトしたので再度ヘッダー待ち */ 51 continue; 52 } 53 else 54 { 55 /* 期待した値 */ 56 } 57 58 /* 期待したメッセージを受信した場合のみ通知 */ 59 //処理:期待したフォーマットだったのでbuffを通知 60}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問