
それとも、はんだごて、PLCプログラミングの第一人者、modbusでPDUを盗聴する友達です。 しかし、WindowsとSCADAを搭載したコンピューターは、プロジェクトには高すぎるか、何らかの理由で機能しません。そして、周辺GPIO、I2CにアクセスできるシングルボードRaspberry PIコンピューターでプログラムを実行したいです。
視覚的なプログラミング方法
既製のコンポーネントとライブラリを使用すると、視覚的なプログラミング言語を使用してプログラムを開発できます。 幸いなことに、こうしたシステムのすべてのプログラマーと不幸なユーザーにとって、「すぐに使える」サポートされていない機能が必要なときが来ます。 プログラムは、プログラマよりも複雑な世界のために他のプログラムを生成するものではなく、まだ仕事があります。 典型的なタスクを視覚的にプログラムする方法をリストします。
フローチャート/視覚化を提供するフレンドリーなロシア語アルゴリズム言語(DRAGON)/ Pスキームなど 学校でのプログラミングと研究所の最初の数年間でよく覚えているのはフローチャートです。 描画フローチャートは学生に適しているため、兵士のように、自由時間はすべて仕事で占められています。 別のアプリケーションは、紙でプログラミングを教えることです。 そして最後に、ESPD / GOSTに従って州のプロジェクトに合格するために、誰かがそのような図を作成して描画します。 彼らに同情します!
ケースツール -数百もの非常に高額なお金で、多くの場合、疑わしい利点があります。 特にこのようなシステムの多くは、ソフトウェアおよびデータベースの設計者によって使用されています。
コード生成を使用してワークピースまたは既製の制御プログラムを取得できるUML状態図 。 この図は、 自動プログラミングの例です。 また、コンパイラ、多くの電子デバイス、および複雑な動作を持つエンティティが存在するシステムのタスクとモジュールの設計に最適です。
リレー接点ロジックの言語。 この言語は、エンジニアやPLCをプログラミングする人に近いものでなければなりません。 エレベーターのプログラミングは、典型的なユースケースの1つです。
LabVIEWビジュアルプログラミング環境を使用すると、かなり複雑なシステムを視覚的に作成でき、ナショナルインスツルメンツのハードウェアと密接に関連しています。 HaberのコメントにあるAndreyDmitrievがビジュアルエディタでタスクを実装し、DelphiソリューションとLabVIEWレビューとの複雑さを比較する方法の例が気に入りました。 Simulink for Matlabも、コメントで示唆されているように、同じカテゴリーに分類されます。
反応性ブロック
Reactive Blocksに関する同じ記事では、変更されたUMLアクティビティ図が使用されます。これはプロジェクトコンポーネントに適合し、そこからコードが生成されます。 開発者は、モデル、回路アナライザー、コンポーネントイベントを使用してEclipseのプラグインを作成しました。
このプロジェクトは、完全に論理的な制限がありますが、オープンソースプロジェクトでは無料で利用できます。 IDEビルディングブロックで作成したすべてのものは、オープンソースライセンスの下ですべての人が利用できます。
リアクティブブロックイデオロギー
これは、既製の既存のレンガからアプリケーションを視覚的に構築したものです。ハードウェアやクラウドサービスとのやり取りの複雑さを隠すビルディングブロックです。

もちろん、複雑なアルゴリズムをJavaコードとして記述することをお勧めします。そのため、グラフィック図とコードは自動的に同期状態に維持されます。 これは、プログラマーがコンポーネントを作成し、その分野でエキスパートユーザーを使用するときのコンポーネント設計の永遠の夢です。
数百、数千の要素のスパゲッティ図である図を作成しないでください。 この場合、そのようなビルディングブロックコンポーネントの形式でサブダイアグラムを作成できます。 オープンソースソリューションの場合、コミュニティがプロジェクトで使用できるようにブロックを公開します。
Eclipse Kuraプラットフォームのパッケージ(OSGIバンドル)にアプリケーションを自動的にパッケージ化することが可能です。 その後、コンテナを再起動せずにアプリケーションを再起動し、管理コンソール、およびこのIoTプラットフォームの多くのサービスと既存のコンポーネントのすべての機能を使用して、Raspberry PIまたはBeagleboard Blackで実行することができます。
リアクティブブロックをインストールする
Windows、Mac OS X、またはLinuxのページからすぐに実行できる特別なアセンブリ日食+リアクティブブロックをダウンロードするオプションがあります。 Eclipse Neon(4.6)/ Mars(4.5)/ Luna(4.4)/ Kepler(4.3)をインストールした場合の別のオプション-Update-Siteを指定してプラグインをインストールする必要があります。
いずれにしても、DebianベースのLinuxアセンブリの場合、開発環境を開始する前にlibwebkitgtk-1.0パッケージをインストールする必要があります。
sudo apt install libwebkitgtk-1.0
システムで使用可能なデフォルトシステムとは異なる完成したアセンブリでJDKを使用するには、reactiveblocks.iniファイルに行を追加する必要があります。
-vm PATH_TO_YOUR_JDK/bin/java
リアクティブブロックの紹介
サーバーにアクセスするには、コンポーネントはGoogleアカウントを使用して認証と認証を行う必要がありました。
私はメールで質問を書き、エンジニアと経営陣に敬意を表して、ビデオハングアウト、IDEスクリーンキャスト、簡単な例を使用して、Googleハングアウトの1対1のマスタークラスをもらいました。 彼らのリード開発者は、航空宇宙産業のエンジニアであることが判明し、余暇に航空機のモデリングを行い、 自動操縦を設計するのが大好きです。
加速度計を使用したRaspberryPIのアラームの非常に興味深い例を見つけました。

さまざまな例を試した後、内部のビルディングブロックの内容を確認します。 私がすでに知っているOpenIMAJライブラリを見つけるのは特に興味深いことでした。
私にとっては、 rhiotコンポーネントと視覚化機能を備えたApache Camelの開発と比較して、Reactive Blocksの利点は見つかりませんでした。 これについてはすぐに投稿しますが、実際の例でさえすでに準備ができています! habrに関する出版物では、 Groovy / Javaで自動マシンを操作しています。 自宅のワークショップのCNCマシンは「二人のcas」ヒーローの漫画にならないため、 CNCマシンを制御するためにApache Camelを使用しました。
BeagleBoard Black GPIOとReactive Blocksを交差させる試みは失敗しました。
GPIOライブラリSilverThings / bulldogが割り込み処理モードで動作できなかったため。 もちろん、ループで入力ポートをポーリングできますが、これはどういうわけか正しくありません。 このライブラリのバグレポート#96を開始しました。
プロセッサに組み込まれたBeagleBoard Black RPUは、GC STWで一時停止するJavaの場所がないリアルタイムタスクに適しています。
プロセッサに組み込まれたBeagleBoard Black RPUは、GC STWで一時停止するJavaの場所がないリアルタイムタスクに適しています。
エレクトロニクスエンジニアとは異なり、Javaプログラマーにとっては、複雑なプロジェクトでBitreactive IDEを実際に使用することについての考えがあり、理解する必要があります。
- 数人の単一のダイアグラムで同時に作業する方法。
- 多くの図を含むプロジェクトのリファクタリングがどのように発生するか。
- すでにMaven互換のリポジトリがある場合に、コンポーネントを保存するために独自のサーバーを作成する理由。
- チャートのさまざまなバージョンの差分を表示する方法は?
- テストを開発し、コンポーネントのモックを作成する方法。 jUnitの世代があるように見えますが、実際のアプリケーションのテストの実践を掘り下げる必要があります。
結論
プログラミング言語を学習する代わりに、回路、コンポーネント、および開発ツールの表記法を学習する必要があります。 プログラマはこれを必要としますか?
このソリューションは、Javaの複雑なプログラミングを詳しく調べたくないが、既存のコンポーネントの全機能を使用してクラウドベースのIoTサービス、マルチメディアと通信し、ビルディングブロックにラップされたJavaライブラリを使用したい非ソフトウェアエンジニアにより適しています。