2022年9月発行ウィンスターニュー第163号 www.winstar.com.tw
 
ウィンスターニュス

 

ウィンスターニュス第163号

 

テーマ
1) WF0200BTYAJDNG10 – 2インチ ポートレートモード 240x320IPS TFT、静電容量式タッチ付き
2) WF22GN5AB2DNN0 – 2.13 インチ 単色TFT、LPRD (反射型低消費電力のTFT液晶)
3) WF101JSYFHLHBV – 10.1インチ 高輝度 HDMI シグナル IPS TFT 、静電容量式タッチ付き
4) WL0F00050000FGAAASA01 – 5インチ スマートディスプレイ 高輝度 CAN TFT、静電容量式タッチ付き
5) SmartDisplay RS485のご紹介

 

WF0200BTYAJDNG10 – 2インチ ポートレートモード 240x320IPS TFT、静電容量式タッチ付き

WF0200BTYAJDNG10 は、解像度240x320 ピクセルの投影型静電容量式タッチパネル (PCAP)を備えた2 インチのポートレートモード IPS TFT-LCD ディスプレイです。このTFTモジュールには ST7789VI ドライバ IC を内蔵して、MCUおよび SPI インターフェイスをサポートしています。静電容量式タッチパネルには、GT911 ICを組み込まれて、I2Cインターフェイスを介して通信します。WF0200B TFTシリーズはタッチパネルなしのオプションもありますので、詳しくはホームページをご覧ください(WF0200BSYAJDNN0高輝度タイプ)。

WF0200BTYAJDNG10はIPSパネルを採用して、視野角は左: 80 /右:80 /上:80 /下:80度 (標準値)で、コントラスト比は800:1 (標準値)で、輝度は400ニット(標準値)です。画面アスペクト比は 3:4、電源電圧は 2.4V~3.6V で、 標準値 3.3Vです。操作温度範囲は、-20℃ ~ +70℃ で、保存温度範囲は -30℃ ~ + 80℃です。

WF0200BTYAJDNG10 仕様 単位
サイズ 2.0" inch
ドットマトリクス(解像度) 240 x RGB x 320(TFT) dots
モジュールサイズ 38.8(W) x 52.3(H) x3.8(D) mm
有効エリア 30.60 x 40.80 mm
ドットピッチ 0.1275 x 0.1275 mm
LCDタイプ TFT, ノーマリ・ブラック・透過型
TFTインターフェイス MCU / SPI
TFTドライバIC ST7789VI或いは互換性コントローラー
視野角 80/80/80/80
画面アスペクト比 3:4
バックライトタイプ LED・ノーマリ・ホワイト
CTP ドライバIC GT911 或いは互換性コントローラー
CTP 画面アスペクト比 I2C
CTP FW V92
CTP  解像度 240 * 320
タッチパネルタイプ 静電容量方式タッチパネル
表面処理 グレア

WF0200BTYAJDNG10

WF0200BTYAJDNG10

Link to WF0200BTYAJDNG10 web page

 

TOP

 

 

WF22GN5AB2DNN0 – 2.13 インチ 単色TFT、LPRD (反射型低消費電力のTFT液晶)

WF22GN5AB2DNN0は、LPRD (Low Power Reflective LCD, 反射型低消費電力 LCD)と解像度 122x250 ピクセルを備えた2.2 インチの単色TFT ディスプレイです。ST7306 ドライバー IC を内蔵して、8 ビット MCU、4ライン SPI/3ライン SPI インターフェイスをサポートしています。TFTシリーズは反射型LCDを採用して、以下の利点があります。

  • 太陽光読み取り可能、反射型 LCD は屋外での使用に適している。
  • 曇りの日や早朝でも見える鮮やかな色、反射型ディスプレイで視覚的品質を向上する。
  • 耐紫外線性(ガラスLCDベース)。
  • 超低消費電力、薄型と軽量設計。
  • 単色TFT、電子ペーパーのように見えます。
  • 高速リフレッシュレートと動的メッセージの表示に適しています。
  • 目のケア:バックライト (ブルーライト) を取り除いて、目の負担を減らす。

WF22GN5AB2DNN0はLPRD 技術を備えた単色TFT です。視野角は左:65 / 右:65 / 上:65 / 下:65 度 (標準値) で、電源電圧(VDDA)は 2.55Ⅴ ~ 3.6V で、標準値は 3.3Vです。画面アスペクト比は18:9で、表面処理はアンチグレアです。。操作温度範囲は、-20℃ ~ +70℃ で、保存温度範囲は -30℃ ~ + 80℃です。

LPRD (反射型低消費電力の液晶) は、棚ラベル、スポーツヘルス、自転車レコーダー、釣り竿のリール、ハンドヘルドデバイス、トランスポーテーションEV充電、ウェアラブル、ポータブルデバイスなどのスマートリテールで使用できます。

WF22GN5AB2DNN0 仕様 単位
サイズ 2.13 inch
ドットマトリクス(解像度) 122 x 250 dots
モジュールサイズ 27.07(W) x 56.2 (H) x 1.09 (D) mm
有効エリア 23.668 x 48.50 mm
ドットピッチ 0.194 x 0.194 mm
LCDタイプ 単色 TFT (反射型)
視野角 65/65/65/65
画面アスペクト比 18:9
ドライバIC ST7306或いは互換性コントローラー
インターフェース 8bit MCU/4-SPI/3-SPI
タッチパネル タッチパネルなし
表面処理 アンチグレア

WF22GN5AB2DNN0

WF22GN5AB2DNN0

Link to WF22GN5AB2DNN0 web page

 

TOP

 

 

WF101JSYFHLHBV – 10.1インチ 高輝度 HDMI シグナル IPS TFT 、静電容量式タッチ付き

WF101JSYFHLHBV は、10.1 インチで解像度1024x600 ピクセルの高輝度IPS TFT ディスプレイです。HDMI コネクタを備えた PCB ボードがあって、HDMI 信号 (DVI のみ) インターフェイスをサポートしています。また40 ピンGPIO コネクタがあるからRaspberry Pi を簡単に使用できます。このモジュールはバックライト用の4つのスタッドがあるのが特徴で、PCBはモジュールに取り付けるロック方式を採用しています。WF101JSYFHLHBV はIPSパネルを採用して、視野角が広いです。視野角は左:85/右:85 /上:85 /下:85度(標準値)です。EK79001HN および EK73215BCGA ドライバ IC を内蔵して、高輝度は950 ニット (標準値) です。またタッチパネルのモジュールにILI2511ドライバ ICを内蔵して、USB インターフェースをサポートします。シングルタッチまたはマルチタッチ(オプション)はポイントです。

WF101JSYFHLHBV の LCM (VDD) 電源電圧は 4.7 ~ 5.3Vで、標準値は5Vです。ガラス表面はグレアで、アスペクト比は 16:9で、コントラスト比は 800:1 (標準値) です。動作温度範囲は -20℃から+70℃で、保存温度範囲は-30℃から+80℃です。

WF101JSYFHLHBV 仕様 単位
画面対角線 10.1 inch
ドットマトリクス(解像度) 1024 RGB X 600 dots
モジュールサイズ 235(W) x143(H) x 27.96(MAX)(D) mm
有効エリア 222.72 (H) x 125.28(V) mm
ドットピッチ 0.2175(W) x 0.2088(H) mm
LCDタイプ TFT, ノーマリ・ブラック・透過型
視野角度 85/85/85/85
カラーアレンジ RGB-STRIPE
画面アスペクト比 16:9
ドライバIC EK79001HN + EK73215BCGA或いは互換性IC
バックライトタイプe LED・ノーマリ・ホワイト
電気的インターフェース (ロジック) HDMI(DVIのみ)
CTP IC ILI2511 或いは互換性IC
CTPインターフェース USB
CTP FW バージョン V6.0.0.0.62.90.1.2
タッチパネルタイプ 静電容量方式タッチパネル
表面処理 グレア
WF101JSYFHLHBV

WF101JSYFHLHBV

Link to WF101JSYFHLHBV web page

 

TOP

 

 

WL0F00050000FGAAASA01 – 5インチ スマートディスプレイ 高輝度 CAN TFT、静電容量式タッチ付き

WL0F00050000FGAASA01 は 5 インチで、CANシリーズの高輝度TFTスマートディスプレイです。CAN Busコマンドを介してマスターデバイスによって制御されるスレーブデバイスとして定義され、ディスプレイ画面に表示コンテンツをレンダリングして、プロトコルオブジェクトとともにタッチイベントデータを返します。WL0F00050000FGAASA01 は、Winstarの高輝度 IPS TFT WF50FSWAGDNG0 を採用して、WinstarRDチームによって開発されたファームウェアコードが組み込まれた4層PCBAと統合されています。この 5 インチ CAN シリーズ TFT は使いやすい製品で、プロジェクトを迅速かつ低コストで作成できます。

Winstar は、スマートディスプレイGUI 設計用の Windows アプリ (GUI & GUI Builder) を既に開発しました。 この 5 インチ IPS TFTスマートディスプレイは、USB2CANドングルまたは Raspberry Pi (+PiCAN2) を搭載したコンピューター、まは Arduino (+CAN adaptor) などの MCU スケールをHOSTプラットフォームとして使用できます。Winstar GUIビルダーソフトウェアは、ドラッグ&ドロップのウィジェットプレビュー機能を使用して、事前にUIデザインをシミュレートできるように設計されています。さらに、お客様はこのソフトウェアを使用して理想的なUIオブジェクトを作成し、シミュレーションを実行してハードウェアモジュールなしでUIデザインを確認できます。Winstar GUI BuilderソフトウェアはWindowsシステムのみをサポートしています。What You See Is What You Get (WYSIWYG) を実現できます。

この新しくリリースされた SmartDisplay IPS 5 インチ TFT には、下記のように多くの重要な特徴と機能があります。

  • 長い伝送距離とアンチノイズを備えたCANインターフェース。
  • CANopenプロトコルをサポートし、デデフォルトのボーレートは250KBです。
  • WF50FSWAGDNG0静電容量式タッチパネル モジュール。
  • 内蔵フラッシュメモリ (16MB)、フォントとオブジェクト辞書データを格納します。
  • DC 5Vの動作電圧。
  • 内蔵ブザー。
  • 電源投入時のスプラッシュ画面 (お客様ご自身で交換可能)。
  • デモ セット HOST は、コンピューター (USB2CAN ドングル)、MCU、Linux OS を使用するシングルボードコンピューター、または Raspberry Pi (PiCAN2) など、複数のプラットフォームで使用できます。
  • Winstar GUI Builderでコードを1行も記述せずにUI設計は実現できます。 (►GUIビルダーの紹介へのリンク)

Winstar は、スマートディスプレイGUI 設計用の Windows アプリ (GUI & GUI Builder) を既に開発しました。Winstar GUIビルダーソフトウェアは、ドラッグ&ドロップのウィジェットプレビュー機能を使用して、事前にUIデザインをシミュレートして確認できます。お客様も理想的なGUIを作成できます。さWinstar GUI BuilderソフトウェアはWindowsシステムのみをサポートしています。What You See Is What You Get (WYSIWYG) を実現できます。 内蔵ソフトウェアのアップグレード版は 3-in-1 アプリです。 産業用、車両用、および医療用アプリケーションを含めて、オプションの 3 つのアプリケーションテンプレートを組み合わせました。最初はアプリケーションを押して、3 秒間で電源を入れたままにしてください。 お客様は、GUIbuilder を使用してアプリケーションを変更することによって、別のテンプレートに変更できます。

WL0F00050000FGAASA01 標準値 単位
操作電圧 5 Vdc
通信インタフェース CAN バス ± 3.3 Vpp
MCU STM32F750 N/A
フラッシュメモリサイズ 16 MB
SDRAM 周波数 108 MHz
LCD ディスプレイ サイズ 5.0 inch
TFT 品番 WF50FSWAGDNG0 dot
ドットマトリクス(解像度) 800× 3(RGB) × 480 dot
モジュールサイズ 135.7(W) ×82.4(H) ×12.15 mm
表示エリア 108(W) ×64.8 (H) mm
ドットピッチ 0.135(W) ×0.135(H) mm
輝度 Min: 650; Typ: 750 cd/m2
LCD タイプ TFT, ノーマリ・ブラック・透過型
視野角度 80/80/80/80
画面アスペクト比 5:3
タッチパネル 静電容量式タッチパネル
表面処理 グレア
WL0F00050000FGAAASA01

WL0F00050000FGAAASA01

Link to WL0F00050000FGAAASA01 web page

 

TOP

 

 

SmartDisplay RS485のご紹介

クロスプラットフォームのプログラムの制御方法
 

一、 序文

SmartDisplayは、近年、医療、産業用制御装置、自動車などのさまざまな分野で広く使用されています。簡単に言えば、マイクロコントローラー(MCU)と組み合わされたディスプレイであり、複雑なグラフィックスの読み込み、設定、表示、さらには入力までを処理できます。簡単なコマンドでインタラクティブな操作を実行できるため、さまざまな表示または制御などのアプリケーションに非常に適しています。

SmartDisplayは、さまざまな通信インターフェイスをサポートしています。現在、最も一般的に使用されているのはCANbus/CANopen、RS485/Modbus で、将来さらに多くの選択肢が提供される予定です。その中で、RS485/Modbus は業界で一般的に使用されている通信インターフェイスであり、手頃な価格の RS485 デバイスが市場で簡単に入手できます。ライン構造は単純であり、2つのライン(A+/B-)だけが通信できます。通常、オペレーティングシステムでは「Serial Port」という形で提示されて、各プラットフォームに対応するライブラリがあります。さらに、Modbus プロトコルは非常に理解しやすいため、それを選択して実験と説明を行います。

この文章では、SmartDisplayの制御する方法を紹介して、その制御原理を理解して、最後にクロスプラット フォームのアプリケーションの作成方法を紹介します。産業機械の専門家でもDIY 愛好家でも、SmartDisplayの世界へようこそ!

二、 ソフトウェアおよびハードウェアの要件
 

SmartDisplay

接続テストには、RS485 インターフェイスをサポートするSmartDisplayが必要です。

インターフェイスRS485

通常、PC/Raspberry Pi には RS485 が搭載されていないため、さまざまなUSBからRS485 に変換できるケーブルを購入できます。一部のシングルボードコンピュータ(SBC)には、RS485が組み込まれるため、直接に使用できます。

図2-1 各種のRS485変換ケーブル(左下がアダプターです)

図2-1 各種のRS485変換ケーブル(左下がアダプターです)

 

テスト環境

最初の 2 つの条件を満たした後、適切な実行環境を選択できます。唯一の条件はSerial Portの読み書きができることなので、Windows、MacOS、各種のLinux(Raspberry PiのRaspbianを含む)、Arduino、シングルボードコンピュータ(SBC)などは可能で、Winstarのモデル:WUACLB120V0000N0NX01はシングルボードコンピュータ (SBC) として非常に良い選択です。

Model No. WUACLB120V0000N0NX01

Model No. WUACLB120V0000N0NX01

 

三、 簡易な制御テスト
 

制御コードを取得する 

まず、制御コードを取得する必要があります。最も簡単な方法は、Winstar が開発したSmartDisplay GUI Builder から入手することです。GUI Builder は、SmartDisplayの補助ソフトウェアとして非常に優れたものです。実際のデバイスがない場合にプログラムを作成しなくても、ユーザーインターフェイスを学習、操作、設計、および表示するなどできます。WYSIWYGという特徴を備えるため、ボタンやコンポーネントをドラッグまたはクリックするだけで、ユーザーインターフェイスの設計を行うことができます。それに、SmartDisplayと同じソースコードのエミュレーターが内蔵するため、実際のデバイスと同じ外観と動作が保証されます。さらに良いことに、それは無料です!

Contact Us for SmartDisplay GUI Builder

図3-1SmartDisplay GUI Builder

図3-1SmartDisplay GUI Builder

 

Winstar GUI Builder を実行後、プロジェクトを開きます。ここでは 5 インチのモデルを選択して、またデフォルト値は自動車(Vehicle)を選択します。プロジェクト名を設定したら、Create を押して作成します。以前に作成したことがある場合は、右側のメニューから直接に選択することもできます。

図3-2 プロジェクトを開く

図3-2 プロジェクトを開く

 

プロジェクトを開いた後、最初にインターフェースを選択します。

図3-3インターフェースを選択する

図3-3インターフェースを選択する

 

図3-4インターフェイスパラメータの設定

図3-4インターフェイスパラメータの設定

 

インターフェイスに RS485 を選択すると、RS485 Portは RS485 変換ケーブルが実際のPortに設定する必要があります。不明な場合は、デバイス管理者で確認できます。(繰り返しプラグを抜いてみて、消えるか、表示されるか、どのポートを確認できます。)Baudrateは、デフォルト値の 115200 を使用します。

図3-5デバイス管理者のCom Port表示画面

図3-5デバイス管理者のCom Port表示画面

 

ただし、RS485 デバイスがない場合でも、インターフェイスが RS485 を選択すれば、RS485 ポートは今のところ無視しても大丈夫です。これは、エミュレータのみを使用して、実際にはデバイスに接続しないためです。

Simulator/Simulator with GUIを押して、エミュレータを起動します。

図3-6エミュレータを起動する

図3-6エミュレータを起動する

 

実行後、シミュレーション画面と各コンポーネントの制御項目、右側に制御命令の記録が表示されます。コンポーネントの値を変更して、送信されたコマンドの内容を確認できます。

図3-7コンポーネントの値を変更するおよび送信された制御コード

図3-7コンポーネントの値を変更するおよび送信された制御コード

 

すべてのアクションで TX/RX の 2 つのコマンドが表示されます。これは、デバイスが (実際にはミュレータであっても) コマンドを受信した後に同じコマンドを送り返して、受信したことを示すためです。

さまざまなコンポーネントのいくつかの異なる値を記録したら、次のステップに使用すると実際のデバイスを制御できます。

表3-1 制御コード

表3-1 制御コード

デバイスに接続する

RS485 は2本の信号線の電位差を利用して信号を伝送するため、この2本の線だけ接続できて、アース線さえ必要ありません。 RS485の信号線の名前は A+/B- で、それに従って接続してください。

図3-8 RS485 信号線の接続

図3-8 RS485 信号線の接続

 

制御コードの伝送方法は何ですか?Serial Portに書き込めるだけです。ただし、テストする前に、注意すべき点が 2 つあります。

1. 異なるオペレーティングシステムではCom Portの名前も異なるため、テストする前に確認してください。次の表を参照してください。

表 3-2各オペレーティングシステムのSerial Portの名前

表 3-2各オペレーティングシステムのSerial Portの名前

 

2. 2. 一部のオペレーティングシステムのCom Portの権限は設定されていないため、使用前に設定する必要があります。たとえばLinux/Ubuntuを例として、Com Portの名前が ttyUSB0 の場合、ターミナルで

sudo chmod 666 /dev/ttyUSB0を実行するだけです。
 

下記は2種類のテスト方法を提供します。

Serial Portターミナル制御

16 進数入力をサポートするSerial Portターミナルソフトを使用します。接続後、直接に16 進数の制御コードを入力します。

図3-9 ターミナルソフトで制御コードを伝送する

図3-9 ターミナルソフトで制御コードを伝送する

 

通常の操作では、デバイスのコンポーネントが違う制御コードに従って、動作することが分かります。

この方法は、接続が成功したかどうかをテストするためにのみ使用されて、アプリケーションではあまり便利ではありません。ベスト結果を達成するには、プログラムを通じて行う必要があります。どの言語を使用するのか、実際にどっちも可能です。人気のあるクロスプラットフォーのプログラミング言語の python を使用してテストをしてみます。

pythonを使用する

次のプログラムは python3 を使用して実行されます。プログラムの構造は非常に簡単で、1 秒ごとに 3 セットの制御コードをSerial Portに直接書き込むだけで、デバイス上の計測器が回転し続けます。
 

import serial
from time import sleep

"""
The name of Com Port varies according to the operating system, For example:
Raspberry Pi: /dev/ttyUSBn (e.g. /dev/ttyUSB0)
Windows: COMn (e.g. COM22)
"""
# Raspberry Pi / Rasbian
# COM_PORT = '/dev/ttyUSB0'
COM_PORT = 'COM22'

v000 = bytes.fromhex('7B06000600006251')
v050 = bytes.fromhex('7B0600060032E384')
v100 = bytes.fromhex('7B060006006463BA')

ser = serial.Serial(COM_PORT, 115200)
while True:
ser.write(v000)
sleep(1.0)
ser.write(v050)
sleep(1.0)
ser.write(v100)
sleep(1.0)
ser.write(v050)
sleep(1.0)

 

Pythonのソースコードはさまざまなプラットフォームで実行できるため、Serial Portの名前が正しくて、適切な変換ケーブルが接続されるなら、基本的には正常に動作できます。

ただし、これらの制御コードは実際のアプリケーションに沿ったものではないので、これらのコマンドを十分に活用するには、コマンドの内容を理解する必要があります。

四、 制御コードを分析する

 

比較分析

同じコンポーネントで異なる値のコマンドを比較する:

Table

青い枠線が設定したコンポーネントの値です。

違うコンポーネントで同じ値のコマンドを比較する:

Table

青い枠線は、明らかにコンポーネントのあるインデックスまたはアドレスと考えています。

後ろの2つのbytesのデータは特にルールはないようですが、下記の制御コードを解明するところを見てください。

制御コードを解明する

実はこの 8 bytesの内容は、いわゆる Modbus メッセージです。各フィールドの意味は下記の図で説明します。

図4-1 制御コードの実例を説明する

図4-1 制御コードの実例を説明する

 

ID識別コード:
各 Modbus デバイスには識別コードが必要です。SmartDisplayの識別コードは 0x7B = 123 です。

ファンクション・コード:
ファンクション・コードとはこのメッセージの目的を示すコードです。たとえば、ここでは 06 は Write Single Register で、指定された場所に値を書き込みます。

レジスタ アドレス:
レジスタのアドレス、書き込み先です。 (つまり、エレメントのアドレスです。)

データ:
書き込む内容です。(エレメント値です)

CRC
最初の6 bytesの CRC (Cyclic Redundancy Check) の結果は、送信プロセス中にデータにエラーがあるかどうかを確認するために使用されます。

少し分かるようになりましたか?さらに詳しく知りたい場合、Modbus とは何かを知る必要があります。

五、 Modbusの紹介

 

Modbusプロトコル

Modbus プロトコルは、実際にはデータ形式で、 マスタ・スレーブ方式の通信内容です。 データ構造ですので、RS232、RS422、RS485、さらにはネットワークなど、さまざまなデバイスを介して通信できます。

インターネット上にはすでに多くの範例および説明文章があるため、この記事では Modbus について詳しく説明しません。 簡単なルールさえ分かれば、Modbus を自由に使用できます。

概念モデル

Modbus は、データ送信を「レジスタ」(Register)として保存します。各デバイスは、独自のレジスタのタイプとアドレスを定義する必要があります。 デバイスにデータを送信することはいわゆる指定されたレジスタに書き込んむことです。データを読み取ることも、指定されたレジスタを読み取るということです。また、各アドレスレジスタの格納される値は 16 ビットです。

ファンクション・コード

データの特性に応じて、Modbus はいくつかの読み取りと書き込みの方法があって、メッセージ内のファンクション・コードによって指定されます。

表5-1Modbusファンクション・コード

表5-1Modbusファンクション・コード

 

SmartDisplay 制御プログラムの場合、最も一般的に使用されるのは06:Write single register (16 ビット値の書き込み) とRead holding registers (複数のレジスタの値の読み取り) です。

CRC

ここが一番謎だと思いますが、実は難しくありません。 その原理を深く学ぶ必要はなく、使い方が分かればいいです。(実際にはルックアップテーブルとビット演算だけで、最終的に16ビットのチェックコードを取得すします)。

六、 SmartDisplay コンポーネントの制御

前述のように、各 Modbus は独自のレジスタのタイプとアドレスを定義する必要があります。このトテーマについては以下で説明します。

レジスタの分類

SmartDisplay レジスタは、次の 3 つのカテゴリに分類できます。

1)デバイス情報(バージョン、デバイス名など)

04: ReadInputRegisters を使用して読み取ります。これらのデータはファームウェアが更新した時のみ変更されて、通常は接続したばかりにデバイスの特性パラメータを取得します。

2)コンポーネントの特徴(種類、位置など)

03: ReadHoldingRegisters/16: Write Multiple Register を使用して読み書きします。 これらのデータはコンポーネントの外観に影響を与えて、設計段階以外では変更されません。 コンテンツを変更するには、更新する前に SmartDisplay を一時的にオフにする必要があります。

3)コンポーネントの数値(コンポーネントで表される値は回転速度、オンまたはオフ、パーセンテージなど、コンポーネントごとに異なります)

運行中に変更する項目です。 各コンポーネントは 16 ビット値を使用するため、06:Write Single Register で設定されます。

以下はレジスタのリスト:

Input Registers

表6-1 SmartDisplay Input Registers

表6-1 SmartDisplay Input Registers

 

Holding Registers

表6-2 SmartDisplay Holding Registers

表6-2 SmartDisplay Holding Registers

 

初期の SmartDisplay は 10 個のコンポーネントしかサポートしていないため、widgetID の範囲は 0 ~ 9 (両端を含む) です。ファームウェアの新しいバージョンは 64 に拡張されていますが、アドレス指定方式が少し変更されています。この記事では説明しません。

これらのデータがあったら、制御命令をパッケージ化して、SmartDisplay に送信して制御することができます。 パッキング方法とCRCコードの追加方法については、次の章で説明します。

七、 ユーザーインターフェース

SmartDisplay を実用化するには、適切なヒューマンマシンインターフェース が必要で(特にグラフィック・ユーザー・インターフェース、GUI) 、その効果を最大化できます。 現在、クロスプラットフォームの GUI 開発プラットフォームには多くの選択がありますが、この記事では Qt を使用する方法を紹介します。

多くの人は Qt がGUI ライブラリだと思っていますが、実際にはかなり完成度の高い開発フレームワーク (Framework) です。アプリケーションがクラスライブラリを介して実装されている場合、プロジェクトはほとんど変更しなくてを複数のプラットフォーム (PC/Windows、Mac/MacOS、Raspberry Pi/Raspbian、Android、iOS、Embeded など) に簡単に移植できます。学ぶ価値のあるプログラミングツールです。

実際、Qt の新しいバージョンはModbus クラスライブラリを既にサポートしています。 しかし、ここでは説明するために、また他の言語に書き直せるように、最も基本的なシリアルポートの読み取りと書き込みからこのテストプログラムを実装します。

このプログラムは、シリアルポートを選択することと、前の例で使用した制御コードを送信する機能を提供するだけでなくて、また水平レバーを提供して指定されたコンポーネントの値を設定できます。 シリアルポートにCOM を選択した場合は、実際の番号を忘れずに入力してください。

下記の図は、このプログラムを Raspberry Pi と Ubuntu で実行した画面で、プログラムはまったく変更する必要はありません。

図 7-1 Raspberry Pi の SetWidgetValue 画面

図 7-1 Raspberry Pi の SetWidgetValue 画面

 

図 7-2 Ubuntu の SetWidgetValuet 画面

図 7-2 Ubuntu の SetWidgetValuet 画面

 

CRC 演算

CRC 演算は実際には複雑ではなくて、Qtで実装すると下記の通りになる:

QByteArray SetWidgetValue::calculateCRC(QByteArray data)
{
uint16_t crc = 0xFFFF;
for(int idx = 0; idx < data.length(); idx++)
{
uint8_t i = (uint8_t)crc ^ data[idx];
crc >>= 8;
crc ^= crcTable[i];
}
QByteArray ba;
ba.append(char(crc & 0xFF));
ba.append(char(crc >> 8));
return ba;
}

crcTable[ ] の内容は次のとおり:

const uint16_t crcTable[] =
{
0X0000, 0XC0C1, 0XC181, 0X0140, 0XC301, 0X03C0, 0X0280, 0XC241,
0XC601, 0X06C0, 0X0780, 0XC741, 0X0500, 0XC5C1, 0XC481, 0X0440,
0XCC01, 0X0CC0, 0X0D80, 0XCD41, 0X0F00, 0XCFC1, 0XCE81, 0X0E40,
0X0A00, 0XCAC1, 0XCB81, 0X0B40, 0XC901, 0X09C0, 0X0880, 0XC841,
. . .
0X8801, 0X48C0, 0X4980, 0X8941, 0X4B00, 0X8BC1, 0X8A81, 0X4A40,
0X4E00, 0X8EC1, 0X8F81, 0X4F40, 0X8D01, 0X4DC0, 0X4C80, 0X8C41,
0X4400, 0X84C1, 0X8581, 0X4540, 0X8701, 0X47C0, 0X4680, 0X8641,
0X8201, 0X42C0, 0X4380, 0X8341, 0X4100, 0X81C1, 0X8081, 0X4040
};

ここにすべてのコンテンツがリストされているわけではありません。github に完全な情報があって、使用方法だけ理解すればいいです。

データのパッケージ化

以下は、UI に従って制御コードを計算して、それをSmartDisplay に送信する関数:

void SetWidgetValue::on_sbValue_valueChanged(int value)
{
int id = ui->edWidgetID->text().toInt();
sendWidgetValue(id, value);
ui->lbValue->setText(QString::number(value));
}

void SetWidgetValue::sendWidgetValue(int id, int value)
{
QByteArray msg;
uint16_t addr = (uint16_t)(id * 100 + 6);
msg.append(deviceID);
msg.append(writeSingleRegister);
msg.append((uint8_t)addr >> 8);
msg.append((uint8_t)addr & 0xFF);
msg.append((uint8_t)value >> 8);
msg.append((uint8_t)value & 0xFF);
QByteArray msgToSend = msg.append(calculateCRC(msg));
writeSerialPortData(msgToSend);
}

すでに Qt に精通している場合は、上記のコードを理解するのは難しくありません。よく知らない場合は、少し勉強してみて、深く学ぶ価値があります。 慣れてきたら、クロスプラットフォームのアプリケーション開発や、迅速にシステムの試作品を作成することにすごく適しています。

八、 詳しい範例

前の例でコンポーネント値の設定だけ説明しました。 興味のある読者にもっと深く理解させるために、より詳しい範例SmartDisplayConsoleがあります。 次の図は、Raspberry Pi での実行画面です。

圖8-1 Raspberry Pi の SmartDisplayConsole 画面

圖8-1 Raspberry Pi の SmartDisplayConsole 画面

 

記事の最後にgithubのURLがありますので、参考にして一緒に勉強しましょう。

九、 結論

SmartDisplayの制御手順を説明して、さまざまな制御方法も提供しています。その知識と豊かな想像力を活用して、より多様な製品を作成することができると信じています。SmartDisplay でより良い未来を一緒に作りましょう。

十、 参考資料

Serial Terminal Basics
https://learn.sparkfun.com/tutorials/terminal-basics/command-line-windows-mac-linux

Modbus
https://www.modbustools.com/modbus.html
https://www.modbusdriver.com/doc/mbusmaster.net/modbus.htm

十一、 サンプルソースコード

GettingStartedWithSmartDisplay
https://github.com/Smart-Display-Series/GettingStartedWithSmartDisplay.git

SmartDisplayConsole
https://github.com/Smart-Display-Series/SmartDisplayConsole.git

追記:この技術文書の原文は中国語で、和訳の内容に疑問がある場合は、原文をご参考お願いします。

 

Link to Technology web page

 

TOP