メインコンテンツへスキップ

obniz PLCのRS-485送受信について

コメント

3件のコメント

  • Takamasa Hiratsuka

    obniz の平塚と申します。

    obniz PLCに実装されているRS485ドライバICは半二重通信対応のものとなっており、UART の Tx,Rxと通信制御信号の計3つのIOでコントロール可能です。

    使用するピン番号は、

    • Tx : 16
    • Rx : 4
    • 通信制御 : 2

    となっております。

    通信制御信号ですが、これは同じラインに送信・受信両方が通る半二重通信において、自デバイスが送信するか受信するかを選択するための信号です(もし無線にご関心あるかたでしたらPTTボタンのようなもので伝わりますでしょうか?)。

    制御方法は、

    • logic Highを入力 : 送信有効化
    • login Lowを入力 : 受信有効化

    という組み合わせで、回路的には標準でLow(受信状態)となっています。

    javascriptで操作するにあたり一点ご注意していただきたい処理として、送信時処理は

    1. io2 の logic を Highに
    2. uartのsend()関数
    3. io2 のlogic を lowに

    となると思われますが、現状送信完了のフラグがjsからでは取得出来ず、send()処理が完了するまでwaitしていただく必要があります。ですので、実際の処理は

    1. io2 の logic を Highに
    2. uartのsend()関数
    3. wait()数ミリ秒
    4. io2 のlogic を lowに

    となってしまいます。

    ご不便をおかけして申し訳ありませんが、送信、受信が短時間で繰り返される際や大量のデータをやりとりする際はご注意いただければ幸いです。

    以下、こちらでobnizPLC2台でテストしたサンプルページですのでご活用ください(ほかの機器との通信を行う際はobniz2.xxxの部分を削除してrs485のポートに接続していただきますと移植できるかと思われます)。

    "tx text" と書かれた欄に任意の文字を入力すると相手の"rx text"の欄にデータが届きます。

    <html>
      <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"/>
        <link rel="stylesheet" href="/css/starter-sample.css" />
        <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
        <script src="https://unpkg.com/obniz@3.17.0/obniz.js" crossorigin="anonymous"></script>
      </head>
      <body>
        <div id="obniz-debug"></div>
        <div class="wrap">
          <div class="print">
            <h3 class="text-center">RS485 Test</h3>
            <span>obniz1</span>
            <button class="btn btn-primary" id="tx1">Send 1->2</button>
            <div>
              tx:
              <input type="text" id="text1tx" value="Hello" placeholder="tx text"/>
            </div>
            <div>
              rx:
              <input type="text" id="text1rx" value="" readonly="readonly" placeholder="rx text"/>
            </div>
            <span>obniz2</span>
            <button class="btn btn-primary" id="tx2">Send 2->1</button>
            <div>
              tx:
              <input type="text" id="text2tx" value="World" placeholder="tx text"/>
            </div>
            <div>
              rx:
              <input type="text" id="text2rx" value="" readonly="readonly" placeholder="rx text"/>
            </div>
          </div>
        </div>
        <script>
          var obniz1 = new Obniz(OBNIZ_ID_HERE);//今回は2台のobnizPLCで通信
          var obniz2 = new Obniz(OBNIZ_ID_HERE);//obnizPLC(お持ちでしたら2台とも)のobniz IDを入力ください
          obniz1.onconnect = async function() {
            obniz1.io2.pull("3v");
            obniz1.io2.output(false);
            obniz1.uart0.start({tx:16,rx:4,baud:115200, drive:"3v", pull:null });
            obniz2.onconnect = async function() {
              obniz2.io2.pull("3v");
              obniz2.io2.output(false);
              obniz2.uart0.start({tx:16,rx:4,baud:115200, drive:"3v", pull:null });
              $("#tx1").on("click",async function() {
                obniz1.io2.output(true);
                obniz1.uart0.send($("#text1tx").val());
                await obniz1.wait(10);//送信完了時間待ち(決め打ち) この値は通信内容によって調整お願いいたします。
                obniz1.io2.output(false);
              });
              obniz1.uart0.onreceive = function(data, text) {
                $("#text1rx").val(text);
              }

              $("#tx2").on("click", async function() {
                obniz2.io2.output(true);
                obniz2.uart0.send($("#text2tx").val());
                await obniz2.wait(10);
                obniz2.io2.output(false);
              });
              obniz2.uart0.onreceive = function(data, text) {
                $("#text2rx").val(text);
              }
            };
          };
        </script>
      </body>
    </html>

     

     

    0
  • 萬田康博

    ご連絡ありがとうございます。

    obniz PLCを2台持っているため、添付頂いたコードで動作を確認する事が出来ました。

    ありがとうございます。

    • Tx : 16
    • Rx : 4
    • 通信制御 : 2

    について、他のIO含めてobniz PLCのブロック図などがあると助かるのですが

    その辺の資料はまだ準備中でしょうか?

    0
  • Takamasa Hiratsuka

    萬田様、現在obniz PLCのピンやブロック図に関する情報は弊社HPでは準備出来ておりません。ご不便おかけしております。
    代わりにハードウェアの開発元であるKMP Electronics Ltd.にあるプロダクトページをご案内いたします。機能や回路図の説明がありますのでご参照ください。
    https://kmpelectronics.eu/products/prodino-esp32-ethernet-v1/
    また、弊社ではobnizPLCでリレー出力および光フォトカプラ入力を制御しているIO拡張ICのMCP23S08、ethernet通信ICのW5500のパーツライブラリも提供しておりますのでぜひご活用ください。(W5500経由でのobnizCloudへの接続は対応しておりません)

    MCP23S08(obniz PLC製品ページ下部「サンプルプログラム」よりご覧いただけます。)
    https://obniz.com/ja/doc/reference/plc/
    W5500
    https://obniz.com/ja/sdk/parts/W5500/README.md

    上記情報などのobniz関連の情報について、再度不明な点ありましたらお気軽にお問い合わせください

    0

サインインしてコメントを残してください。