obniz PLCのRS-485送受信について
obniz PLCを購入し
RS-485を使ったアプリの開発を考えているのですが
プログラムの書き方が全く分かりません。
サンプルコードが見当たらないペリフェラルを操作したい場合に
どこを調べれば良いかを教えていただけませんでしょうか。
-
obniz の平塚と申します。
obniz PLCに実装されているRS485ドライバICは半二重通信対応のものとなっており、UART の Tx,Rxと通信制御信号の計3つのIOでコントロール可能です。
使用するピン番号は、
- Tx : 16
- Rx : 4
- 通信制御 : 2
となっております。
通信制御信号ですが、これは同じラインに送信・受信両方が通る半二重通信において、自デバイスが送信するか受信するかを選択するための信号です(もし無線にご関心あるかたでしたらPTTボタンのようなもので伝わりますでしょうか?)。
制御方法は、
- logic Highを入力 : 送信有効化
- login Lowを入力 : 受信有効化
という組み合わせで、回路的には標準でLow(受信状態)となっています。
javascriptで操作するにあたり一点ご注意していただきたい処理として、送信時処理は
- io2 の logic を Highに
- uartのsend()関数
- io2 のlogic を lowに
となると思われますが、現状送信完了のフラグがjsからでは取得出来ず、send()処理が完了するまでwaitしていただく必要があります。ですので、実際の処理は
- io2 の logic を Highに
- uartのsend()関数
- wait()数ミリ秒
- 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 -
萬田様、現在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
サインインしてコメントを残してください。
コメント
3件のコメント