アライメントの画像処理

ウェハなどの対象ワークの検査を行う前に、位置や傾きのアライメント(位置合わせ)を行うことが良くあります。
アライメントを画像処理で行う場合、調整する4点を求めて射影変換を行うことが多いです。

今回行った案件では、2点だけ求めて簡易なアライメントを行うため、アフィン変換を使用しました。

社内ライブラリで内部的にアフィン変換を使用することはありましたが、ライブラリのAPIとして外部から実行出来るようになっていなかったので、今回APIに追加を行いました。1点から3点の任意点数でアフィン変換が行えるようになっています。

工場の検査設備PCソフトのリプレイス

先週末にお客様工場のPCソフト更新に行ってきました。

以前に別会社さんが作成されたPCソフトの出来が良くないため、インフォテックで全てリプレイスを行った案件です。

同じような設備が4台あり、元々は設備ごとに微妙に異なるPCソフトを使用していましたが、インフォテックが作成したソフトでは、1種類のソフトで全ての設備が動作するようにしました。バラバラのソフトにすると保守に無駄に時間とコストがかかり、お客様の不利益になるので良くないです。

今回は最後の4台目の設備のPCソフト更新でした。
さすがに4台目になると慣れたもので、旧部材の撤去・新PCの設置・ADとI/Oの配線変更・動作検証などスムーズに進みました。

モバイルアプリ開発完了

長らく行っていましたモバイルアプリ開発が無事に完了しました。

工場向けの生産監視アプリで、設備の稼働状況などを表示したり、設備の設定を行えたりします。
以前にiOS用にXamarinで作成したアプリを、Xamarinサポート終了に合わせて全て作り変えました。
今回はiOSとAndroidの両対応で、フレームワークにMAUIを使用しています。

MAUIがまだ成熟していないので、出来ないことが多かったり、ネット上の情報が足りていなかったりと、想定以上に大変ではありましたが、無事に出来上がりました。

この開発のお陰で、.net6以降用の社内ライブラリと、MAUI用の社内ライブラリが出来上がり、今後の開発の基盤がだいぶ出来上がりました。

KOM-MICSの紹介動画

インフォテックがコマツ様と協力して作成している「工場見える化システム KOM-MICS」に関する、ものづくり太郎さんの紹介動画がアップされました。
https://www.youtube.com/watch?v=PSxVDmUP5hw

インフォテックの作成するソフトは普段はあまり表に出ないため、このような紹介動画が作られるのは初めてです。

KOM-MICSは、工作機械や溶接機などから稼働データや加工データなどの各種データを収集し、分析することで工場の稼働状況を可視化し、最適化に向けた施策立案を支援します。
生産プロセスの見える化と最適化により、コマツグループの生産性向上に大きく貢献しています。もし工場の見える化や改善活動に興味がある方は、ぜひ動画をご覧いただければと思います。

また、インフォテックのKOM-MICSサイトにも情報を記載しております。
https://www.infortec.co.jp/lp_kom-mics.php

スイッチボットによる設備のレトロフィット

スイッチボットは、家庭の照明スイッチに貼り付けて、スマートホーム化に使用されるIoTデバイスです。
一般的にはリモコン操作や遠隔操作で照明や家電を制御できるようになります。

最近の案件で、工場の既存の生産設備にスイッチボットを取り付けて、遠隔操作を行う案件を行いました。
スイッチボット自体は低価格で手軽に導入でき、ソフト開発の費用も最初の1台分だけなので、複数台の既存設備に簡単安価にレトロフィットすることが可能です。

WEBアプリに関するメモ

先日、iPhoneアプリのGUIを「ASP.NET Core MVC」に置き換える仕事を行いました。
今まで苦手であったWEB(HTML+CSS)の開発が人並みには出来るようになったと思います。

最近は工場向けの案件でもスマホでIoT見える化を行い、設備の稼働状態表示やエラー通知を行うなどのニーズなどがあるので、弊社のような制御系ソフト会社でもWEBアプリの知識が必要になってきています。

いくつか今後の開発のためにメモを残しておこうと思います。

・UI要素の配置に困ったらflexを使う

 今までWEBでのUI要素の配置が思うようにいかず、デスクトップアプリより柔軟性がないと思っていましたが、flexを使用するとほぼデスクトップアプリと同じ間隔で配置できるようになりました。
 まずはflexを使用し、うまくいかない場合だけ他の方法を使用するのがよさそうです。

・スクロール位置の復元

 クライアントからサブミットしてサーバに一旦戻して再描画するとスクロール位置が上に戻ってしまいます。
 これはサブミット前にスクロール位置をinputタグに格納し、再描画時に同じスクロール位置に戻せば解決します。
 これを各ページで行うのではなく、全てのページで共通実装にするのが良いです。

・アイコンライブラリ

 アイコンライブラリを使用して簡単にアイコンが表示できます。
 https://icons.getbootstrap.jp/

・Bootstrapの機能をもっと活用

 以下のBootstrapの目次を見た感じだと、スピナー、トースト、ツールチップあたりは導入しやすくすぐに役立ちそうです。
 https://bootstrap-guide.com/outline

WEBからダウンロードしたファイルのセキュリティブロックを解除する方法

WEBからダウンロードしたファイルはセキュリティブロックされており、「Microsoft Defender SmartScreen」の確認画面が表示されたりします。

このセキュリティブロックを解除するには、代替データストリームのZone.Identifierを削除する必要があります。

C#で解除する拡張メソッドを作成しました。
以下のUnblockメソッドを実行すると解除できます。


[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool DeleteFile(string name);

public static void Unblock(this FileInfo file) {
    file.IsReadOnly = false;
    DeleteFile(file.FullName + ":Zone.Identifier");
}

VSTOによるOfficeアプリの拡張

業務で久しぶりにVSTOを使用しました。

VSTOは、EXCELやWordなどのOfficeアプリケーションをカスタマイズし、機能を拡張するためのフレームワークです。これは、EXCELマクロ(VBA)の代替として使用され、以下の点で優れています。

1. C#で実装:VSTOはレガシーなVBではなく、C#でアプリケーションを拡張できます。
2. .NETのフル機能:VSTOは.NETフレームワークの全機能を利用できます。
3. GUI:WindowsFormsやWPFを使用して、Officeアプリケーションのユーザーインターフェースをカスタマイズできます。
4. コードの隠蔽:VSTOを使用することで、コードを隠蔽してアプリケーションを保護できます。

お客様がEXCELのVBAを使用して、工場内の設備の出来高や計測結果の集計などをされている場合がよくあります。
このようなVBAマクロをVSTOに置き換えることは、ユーザにとって新たな価値が生まれる可能性があります。

今後もVSTOを使用して効率的な開発を進めていきます。

AIチャット機能を実装

今回は弊社で開発しているアプリに実装したAIチャット機能についてご紹介します。
この機能は、アプリをさらにユーザフレンドリーにし、質問応答をスムーズに行えるようにするために導入されました。

AIチャット機能の実現方法

「Azure OpenAI」と「Azure AI Search」を組み合わせて、AIチャット機能を実現しました。以下に、具体的な手順を説明します。

  1. Azure AI Searchで関連する文章を取得
    「Azure AI Search」は、特定のキーワードやトピックに関連する文章を検索できる強力なサービスです。このサービスを活用して、ユーザの質問に適切な回答を提供するための情報を収集しました。
  2. Azure OpenAIで質問の回答を行う
    「Azure OpenAI」は、自然言語処理技術を駆使して、ユーザの質問に対して適切な回答を生成します。「Azure AI Search」で取得した文章をもとに、ユーザの質問に適切な回答を生成するために「Azure OpenAI」を活用しています。

驚くべき効果

実際にこのAIチャット機能を試してみると、以下のような驚くべき効果がありました。

  1. 文章量が少なくても適切な回答が生成される
    「Azure AI Search」で取得する文章量が少なくても、ユーザの質問に対して適切な回答が生成されることに驚きました。これにより、ユーザが短い質問をしても満足のいく回答を得ることができます。
  2. ユーザフレンドリーなアプリに貢献
    AIチャット機能は、ユーザがアプリを使いやすく感じる要素の一つです。この機能によってさらにユーザフレンドリーになり、ユーザの満足度を向上させることができました。

AIチャット機能は、技術アピールにもなりつつ、ユーザフレンドリーなアプリを作成するための非常に有効な手段であると感じています。今後もAI技術を駆使して、さらなるユーザビリティ向上を行っていきます。

C#でダブルバッファを使って画面のちらつきを防ぐ方法

今回は、C#でダブルバッファを使って画面のちらつきを防ぐ方法についてです。

画面がちらつくという現象は、画面の描画が速く行われるときに起こります。例えばウィンドウをリサイズしたりすると、画面の一部が更新されます。
このとき画面の更新が一瞬で行われると、画面がちらついて見えることがあります。これは、画面の更新がユーザーの目に追いつかないために起こります。

画面のちらつきを防ぐには、ダブルバッファという技術を使います。
ダブルバッファとは、画面に表示するデータを2つのバッファに分けて管理する方法です。
一つのバッファは、画面に表示されるバッファで、もう一つのバッファは、画面に表示する準備をするバッファです。
画面の更新が必要になったときには、準備されたバッファを画面に表示するバッファと入れ替えます。
このようにすると、画面の更新が一瞬で行われるのではなく、スムーズに行われるので、画面のちらつきが防げます。

C#のWindowsFormsでダブルバッファを使うには、DoubleBufferedプロパティを使用します。
DoubleBufferedプロパティは、コントロールのダブルバッファを有効にするかどうかを表すプロパティです。
DoubleBufferedプロパティをtrueにすると、コントロールのダブルバッファが有効になります。
ただし、単に自身のコントロールのDoubleBufferedをtrueにするだけでは、子コントロールのちらつきは防げません。
子コントロールも含めて全てのコントロールのDoubleBufferedをtrueにする必要があります。
しかし、子コントロールのDoubleBufferedは、通常は外部から設定できません。
そこで、リフレクションを使って、外部から子コントロールのDoubleBufferedを設定できるようにし、子コントロールのDoubleBufferedプロパティを再帰的にtrueに設定します。

このようにして、C#でダブルバッファを使って画面のちらつきを防ぐことができます。