FriendlyARM Smart210でのレーザー厚さゲージのソフトウェア開発

簡単な説明:タスクは、2つの移動するレーザーセンサー間の物体の断面を測定することです。計算全体はコンピューター側で行います。



Qtは、クロスソースの製品であると同時にOpenSourceであるため、開発ツールとして選択されました。 Qtはその時点で最新バージョン5.4をインストールしました。 プログラムの最初の使用は、タッチスクリーンを備えたWindows OSで予想されていました。 パスの途中のどこかで、彼らはSmart210をやり直すことにしました。



Smart210は、WinCE 6、Linux、Qtopia、AndroidなどのOS(同梱)をインストールできる中国の兄弟の開発です。 Debianビルドもテストされました。



このデバイスのターゲットシステムはもともとLinuxでした。 厚さゲージのコントローラーでの作業は、FT2232HLを介して実行されます。



独自のFTDIドライバーを使用するには、多くの手順と機能があります。



標準のftdi_sioおよびusbserialライブラリを無効にする必要があります。



sudo rmmod ftdi_sio sudo rmmod usbserial
      
      





これは、これらのライブラリをカーネルモジュールとして含めてカーネルを再構築しないと実行できません。



カーネルは、メーカーから提供されたtoolschain arm-linuxバージョン4.5.1を使用してアセンブルされました。新しいコンパイラでカーネルを構築しようとすると、friendlyarm-ts-mtinputモジュール(マルチタッチスクリーン操作を担当)が落ちたため、タッチスクリーンが動作しなくなりましたエラー、新しいコンパイラ用に再構築する機能がありません(ソースなし)。



ファイルmini210_linux_defconfigで、コンパイラへのパスを記述し、カーネルモジュールとして構成します。



 CONFIG_CROSS_COMPILE="arm-linux-" ... CONFIG_USB_SERIAL=m CONFIG_USB_SERIAL_FTDI_SIO=m
      
      





CONFIG_USB_SERIAL = mには、ftdi_sio(念のため、CONFIG_USB_SERIAL_FTDI_SIO = m)を含む、すべての依存ライブラリがカーネルモジュールとして含まれていますが。 次に、コマンドを実行します。



 ./build
      
      





モジュールの構成が変更されたため、次を実行する必要があります。



 make modules
      
      





その後、ファイルシステムにコピーします。 ディスクからパッケージに含まれるyaffs2ユーティリティによるファイルシステムのアセンブリにより、インストール時にファイルエラーが発生しました。 標準を使用する必要がありました。



 mkyaffs2 rootfs_rtm_210 rootfs_rtm_210.img
      
      





操作が完了すると、FTDIライブラリを使用できるようになりました。

Qt for Linuxはバージョン5.3.2を取得し、linuxfbサポートでコンパイルしました。



この方法を続けて使用すると、描画速度が不十分であることがわかりました(描画時にタッチスクリーンが応答しませんでした)。 フレームバッファーの描画に使用されます。OpenGLESのドライバーサポートがありません。



Android用のFTDIドライバーはJava専用であるため、Androidで停止し、ttyUSBを使用して書き換えるために再描画する必要がありました。



FTDIが切断および接続されたときに、0x00バイトの出現が検出されたため、シフトが発生し、10バイトの固定データ長で、パケットの先頭の兆候がないため、迷惑になりました。 さらに、CRC8でテストされた最初の10バイトを探すという決定(緊急事態によりパケットが中断される可能性があるため)。



 bool Controller::readBlockN(uchar *tmp, qint64 blockSize){ int bytesReceived = 0; int bytesRead = 0; qint64 m_blockSize = blockSize; while (m_blockSize > 0) { bytesReceived = read(uart0_filestream, ((void*)&tmp_block) + bytesRead, m_blockSize); if (bytesReceived > 0){ m_blockSize -= bytesReceived; bytesRead += bytesReceived; if (bytesRead > 9) { if (tmp_block[bytesRead - blockSize + 9] == getCRC8((uchar*)&tmp_block + bytesRead - blockSize, 9)){ memcpy(tmp, (uchar*)&tmp_block + bytesRead - blockSize, 10); } else{ m_blockSize = 1; } } } } return true; }
      
      





この段階で、ttyUSB *ポートを使用する権利がないことが発見され、これは各リブート後に発生します。 解決策は、プログラムのロード時に行を挿入することです。



 system("su -c 'chmod 777 /dev/ttyUSB*'");
      
      





ナビゲーションパネルを削除するために残った(画面の使用を最大化し、さらに、他のアプリケーションがこのデバイスを起動しないことを前提としています)。 標準パネルは非表示イベントに応答せず、常にすべてのアプリケーションの上に表示されます。 私はそれを削除することにしました:



 system("su -c 'rm /system/app/SystemUI.apk'");
      
      





FriendlyARMには、時刻をリセットしないバッテリーがありますが、それでもアプリケーションの起動時にデフォルトのAndroidの時刻設定を呼び出すことにしました。



 system("am start -n com.android.settings/.DateTimeSettingsSetupWizard");
      
      







グラフィックはQgraphicsViewで完全にトレースされます。



システム状態:







手動モード:







自動モード:







ビデオ:







研究と結果:



Debian:

かさばる、純粋な形式で約430MBを必要とし、OpenGL ESのサポートがあり、mesaドライバーが使用されます。 マルチタッチスクリーンはサポートされていません。



Qtopia:

OpenGL ESのサポートの欠如。実際、長い間サポートされていません。



Linux(rootfs_rtm_210):

OpenGL ESのサポートの欠如は、その純粋な形式でごくわずかなスペースを占有します〜15MB、Qtからすべてのライブラリをインストールすると〜90MB、OSのロード速度は8秒強です。



WinCE 6:

私はそれを真剣にテストしませんでした。OpenGLESについて言及するためにバイナリファイルに詰め込んだので、CEの下での議論が必要になります。 時間がなくなり、延期することにしました。



Android:

OpenGL ESをサポートし、約215MBを消費し、約2分で起動します。



All Articles