メキキバイトソフトウェア開発チーフの和田悟です。
私、入社前に、プロダクトの開発環境や技術レベルは、知っておきたい派です。
弊社は様々なプロダクトがありますが、私はメキキバイトを作っています。
c#の知見高めたい・フツパーの技術が知りたい方は是非お読みくださいませ。
メキキバイトとは?
メキキバイトとは、外観検査のプロダクトです。機能は、以下のことが出来ます。
- ベルトコンベア上などに流れる製品に不良があったら排除(空気圧やフリッパー)
- AI作成のための画像収集&SaaS(Hutzper Insight)にアップロード
- 検査画像をSaaS(Hutzper Insight)に送信
- SaaS上で統計データを確認出来る。
メキキバイトの詳細はコチラ
【FOOMAアワード2024】審査委員会賞を受賞いたしました🏆 | News
メキキバイトのソフトウェアの内部実装
ざっくり、以下のようになっています。
- 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:
GitHub - wolfpld/tracy: Frame profiler
デモサイト:https://tracy.nereid.pl
次回
スレッドを上手に使うために、たくさんの制御方法があります。
参照 System.Threading や System.Collections.Generic など。
弊社でよく使っているのは以下です。(多用しすぎても理解大変なので一部だけ使うようにしています)
- ManualResetEvent
- Lock
- InterLock
- ConcurrentDictionary
- ConcurrentQueue
基本的にロックフリーなコンテナやアトミック演算でなんとかして、なるべくロックしないような作りを目指しています。この辺り、メキキバイトでは実際にどうつかっているのか書きます。
次回以降も技術記事書いていくので、気になる方はフォローよろしくお願いします。