問題タブ [plc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
floating-point - PLC 構造化テキスト、10 進数を実数 (浮動小数点数) に変換します。期待する値が得られません。(IEEE-754)
Profibus DP を介して PLC と通信しているハードウェアがあり、「44 79 FF FF」である 16 進数で 4 バイトのデータを送信し、PLC プログラムでこの入力データの BYTE 配列を宣言しました。問題はPLCにあり、BYTE配列で受信したデータは「66 121 255 255」であり、これは16進数の10進値ですが、私の目標はその値をREALに変換することであり、そうすると私はそうではありません私が期待した値を取得します。
4bytesData
すべての BYTES を挿入する DWORD( ) を作成しました。したがって、4 バイトをバイトに挿入する前に4bytesData
: in1 = 68
, in2 = 121
, in3 = 255
&in4 = 255
in1、in2、in3、in4 はバイト 0 ~ 3 です。
私が得ている値は次のとおりです。4bytesData
= 1148846079 & realValue
= 1.148846e+009
私が期待している値realValue
は = 9.9999993896484375E2 です
この Web サイト ( IEEE754 アナライザー/コンバーター) を使用して 16 進数値 (4479FFFF) を変換すると、必要な値が得られます。10 進数値 (1148846079) を挿入すると、 PLC。
私の問題を理解していただければ幸いです。よろしくお願いします。
javascript - 10 進数があり、2 進数に変換する必要があり、その 2 進数のすべてのビットにリンクされたチェックボックスが必要です
これを説明するのは難しいですが、最善を尽くします。
私はウェブサーバーでPLCを使用しており、PLCのレジスタからウェブページに値を書き込むために書いたいくつかのjavascriptコードを使用しています。
PLC が持つ機能の 1 つにタイム スケジュールがあります (たとえば、ライトをオンにする必要がある曜日と時間を選択できます)。スケジュールを設定するために、時間の入力ボックスをいくつか作成し、曜日ごとに 7 つのチェックボックスを作成しました。値を 10 進数でコントローラーに送信する必要がありますが、時間と分については問題ありません。
ただ、平日は2進数で表現しているのですが、コントローラーに10進数で書き込む必要があります。
7 つのチェックボックスがあり、それぞれが 2 進数を表しています (月曜日は 1、火曜日は 2、水曜日は 4、木曜日は 8 など)。どのチェックボックスがチェックされているかをまとめて、完了しました。
しかし、今は逆に必要です。今回は、コントローラーから 10 進数 (設定されている日を表す) を取得し、これをチェックボックスで表す必要があるため、おそらく 10 進数を 2 進数に変換しますが、どうすればリンクできますか?チェックボックスを個々の数字に?
誰かがこれを理解し、私を助けてくれることを願っています。
これらは私のチェックボックスであり、これは私のjavascriptの一部です:
これを逆にするにはどうすればよいですか?私は10進数を取得し、バイナリに変換する必要があり、javascriptを使用して、設定されているビットに応じて正しいチェックボックスをチェックします。
助言がありますか?
c++ - std::map はノードをロックして、他のプロセスがそれらを削除できないようにしますか?
ここで重大な問題が発生しました。1 つのシングルトン オブジェクト「VarList」にアクセスする 2 つの異なるタスク (プロセスなど) が PLC X20 フォーム B&R で実行されています。その目的は、ポインターを介したプロセス間通信を可能にすることです。
タスク A は、静的な getInstance() メソッドを使用して std::map を含むオブジェクトを作成しています。そのオブジェクトがグローバル PLC 変数に割り当てられている場合は、すべてのタスクからその特定のオブジェクトへのアクセスを許可するポインタがあります。そのタスクは、そのマップへの変数の挿入について、すべてのタスク サイクルもチェックしています。その場合、テスト目的で、挿入されたノードを再度削除しようとします。
タスク B は、getInstance メソッドを介してオブジェクトのポインターを取得し、bool* をマップに挿入します。
その後、タスク A が再度削除しようとすると、アクセス違反でクラッシュします。ノードとその値にアクセスできます。私はその価値観を変えることができます。しかし、別のタスクで作成されたノードを消去するとクラッシュするので、その理由を知りたいです!
PLC はシングルスレッドであるため、メモリへの同時アクセスはありません。
これはロックの問題ですか?それともこれはロジックの問題ですか?STLの問題?Null ポインタの問題? それとも、plc ベンダーの std ライブラリの特定の実装の問題でしょうか? アクセス違反に関連するヘルプは大歓迎です!
上記のオブジェクトのコード スニペットを次に示します。ヒントを得るために、問題に関係のないものはすべて削除しました。申し訳ありませんが、コンパイルできない可能性が最も高いです:
コンパイラ: gcc 4.1.2
タスク A:
タスク B:
VarListe.hpp
VarListe.cpp
ありがとう!
c# - OPC Da Write Bit in Word
OPC DA Automation Wrapper を使用して AllenBradley PLC に接続しています。
他のビットとは独立して、ワード内にビットを設定する必要があります。
この機能を厳密に達成できる方法はありますか?
私が試した2つのオプションは次のとおりです。
OPC サーバー (Kepware) で単語を個別のビットとしてセットアップします。言い換えれば、16 個のタグがあり、それぞれのタグ名は次のようになります。
ただし、これは、多くの個別の OPCItem オブジェクトを保持する必要があることを意味します
もう 1 つの方法は、ワード全体を読み取り、 を使用してビットに変換しBitConverter
、変更する必要があるビットを変更してから、保留ワードを PLC に書き戻すことです。
ただし、テスト中に、スレッド 1 が単語を読み取ることができることがわかりました。スレッド 2 はワードに書き込み、たとえばビット 2 を変更します。次にスレッド 1 がビット 4 を変更し、ワード全体を書き戻すと、ビット 2 への変更が上書きされます。
単一の OPCItem を使用して特定のビットに書き込む方法を知っている人はいますか?? それとも、特定のビットに関連する OPCItems がたくさんあることに固執していますか??
ありがとう
vpn - ラズベリーパイとハマチとのPLC通信
私がセットアップしようとしているシステムは、イーサネット経由で Raspberry Pi に接続された複数の PLC で構成されています。その後、Pi は Hamachi VPN に接続されます (他の VPN ソリューションに使用する外部 IP がないため、私は hamachi を使用します。別の方法がある場合は、試してみます)。反対側には、Hamachi ネットワークに接続された PC があります。Pi に接続された PLC と通信 (ping して接続) できる必要があります。iptables を使用して、PC を 1 つの PLC と通信させることができましたが、独自の IP ではなく、ソフトウェアを hamachi IP に向けて購入しました。iptablesを使用してPLCからPCにpingを実行するところまで到達できますが、その逆はできません。私の最終的な目標は、PC から PLC の IP を使用して、hamachi VPN 経由で PLC にアクセスできるようにすることです。アイデアや方向性はありますか?
excel - 複数の Siemens PLC から Excel にデータを取得するにはどうすればよいですか?
私は Siemens WinCC SCADA システムを使用しており、レポート目的で Siemens PLC の特定のアドレスから Excel にデータを転送する必要があります。
WinCC scada でプログラミングして試してみる価値はありますか、それとも他のレポート ツールはありますか? 私の主な要件は次のとおりです。
- 読み取るPLCアドレスとデータアドレスを簡単に定義
- Excel でのレポート ビューのカスタマイズ (ロゴの追加、フォーマットの調整など)
- 表形式と Excel チャートでデータを取得する
- 価格はそれほど高くないはずです
ちなみに、現場には小型パネルPCがあります。この PC には 1 GB の RAM と Intel Celeron CPU が搭載されています。レポート アプリケーションは、このような小さな PC で実行する必要があります。
plc - PLC プログラム リファレンス ソフトウェア
非常に基本的な形式のラダー ロジックを使用する古いマシンがたくさんあります。現時点で私が持っているのはラダー ロジックの印刷されたコピーですが、その子ノードを参照するのはひどいので、この時点で設定する必要がある条件を見つけるためにシートを検索するのに多くの時間を費やしています。
私が疑問に思っていたのは、すべてのラダーロジックを入力して、ノードにメモを追加し、子ノードを設定された状態にリンクできるデジタルコピーとして使用できるプログラムはありますか? )。ペーパーコードのDB版かな。
いくつかのプログラマーを使用してみましたが、コンパイルして PLC に送信したいプログラムではないため、それは私が望んでいるものではありません (たとえ望んでもできませんでした。そのクローズドシステム)。私はおそらくこれをすべて間違って説明しています 何を求めているのかわからない 何を求めているかはわかっていますが、それだけです。プログラムをチェックしたり、私が持っている紙のバージョンのリンク可能な DB だけでエラーを見つけたりしたくありません。
ありがとう
plc - Beckhoff PLC: 最初のランタイムを中断せずに 2 番目のランタイムをダウンロードすることは可能ですか?
ベッコフ CX5010 を持っています。2 つのプロジェクト ランタイムを同時にダウンロードして、同時に実行できるようです。
私が知りたいのは、単一のプロジェクト/プログラムを、実行中のベッコフ PLC にダウンロードできるかどうかです。そこでは、既に単一のランタイムが実行されています。したがって、基本的には、サイトにアクセスして、オンサイト プログラムが実行されている間にプログラムをダウンロードできるようにしたいと考えています。これは、他のプログラムのコードにアクセスできない場合です。
御時間ありがとうございます。
c++ - CP443-1EX11 とのネットワーク通信
2 つの TCP 接続と 2 つの ISO-on-TCP 接続を使用して、PC 側 (Windows、C++) でCP443-1EX11ネットワーク プロセッサを搭載した Siemens S7 PLC に Fetch/Write 経由で TCP 通信を実装するには何が必要ですか?
node.js - 本番データ収集用MongoDb
今まで取り組んだことのない新しいタイプの問題に直面しています。だから、私よりも知識のある人が正しい方向に向けていくつかの指針を望んでいます:-)
友人から、生産ラインの制御システムの設計を手伝ってほしいと頼まれました。このプロジェクトはとても面白そうで、考えずにはいられません。
node.js サーバーを使用してシステムを制御できることは既にわかっています。これまでのところ、とても良いです (HTML5 インターフェースがここに来ました)! しかし、私が本当にこのシステムを際立たせたいのは、システム メトリックの収集です。システムは、温度、流量などのあらゆる種類のものを報告し、これらのメトリックは、メトリックごとに毎秒数百回報告されます...そしてこれは24時間年中無休で実行されます.
私の考えは、これを MongoDb データベースに保持し、これについてリアルタイムの統計を行うことです。「競争」は、これをSQLサーバーデータベースに保存し、オペレーターが集計データをExcelにエクスポートし、Excelで統計を行うことを可能にしているようです。
MongoDb を使用してリアルタイム統計を行うための戦略は何ですか?
これらの指標に基づいて、すぐにフィードバックとモニタリングを提供したいと思っています。過去 24 時間の平均気温、スパイクなど、またアラートを有効にします。サーバー上で行われる高度な統計はあまりありません。それが必要な場合は、SPSS などのプログラムへのデータのエクスポートを有効にします。
MongoDb はそれに適していますか? SQL Server と WinForms コントロール インターフェイスを備えた Windows マシンではなく、Linux マシンを使用したいと考えています。ライセンス料だけでも私は気が遠くなりますが、機械を購入する人にとってはそうではないことはわかっています。
これはクラウドではなく、ネットワーク上の単一のサーバーに配置されます。操作中のマシンの横にタッチ インターフェースを配置します。このインターフェースは、ブラウザーを介して node.js サーバーに接続し、PLC コマンドを呼び出します。制御が必要な複数のマシンが存在する可能性があり、それらはすべて同じ中央 node.js サーバーによって制御されます。
機械は、 http://beckhoff.com/の PLC コントローラーによって制御されます。
私は MongoDb に関しては完全な初心者ではありませんが、自分が作成したものを製品化したことがなく、履歴書に MongoDb を載せるつもりはありません... まだ!
編集: $inc 演算子が適しているようです。しかし、socket.io を使用して、1 日の平均と 1 時間ごとの平均、および画面上のチャートを毎秒データで更新する継続的なフィードの両方が必要ない場合はどうすればよいでしょうか。必要な集計ごとにドキュメントを更新することをお勧めします。私も本当にすべての測定値を保存したいのですが、おそらくそれを 1 秒ごとに集計できるので、メトリックごとに 1 秒あたり最大 1000 レコードを保存しませんか?