見出し画像

【C#開発ノート-#1】メキキバイト-内部実装+マルチスレッドのデバッグ方法

メキキバイトソフトウェア開発チーフの和田悟です。

私、入社前に、プロダクトの開発環境や技術レベルは、知っておきたい派です。

弊社は様々なプロダクトがありますが、私はメキキバイトを作っています。

c#の知見高めたい・フツパーの技術が知りたい方は是非お読みくださいませ。


メキキバイトとは?

メキキバイトとは、外観検査のプロダクトです。機能は、以下のことが出来ます。

  • ベルトコンベア上などに流れる製品に不良があったら排除(空気圧やフリッパー)

  • AI作成のための画像収集&SaaS(Hutzper Insight)にアップロード

  • 検査画像をSaaS(Hutzper Insight)に送信

  • SaaS上で統計データを確認出来る。

メキキバイトの詳細はコチラ

メキキバイトのソフトウェアの内部実装

ざっくり、以下のようになっています。

  • c# .net6.0 (近日に8.0にする予定)

  • メキキバイトのソフトウェア1つで、全ての案件を柔軟にこなせます。(例外アリ)

    • 例)カメラ1台・IOデバイス1台

    • 例)ラインカメラ2台(裏表用)・照明1台・IOデバイス1台

    • 例)カメラ6台(裏+上+横4面)・照明2台・IOデバイス1台

    • などなど...

  • いろいろなデバイスに対応

    • 数種類の産業用カメラメーカ対応と台数

    • 数種類のデジタルIOデバイス

    • 数種類の照明デバイス

  • AIモデル

    • 弊社作成のSaaSで作った数種類のAIモデルに対応

  • エラー対策

    • 様々な問題の捕捉と対策

    • 問題が起きたら社内slackに通知

  • 0から全てスクラッチでコードを書いています。全て内製コードです。(パッケージは多用。)

  • コンピューターサイエンス

    • CPU使用率を下げれるだけ下げています

    • マルチスレッドで良く起きる問題と対策


マルチスレッドのデバッグ方法

たくさんのスレッドを制御していると、ある地点において、各スレッドがいまどうなっているか確認したいことがあります。そういった際にTracyを使うと、楽に確認が出来ます。

以下は、メキキバイトアプリケーションを動かしながら、tracyで確認している様子です。

Tracy上に表示させるには以下のコードを埋め込むことで計測が可能になります

using (Profiler.BeginEvent("TaskInference.Execute"))

{

    /* 何かしらの処理 */

    /* このように書くとTracy上で計測可能になる */

}

github:

デモサイト:https://tracy.nereid.pl

次回

スレッドを上手に使うために、たくさんの制御方法があります。

参照 System.ThreadingSystem.Collections.Generic など。

弊社でよく使っているのは以下です。(多用しすぎても理解大変なので一部だけ使うようにしています)

  • ManualResetEvent

  • Lock

  • InterLock

  • ConcurrentDictionary

  • ConcurrentQueue

基本的にロックフリーなコンテナやアトミック演算でなんとかして、なるべくロックしないような作りを目指しています。この辺り、メキキバイトでは実際にどうつかっているのか書きます。

次回以降も技術記事書いていくので、気になる方はフォローよろしくお願いします。