全年全月5日の投稿[44件]
2026年3月 この範囲を時系列順で読む この範囲をファイルに出力する
C言語の共用体(union)ですが、教科書やら動画を見ますと「あまり使い道が無い」的な解説が多いような気がします。
されど、今回のArt-Net系の装置では便利です。Art-Net のポート番号 0x1936(6454) の受信値をとりあえず突っ込むだけで要素毎に取り出すことも出来るからです。例えば ArtDMX は530バイトのパケットですが、受信値を uint8_t[530] (または unsigned char[530]) の配列として保存するだけで ArtDMX の構造体としても扱えます。パディングに注意は必要ですが、便利に使えると思うのです。ID、OpCode、ProVer をまとめて評価するのに先頭12バイトを uint8_t[12] としておいて memcmp で判別することも出来ます。AertDMX と別種の Art-Net パケットもシームレスに扱えそうです。
天才を超越した神たちが何故 union を作ったのかを考えるとワクワクします。
とまぁ、最近C言語の理解が進んで一人笑いが止まらないアホの戯言でした。
オレメモです。
gccで構造体のパディングを回避する書き方。struct に続いて「__attribute__((__packed__))」を入れるそうな。gcc独特の書式らしいので、コンパイラに合わせた書式を使ってください。
typedef struct __attribute__((__packed__)) ad_struct {
uint8_t ad_ID[8];
uint8_t ad_OpCode[2];
uint8_t ad_ProVerHi;
uint8_t ad_ProVerLow;
uint8_t ad_Sequence;
uint8_t ad_Physical;
uint8_t ad_SubUni;
uint8_t ad_Net;
uint8_t ad_LengthHi;
uint8_t ad_Length;
uint8_t ad_Data[512];
};
ad_struct ad_data;
ArtDMXを保存する構造体はこんな感じに書けばよいのでしょう。たぶん。
この型を sizeof で見て530バイトならヨシです。
ついでに共用体の定義(案)です。
union an_stack {
uint8_t __attribute__((__packed__)) an_resv[530];
struct __attribute__((__packed__)) ad_struct {
uint8_t ID[8];
uint8_t OpCode[2];
uint8_t ProVerHi;
uint8_t ProVerLow;
uint8_t Sequence;
uint8_t Physical;
uint8_t SubUni;
uint8_t Net;
uint8_t LengthHi;
uint8_t Length;
uint8_t Data[512];
} ad_data;
} an_loopbuffer[8192];
こういうことでいいのかな?
共用体の書き方はまだよくわかってないのですけど。
共用体の配列を作って Art-Net のポートで受信したパケットを延々と保存します。8191番まで記録したら0に折り返すループバッファです。
8192個あれば44fps、8センダー、各16ユニバースで最短でも1.45秒分の保存が出来るハズです。十進数で8192なのは2進数(16進数)でキリの良い数値のため折り返し評価が少ない処理で出来るからです。十進数8192は16進数0x2000でキリがいいのです。このあたりはガリガリのアセンブラを書いてきた者にとって自然な着想です。10進数は人が日常的に慣れているだけで特筆するほど合理的な数体系ではありませんし、今どきのコンピュータ(論理回路)に合わせた方が便利です。
ヘッダーチェックは当該の配列要素(例えば an_loopbuffer[1024] )を示すポインタからmemcmpで12バイトをチェックすれば済みますので共用体には定義しません。
ArtDMX以外のパケットにも使えるチェック方法です。
#C言語
されど、今回のArt-Net系の装置では便利です。Art-Net のポート番号 0x1936(6454) の受信値をとりあえず突っ込むだけで要素毎に取り出すことも出来るからです。例えば ArtDMX は530バイトのパケットですが、受信値を uint8_t[530] (または unsigned char[530]) の配列として保存するだけで ArtDMX の構造体としても扱えます。パディングに注意は必要ですが、便利に使えると思うのです。ID、OpCode、ProVer をまとめて評価するのに先頭12バイトを uint8_t[12] としておいて memcmp で判別することも出来ます。AertDMX と別種の Art-Net パケットもシームレスに扱えそうです。
天才を超越した神たちが何故 union を作ったのかを考えるとワクワクします。
とまぁ、最近C言語の理解が進んで一人笑いが止まらないアホの戯言でした。
オレメモです。
gccで構造体のパディングを回避する書き方。struct に続いて「__attribute__((__packed__))」を入れるそうな。gcc独特の書式らしいので、コンパイラに合わせた書式を使ってください。
typedef struct __attribute__((__packed__)) ad_struct {
uint8_t ad_ID[8];
uint8_t ad_OpCode[2];
uint8_t ad_ProVerHi;
uint8_t ad_ProVerLow;
uint8_t ad_Sequence;
uint8_t ad_Physical;
uint8_t ad_SubUni;
uint8_t ad_Net;
uint8_t ad_LengthHi;
uint8_t ad_Length;
uint8_t ad_Data[512];
};
ad_struct ad_data;
ArtDMXを保存する構造体はこんな感じに書けばよいのでしょう。たぶん。
この型を sizeof で見て530バイトならヨシです。
ついでに共用体の定義(案)です。
union an_stack {
uint8_t __attribute__((__packed__)) an_resv[530];
struct __attribute__((__packed__)) ad_struct {
uint8_t ID[8];
uint8_t OpCode[2];
uint8_t ProVerHi;
uint8_t ProVerLow;
uint8_t Sequence;
uint8_t Physical;
uint8_t SubUni;
uint8_t Net;
uint8_t LengthHi;
uint8_t Length;
uint8_t Data[512];
} ad_data;
} an_loopbuffer[8192];
こういうことでいいのかな?
共用体の書き方はまだよくわかってないのですけど。
共用体の配列を作って Art-Net のポートで受信したパケットを延々と保存します。8191番まで記録したら0に折り返すループバッファです。
8192個あれば44fps、8センダー、各16ユニバースで最短でも1.45秒分の保存が出来るハズです。十進数で8192なのは2進数(16進数)でキリの良い数値のため折り返し評価が少ない処理で出来るからです。十進数8192は16進数0x2000でキリがいいのです。このあたりはガリガリのアセンブラを書いてきた者にとって自然な着想です。10進数は人が日常的に慣れているだけで特筆するほど合理的な数体系ではありませんし、今どきのコンピュータ(論理回路)に合わせた方が便利です。
ヘッダーチェックは当該の配列要素(例えば an_loopbuffer[1024] )を示すポインタからmemcmpで12バイトをチェックすれば済みますので共用体には定義しません。
ArtDMX以外のパケットにも使えるチェック方法です。
#C言語
2026年2月 この範囲を時系列順で読む この範囲をファイルに出力する
今後、出来上がった物を公開する際はGPLライセンスとします。
GPLライセンスとはソースコードや回路図を無償で公開するし使用や書き換えは自由だけれどサポートはしませんしバグがあってもトラブっても一切関知しませんってライセンスです。他にも色々ありますので詳細はその筋の情報をご覧ください。ものすごく簡単に言うなら著作権は放棄しないけど自己責任で自由に使ってくださいってのがGPLライセンスです。日本国内の法的にも有効です。
カスタマーサポートはしたくないし、本業の日程によってはサポートは不可能だからです。これまで製品を販売したことはありますが、カスハラ対応は非生産的で無駄。よかれと思って安く提供しても勉強も努力もしない輩に荒らされるのは私に何のメリットもありません。ここしばらく何も販売していなかったのはここにあります。
今作っている Art-Net 切替&パッチマシンは価値を感じてくれる人が少なからずいると思いますので広く提供する前提で考えていますが、商売として成立する価格にしたら高価になりそうですし、かといって同業者のよしみで安価にしたらサポートで私のメンタルが潰れます。そんならGPLライセンスにしようってことです。話をわかってくれる知人には完成試作品を試してもらいますし、専用基板は「部品」として安価に販売しますけど。RaspberryPiをコマンドラインで使え、gccでコンパイル出来、PICマイコンのIDEが使えて書き込みが出来、専用基板の回路図を読める人には難しくない工作です。
自分が欲しい物を自分のために作るのが前提ですから、購買者は神だと勘違いしたアホのことなど知ったことではありません。こんな悪意と嫌味と皮肉を垂れ流すほどカスハラで嫌な思いをしたのですが、知識と技能を持った人なら組める情報と専用部品を提供するので勘弁してください。
まだ「絵に描いた餅」ですけど(笑
#ガチ工作 #[Art-Net] #器具の製作
GPLライセンスとはソースコードや回路図を無償で公開するし使用や書き換えは自由だけれどサポートはしませんしバグがあってもトラブっても一切関知しませんってライセンスです。他にも色々ありますので詳細はその筋の情報をご覧ください。ものすごく簡単に言うなら著作権は放棄しないけど自己責任で自由に使ってくださいってのがGPLライセンスです。日本国内の法的にも有効です。
カスタマーサポートはしたくないし、本業の日程によってはサポートは不可能だからです。これまで製品を販売したことはありますが、カスハラ対応は非生産的で無駄。よかれと思って安く提供しても勉強も努力もしない輩に荒らされるのは私に何のメリットもありません。ここしばらく何も販売していなかったのはここにあります。
今作っている Art-Net 切替&パッチマシンは価値を感じてくれる人が少なからずいると思いますので広く提供する前提で考えていますが、商売として成立する価格にしたら高価になりそうですし、かといって同業者のよしみで安価にしたらサポートで私のメンタルが潰れます。そんならGPLライセンスにしようってことです。話をわかってくれる知人には完成試作品を試してもらいますし、専用基板は「部品」として安価に販売しますけど。RaspberryPiをコマンドラインで使え、gccでコンパイル出来、PICマイコンのIDEが使えて書き込みが出来、専用基板の回路図を読める人には難しくない工作です。
自分が欲しい物を自分のために作るのが前提ですから、購買者は神だと勘違いしたアホのことなど知ったことではありません。こんな悪意と嫌味と皮肉を垂れ流すほどカスハラで嫌な思いをしたのですが、知識と技能を持った人なら組める情報と専用部品を提供するので勘弁してください。
まだ「絵に描いた餅」ですけど(笑
#ガチ工作 #[Art-Net] #器具の製作
2025年10月 この範囲を時系列順で読む この範囲をファイルに出力する
QIDI Q2 の使い方は見えてきました。以前のプリンタと比べあらゆる意味で高性能・便利になっていますが、扱い方の根底に大きな違いはありません。慣れてくると以前のプリンタと同じ感覚で使えています。
驚くのはABSフィラメントの仕上がりです。何を基準に評価するかによりますが、以前のプリンタでPLAをプリントした程度に出ます。ABSでの条件出しに苦労した経験があると感動ものの綺麗さです。
プリントはとにかく速い。データを入れてプリントが開始するまでの儀式が長い感じもしますが、プリントが始まってしまえばあっという間。以前のプリンタが10年以上前の代物ですから比べたら失礼かもしれませんが、プリント時間は1/3から1/5って感じ(体感)です。
この QIDI Q2 がすごいというより、時代の進歩がすごいって感じです。
初めて3Dプリンタを使った人には感じられない感動かもしれませんけど。
#3Dプリンタ
驚くのはABSフィラメントの仕上がりです。何を基準に評価するかによりますが、以前のプリンタでPLAをプリントした程度に出ます。ABSでの条件出しに苦労した経験があると感動ものの綺麗さです。
プリントはとにかく速い。データを入れてプリントが開始するまでの儀式が長い感じもしますが、プリントが始まってしまえばあっという間。以前のプリンタが10年以上前の代物ですから比べたら失礼かもしれませんが、プリント時間は1/3から1/5って感じ(体感)です。
この QIDI Q2 がすごいというより、時代の進歩がすごいって感じです。
初めて3Dプリンタを使った人には感じられない感動かもしれませんけど。
#3Dプリンタ
2025年9月 この範囲を時系列順で読む この範囲をファイルに出力する
雨が上がったので材料を買ってきました。
アルミのフラットバーを先ほど削った切り欠きに合わせ、それを接着しつつネジ止めします。

ネジは仮固定の鍋ネジです。接着剤で着かないようにネジ山にシリコンを塗布しています。最終的には皿ネジにする予定ですが、皿頭が接着で着いてしまうと取れないのでこの様にしています。
強度と防水を両立させるのはナカナカ難しい。
#器具の修理
アルミのフラットバーを先ほど削った切り欠きに合わせ、それを接着しつつネジ止めします。

ネジは仮固定の鍋ネジです。接着剤で着かないようにネジ山にシリコンを塗布しています。最終的には皿ネジにする予定ですが、皿頭が接着で着いてしまうと取れないのでこの様にしています。
強度と防水を両立させるのはナカナカ難しい。
#器具の修理
台風による雨でイベントが中止になったのでちょっと加工。

割れたところを整えてみました。
ここにアルミのフラットバーかアングルを取り付けようと思います。接着だけでなくM4くらいのネジも入れましょう。
どうせなら進めようと思ったのですが、雨が強すぎて材料を買いに出られません。
何となく形にするのは難しくありませんが、水の進入を阻止するためにフランジ面を出来るだけ平らにするのが難しいかも。段差があると水の進入を許すだけでなく、ネジを締め込んだ時にフランジに負担がかかって割れます。
#器具の修理

割れたところを整えてみました。
ここにアルミのフラットバーかアングルを取り付けようと思います。接着だけでなくM4くらいのネジも入れましょう。
どうせなら進めようと思ったのですが、雨が強すぎて材料を買いに出られません。
何となく形にするのは難しくありませんが、水の進入を阻止するためにフランジ面を出来るだけ平らにするのが難しいかも。段差があると水の進入を許すだけでなく、ネジを締め込んだ時にフランジに負担がかかって割れます。
#器具の修理
筐体が割れて水が入った機体です。

アルマイトがかかっておりませんので白サビが凄い。

フランジ状の部分が割れていたのが水漏れの原因。
たぶん一番最初にバラした機体です。コーキングでの貼り合せを剝がすのにフランジが弱いところからコジってしまったので割れました。

中身は全交換ですが、割れた筐体をどうやって治すか。
割れた部分を接着してもパッキンを締め付けるためにボルトを締めるので外れてしまいます。
ガッツリ削ってアルミアングルを取り付けてフランジを再生しようと思っておりますが、アングルの取付けよりもフランジの面出しが難しい。
#器具の修理

アルマイトがかかっておりませんので白サビが凄い。

フランジ状の部分が割れていたのが水漏れの原因。
たぶん一番最初にバラした機体です。コーキングでの貼り合せを剝がすのにフランジが弱いところからコジってしまったので割れました。

中身は全交換ですが、割れた筐体をどうやって治すか。
割れた部分を接着してもパッキンを締め付けるためにボルトを締めるので外れてしまいます。
ガッツリ削ってアルミアングルを取り付けてフランジを再生しようと思っておりますが、アングルの取付けよりもフランジの面出しが難しい。
#器具の修理
2025年6月 この範囲を時系列順で読む この範囲をファイルに出力する
TaitanやETCでは正常なのにMA系の卓からの出力を正常に受信出来ないノードがあります。MAの卓は値が変化している最中は30fpsくらいですが、値の変化が無いと10fps位に落ちるのでコレが原因かなと妄想しています。DoctorMXでの計測ですが、レガシーDMXだけでなくArt-Netもしかりです。
原因は定かではありませんが繋がらないのは困ります。ArtNetPatchではどうしましょう。
fpsを一定にすることは外さないとして、ArtNetPatchの処理フェーズにも関係しそうな気がしてます。
#[Art-Net]
原因は定かではありませんが繋がらないのは困ります。ArtNetPatchではどうしましょう。
fpsを一定にすることは外さないとして、ArtNetPatchの処理フェーズにも関係しそうな気がしてます。
#[Art-Net]
ArtNetPatch は一時スタックに格納した後にどう処理するかが課題です。
一定以上の処理速度を確保しなければなりません。DMX512 は最大44fps ですので1フェーズあたり23msec.以下で動かす必要があります。4卓、各8ユニバースと想定するなら、受信1パケットあたりの総処理時間を710usec.以下にしなければなりません。RaspberryPi でも一時スタックに格納するまでの所要時間は150usec.くらいかと予想しますが、全体の処理が納まるかは感覚として微妙です。
Delay の扱いをどうするが鍵です。Delay を構成するには FIFO と呼ばれるループ型のスタックを使いますが、Art-Net を受信する度に FIFO に持って行くか、一旦一時スタックに留めて一定間隔で FIFO に持って行くか悩んでいます。前者ならソースコードは簡単ですがパケットの受信時刻を評価する回数が多く重くなり、後者ならソースコードが複雑になりますがスタックポインタの現在値からの単純なオフセットで処理出来るので軽くなります。簡単で重いか、複雑で軽いか、この両者の良し悪しは簡単には決められません。
後工程を考えずに前工程を決めてしまうと難儀することがあるので、工程全体をある程度イメージしてから進めなければなりません。
#[Art-Net]
一定以上の処理速度を確保しなければなりません。DMX512 は最大44fps ですので1フェーズあたり23msec.以下で動かす必要があります。4卓、各8ユニバースと想定するなら、受信1パケットあたりの総処理時間を710usec.以下にしなければなりません。RaspberryPi でも一時スタックに格納するまでの所要時間は150usec.くらいかと予想しますが、全体の処理が納まるかは感覚として微妙です。
Delay の扱いをどうするが鍵です。Delay を構成するには FIFO と呼ばれるループ型のスタックを使いますが、Art-Net を受信する度に FIFO に持って行くか、一旦一時スタックに留めて一定間隔で FIFO に持って行くか悩んでいます。前者ならソースコードは簡単ですがパケットの受信時刻を評価する回数が多く重くなり、後者ならソースコードが複雑になりますがスタックポインタの現在値からの単純なオフセットで処理出来るので軽くなります。簡単で重いか、複雑で軽いか、この両者の良し悪しは簡単には決められません。
後工程を考えずに前工程を決めてしまうと難儀することがあるので、工程全体をある程度イメージしてから進めなければなりません。
#[Art-Net]
2025年5月 この範囲を時系列順で読む この範囲をファイルに出力する
台車を塗装しました。

各種取り交ぜて49枚。2回塗り。
1回目はシーラーを兼ね合板に浸み込ませるイメージで薄めに、2回目は少し厚めに塗っています。結構な作業量でした。
本当なら2-3日乾かしてからスコッチブライトで表面を均してもう1回塗りたいのですが時間がありません。
#器具の製作

各種取り交ぜて49枚。2回塗り。
1回目はシーラーを兼ね合板に浸み込ませるイメージで薄めに、2回目は少し厚めに塗っています。結構な作業量でした。
本当なら2-3日乾かしてからスコッチブライトで表面を均してもう1回塗りたいのですが時間がありません。
#器具の製作
2024年6月 この範囲を時系列順で読む この範囲をファイルに出力する
DA変換には MAX528 を使おうかと思案中です。SPI制御で最大11v5mAを8ch扱えます。コレを2個使えば12ch対応出来ます。
東京スイッチングさんにお聞きしたところ信号は 5mA も供給出来れば十分とのことでしたのでバッファアンプ無しで行けそうです。少し怖いところもありますので4回路内蔵のオペアンプを入れようかな・・・
MAX528は日本国内では扱いが少ないようですが、手持ち在庫が少しありますし中国なら手に入ります。
#器具の製作
東京スイッチングさんにお聞きしたところ信号は 5mA も供給出来れば十分とのことでしたのでバッファアンプ無しで行けそうです。少し怖いところもありますので4回路内蔵のオペアンプを入れようかな・・・
MAX528は日本国内では扱いが少ないようですが、手持ち在庫が少しありますし中国なら手に入ります。
#器具の製作