<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title><![CDATA[ 全年1月31日の投稿［7件］ - 電装工芸日記 - 舞台照明機器の製作とか - ]]></title>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi</link>
	<description><![CDATA[ 今年は開発案件を進めたい ]]></description>
	<language>ja</language>
	<copyright>Copyright 2026</copyright>
	<lastBuildDate>Tue, 21 Apr 2026 06:51:15 +0900</lastBuildDate>
	<generator><![CDATA[ <!-- てがろぐ Version: -->Powered by <a href="https://www.nishishi.com/cgi/tegalog/" target="_top">てがろぐ</a> Ver 3.4.0 ]]></generator>
	<!-- BEGIN ENTRIES -->
	<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　Art-Net 切替器もパッチも基本的に同じ物として考えて… ]]></title>
	<description><![CDATA[ 　Art-Net 切替器もパッチも基本的に同じ物として考えています。<br /><br />　基本構成は受信部と送信部があり、間に値を加工するエフェクターを挟みます。<br />　内部は８ユニバースとし、これらをバスと呼称します。<br />　ミキサーというかマージは一番若いバスのみ一般照明向けとしてHTPで考えています。演出操作用ではなく小型サブ卓による作業灯や非常灯用と割り切り、レガシーDMXの入力を１本だけマージするかもしれません(エキストラマージ)。<br /><br />　受信部はIPアドレスやMACアドレスで送信元を選択し、Art-Net ユニバースをバスに渡します。切替器の実体はここです。<br />　エフェクターとはバスの値を加工します。エキストラマージ、パッチ、プロファイルカーブ、ディレイなどはエフェクターとして扱います。ここで何もしなければ単なる切替器です。<br />　送信部はバスの値を Art-Net で送信します。<br /><br />　RDM には対応しません。<br />　複数のコンソールを設置する環境ならば切替器から見てフィクスチャー側に RDM コンソールを繋いだ方が良いと思うからです。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%41%72%74%2d%4e%65%74" class="taglink" title="Art-Net">#&#91;Art-Net&#93;</a> -- Posted by 電装工芸 〔476文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=1188</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=1188</guid>
	<category>tegalog</category>
	<pubDate>Sat, 31 Jan 2026 10:29:18 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　Antari F1-FAZER の排煙器の焦げカス除去に「… ]]></title>
	<description><![CDATA[ 　Antari F1-FAZER の排煙器の焦げカス除去に「ジクロロメタン」を使うのはどうだろう。３Ｄプリンタの製作物の表面処理で使ってますが、セルロース、エステル、油脂、樹脂を溶かす性質があるそうな。スモークリキッドの焦げカスも溶かしてくれないだろうか。発煙器は高温になるので内部に樹脂やゴムの部品は無いものと予想していますが、そうならジクロロメタンで侵されることは無いハズです。<br />　気をつけなければならないのは毒物であることです。吸引すると呼吸器系に良くないそうな。<br />　どのように施工するか考えてみましょう。<br /><br />追記<br />　ジクロロメタンで溶けないOリングやパッキンはフッ素樹脂(PTFE)だそうな。ステンレス製の調理用注射器を用い、パッキンをフッ素樹脂製に変えればよいのかな？<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%e5%99%a8%e5%85%b7%e3%81%ae%e4%bf%ae%e7%90%86" class="taglink" title="器具の修理">#器具の修理</a>  -- Posted by 電装工芸 〔348文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=999</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=999</guid>
	<category>tegalog</category>
	<pubDate>Fri, 31 Jan 2025 18:00:15 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　てなわけで、socketの実験に入る下準備が整いました。P… ]]></title>
	<description><![CDATA[ 　てなわけで、socketの実験に入る下準備が整いました。Pythonで出来たことですからＣ言語(gcc)で出来ないことではないでしょう。<br />　Art-Netエンジンを構成するにはFIFOというか循環配列というかリングキャッシュというかQueueも勉強しないとけません。例えば1024個の配列を作ったとして、これがリング状に繋がったイメージで使います。1024で折り返すカウンタを使って配列の基点位置を表すだけですが、カウンタの計算モジュールだけでもライブラリ化しないと面倒かなと。<br />　これはDelayで必要な機能です。一定の時間間隔でDMXのデータを保存し続ければ配列サイズが許す範囲で過去情報を取り出せます。つまりDelayになります。受信毎の保存でないことが肝ですが、往年のテープエコーと要領は同じです。<br />　Ｃ言語はボチボチ書けるようになってきましたし、先達の情報も読み取れるようになってきました。パッチマシンとしての完成は先としても、この閑散期にArt-Netエンジンだけでも完成させたいです。<br /><br />　あとは、コマンド入力と処理の方法も考えないといけません。<br />　ルールマップに基づいた入力制限とか、入力されたコマンドや数値のスタック方法とか、それの表示とかです。入力値はコマンドと数値の文字列で処理関数に渡すつもりですが、それをどの様に解析して実行するかも案外難しい。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%41%72%74%2d%4e%65%74" class="taglink" title="Art-Net">#&#91;Art-Net&#93;</a> <a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%ef%bc%a3%e8%a8%80%e8%aa%9e" class="taglink" title="Ｃ言語">#Ｃ言語</a> -- Posted by 電装工芸 〔603文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=492</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=492</guid>
	<category>tegalog</category>
	<pubDate>Tue, 31 Jan 2023 16:21:14 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　キー入力の処理を書き直してみました。 ]]></title>
	<description><![CDATA[ 　キー入力の処理を書き直してみました。<br />　ファンクションキーやカーソルキーなどの複数バイトでキーコードを出すキーも扱えます。shiftやAltなどの装飾キーは拾えませんケド。<br />　入力の待ち時間はありません。get_inkey()はすぐ戻ってきます。戻り値はキーコードの長さを表しますが、０なら入力が無かったと判別出来ます。<br />　得られるのは標準入力からのASCIIコードです。read()はキャッシュを読むだけでタイミング次第では取得値に複数のキーコードが混じることがありますが、これをキー単体のコードとして仕分けています。キャッシュの一番前のキーコードだけを取り出す単純な仕分けで、想定外のキーコードは読み飛ばしていますが十分でした。<br />　キーコードで何かをするにはswitch文やif文でそのコードを仕分ける必要があります。<br />　正常に動かすなら、100msec(1/10秒)毎以下でget_inkey()を読みに行く必要があります。<br />　定数設定とプロトタイプ宣言をヘッダーファイルに書けばincludeしてライブラリとして使えます。mainはコメント化して使った方がいいですけど。<br /><br /><small class="decorationT"><span class="decorationF deco-code">Raspberry Pi 4B / Rasbian11_32bit(blueseye) / OS標準gcc<br />/*　---------------------------------<br />　　リアルタイムにキー入力をチェックする<br />　　--------------------------------- */<br />/*　getcharはキー入力のキャッシュが空だと入力があるまで待つ。<br />　　キャッシュが無いなら無いでそのまま抜けたいが、タイムアウトを設定しても<br />　　抜けない。環境に寄るのかもしれないが、ioctl.hを用いることで<br />　　タイムアウトが実現できた。<br />　　get_inkeyの呼び出しは100msec(1/10秒)毎以下で繰り返し行うこと。短い方がいい。<br />*/<br /><br />/*　ライブラリ読み込み */<br />＃include &lt;stdio.h&gt;<br />＃include &lt;sys/ioctl.h&gt;<br />＃include &lt;termios.h&gt;<br />＃include &lt;unistd.h&gt;<br />＃include &lt;time.h&gt;<br /><br />/*　定数設定 */<br />＃define SET 1　　　　　　　 // ioctl.readのモードをRawにするフラグ<br />＃define RESET 0　　　　　　 // ipctl.readのモードをCanonicalに戻すフラグ<br />＃define LENGTH_STACK 32　　 // キー入力のスタック長 状況によるが、長めにしないと取り出しが半端になる<br />＃define ESC 0x1B　　　　　　// ASCIIコード ESC <br />＃define BRACKET 0x5B　　　　// ASCIIコード ［<br /><br />/* プロトタイプ宣言 */<br />int get_inkey( char *get_char ) ;　　　 // キー入力を取得する関数<br />　　// 戻り値　　　　　　　　　　　　　 // -1=エラー、0&gt;=取得したキーコードの長さ<br />　　// char *get_char　　　　　　　　　 // 取得したキーコードを返すポインタ<br />int set_inkey( int mode_flag ) ;　　　　// キー入力のモードを設定する関数<br />　　// int mode_flag　　　　　　　　　　// モードの設定フラグ 1(SET)=Rawモードにする / 0(CLR)=モードを戻す<br /><br />/*　テスト用main */<br />int main(void) {<br />　　int i ;　　　　　　　　　　　　　　 // for文用カウンタ<br />　　char get_char［ LENGTH_STACK ］ ;　　 // 入力されたキーコードを保存する変数<br />　　int ret_inkey　;　　　　　　　　　　// get_inkeyからの戻り値を保存する変数<br />　　/* コンソールの設定を初期化 */<br />　　set_inkey( SET ) ;<br />　　/* 無限ループで入力したキーを表示する */<br />　　for(;;) {<br />　　　　usleep( 1e5 ) ;<br />　　　　ret_inkey = get_inkey( get_char ) ;　　　　 // get_inkeyから文字取得<br />　　　　/* get_inkeyの戻り値を処理 */<br />　　　　if( ret_inkey == -1 ) break ;　　　　　　　 // 戻り値が-1ならエラーなのでループから抜けて終了<br />　　　　if( get_char［0］ == 0x0A ) break ;　　　　　 // エンターキーが押されたならループを抜けて終了<br />　　　　/* 入力された文字を出力する */<br />　　　　if( ret_inkey &gt; 0) {<br />　　　　　　for( i = 0; i &lt; ret_inkey; i++ ) {<br />　　　　　　　　if( get_char［i］ &gt;= 0x20 && get_char［i］ &lt;= 0x7E ) {　　　　　// 入力された文字を出力する・・・表示可能な文字<br />　　　　　　　　　　printf( &quot; %c&lt;%02X&gt;&quot;, get_char［i］, get_char［i］ ) ;<br />　　　　　　　　} else if( get_char［i］ &gt;= 0x00 && get_char［i］ &lt;= 0xFF ) {　 // 入力された文字を出力する・・・表示不可能な文字<br />　　　　　　　　　　printf( &quot;　&lt;%02X&gt;&quot;, get_char［i］ ) ;<br />　　　　　　　　}<br />　　　　　　}<br />　　　　　　printf( &quot;\n&quot; ) ;<br />　　　　}<br />　　　　fflush( stdout ) ;　// 画面表示のスタックを吐き出す　　　<br />　　}<br />　　/* 正常終了 */<br />　　printf( &quot;\n&quot; ) ;　　　　// 念のための改行<br />　　set_inkey( RESET ) ;　　// コンソールの設定を元に戻す<br />　　return 0 ;<br />}<br /><br />/* キー入力を取得する */<br />int get_inkey( char *get_char) {<br />　　// char *get_char　　　　　　　　　　　　　　　　　 // キーコードを返すためのchar配列のポインタ<br />　　int i ;　　　　　　　　　　　　　　　　　　　　　　 // for用変数<br />　　char in_char［ LENGTH_STACK ］ = { 0x00 };　　　　　　// 入力されたキーを取得<br />　　int read_length ;　　　　　　　　　　　　　　　　　 // read()戻り値 キーコードのバイト数<br />　　int put_length = 0 ;　　　　　　　　　　　　　　　　// 戻り値 キーコードのバイト数<br /><br />　　/* get_charの初期化 */<br />　　for( i = 0; i &lt; LENGTH_STACK; i++ ) {　　　　　　　 // すべての値を0x00にする<br />　　　　get_char［ i ］ = 0x00 ;<br />　　}<br />　　/* キー入力を読み取る */<br />　　read_length = read( 0, &in_char, LENGTH_STACK ) ;　 // read_lengthに取得バイト数、in_charにキーコードを得る<br /><br />　　/* 取得値の仕分け */<br />　　if( read_length &lt; 0 ) {　　　　　　　　　　　　　　 // 取得エラーなのでエラーを返して終了<br />　　　　return -1 ;<br />　　} else if( read_length == 0 ) {　　　　　　　　　　 // キーコードを得られなかったのでゼロを返す<br />　　　　return 0 ;<br />　　} else if( read_length == 1　　　　　　　　　　　　 // 取得が１バイトか先頭バイトがESC(0x1B)以外なら先頭バイトを返す<br />　　　　　　　|| in_char［ 0 ］ != ESC ) {<br />　　　　get_char［ 0 ］ = in_char［ 0 ］ ;　　　　　　　　　// 値コピー<br />　　　　return 1 ;<br />　　} else if( read_length &gt; 2　　　　　　　　　　　　　// 3バイト以上で先頭２バイトが0x1B(ESC)、0x5B(［)なら<br />　　　　　　　&& in_char［ 0 ］ == ESC　　　　　　　　　　// ファンクションキーまたはカーソルキー<br />　　　　　　　&& in_char［ 1 ］ == BRACKET ) {<br />　　　　get_char［ 0 ］ = ESC ;　　　　　　　　　　　　　 // 0バイト目<br />　　　　get_char［ 1 ］ = BRACKET ;　　　　　　　　　　　 // 1バイト目<br />　　　　put_length = 2;　　　　　　　　　　　　　　　　 // 戻り値設定<br />　　　　for( i = 2; i &lt; read_length; i++ ) {　　　　　　// 2バイト目以降をコピー<br />　　　　　　if( in_char［ i ］ == ESC ) break ;　　　　　 // 末尾にESCがあれば終了<br />　　　　　　　　get_char［ i ］ = in_char［ i ］ ;　　　　　// 値コピー<br />　　　　　　　　put_length++ ;　　　　　　　　　　　　　// 戻り値インクリメント<br />　　　　}<br />　　　　return put_length ;　　　　　　　　　　　　　　 // 戻り値送って終了<br />　　}<br />　　return 0 ;<br />}<br /><br />/* キー入力のモードを設定する */<br />int set_inkey( int mode_flag ) {<br />　　static struct termio tty_backup ;　　　　　　　 // 変更前の設定を保持<br />　　static struct termio tty_change ;　　　　　　　 // 変更後の設定を保持<br />　　/* モードを設定する */<br />　　if( mode_flag == SET ) {<br />　　　　ioctl( 0, TCGETA, &tty_backup ) ;　　　　　 // 現在の設定を読み出し<br />　　　　tty_change = tty_backup ;　　　　　　　　　 // 現在設定のスタック<br />　　　　tty_change.c_lflag &= ~( ECHO | ICANON ) ;　// エコーを止め、RAW モードへ変更<br />　　　　tty_change.c_cc［ VMIN ］= 0 ;　　　　　　　　// 0文字入力された時点で入力を受け取る<br />　　　　tty_change.c_cc［ VTIME ］ = 0.01 ;　　　　　 // 何も入力がない場合、1msec待つ (1 = 1/10sec)<br />　　　　ioctl( 0, TCSETAF, &tty_change ) ;　　　　　// ここで設定を反映<br />　　/* モードを戻す */<br />　　} else if( mode_flag == 0 ) {<br />　　　　ioctl( 0, TCSETAF, &tty_backup ) ;　　　　　// スタックしていた設定に戻す<br />　　}<br />　　return 0;<br />}</span></small><br /><small class="decorationS">　※ このブログシステムでは＃や［が機能文字扱いなので、上記ではこれらを全角文字で書いています。</small><br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%ef%bc%a3%e8%a8%80%e8%aa%9e" class="taglink" title="Ｃ言語">#Ｃ言語</a> -- Posted by 電装工芸 〔4874文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=491</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=491</guid>
	<category>tegalog</category>
	<pubDate>Tue, 31 Jan 2023 14:20:06 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　Art-Netを扱うためにはNICのアドレスを設定しなけれ… ]]></title>
	<description><![CDATA[ 　Art-Netを扱うためにはNICのアドレスを設定しなければなりません。<br />　手計算した値をOSに手打ち設定をしてもいいのですが、どうせなら自動設定にしたい。NICのMACアドレスとArt-NetのOEMコードがわかれば人が判断する要素は無く計算も単純なのですから。<br />　アプリケーションはPythonで書くつもりですが、OSの自動設定はbashスクリプトで書くのが自分流です。なぜなら、PythonでOS設定を変更すると結局はbashコマンドを発行するのですから同じ事です。なんでもかんでも高級言語を使えばいいってもんでもないんです。<br />　やることは、MACアドレスを文字列で取得し、必要な部分を切り出し、一部の文字列を数値に変換して計算し、IPアドレス起こしてコマンド文字列を作って実行するだけです。Linux(UNIX)は標準コマンドだけでこういったスクリプトを簡単に作れます。<br />　わたしはググってコピペするだけですけどね。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%41%72%74%2d%4e%65%74" class="taglink" title="Art-Net">#&#91;Art-Net&#93;</a> <a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%52%61%73%70%62%65%72%72%79%50%69" class="taglink" title="RaspberryPi">#&#91;RaspberryPi&#93;</a> -- Posted by 電装工芸 〔440文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=108</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=108</guid>
	<category>tegalog</category>
	<pubDate>Mon, 31 Jan 2022 22:33:11 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　本業も工作も取り急ぎの課題が無い状況です。精神的に追われる… ]]></title>
	<description><![CDATA[ 　本業も工作も取り急ぎの課題が無い状況です。精神的に追われる感覚が無いのは久しぶりです。<br />　Art-NetをRaspberryPiで扱う研究の準備は進めていますが、気持ちとしてはユッタリしております。<br />　ヒマってことは稼ぎが無いことでもあるので、あまり良い状況でもないのですが・・・<br /><br />　Art-Netを扱うRaspberryPiでは同一ゼグメントのIPアドレスを振った２つ以上のNICを別ゾーンとして扱うことが肝になります。入力のArt-Netと出力のArt-Netを1つのRaspberryPiで扱うには必要条件です。<br />　この状態はサーバーやネットワークを複雑に組むと発生し得ることなので可能だと思うのですが、私が適切な設定やプログラミングを出来るかは別問題なので、その研究というか勉強をするワケです。<br /><br />　となると、実験用に複数のRaspberryPiが必要です。<br />　１台は公式７吋モニタで組んだ方が後々の表示作りで都合が良いと思いますが、他はモニタを持たずにSSHでアクセス出来れば済むので、数台をまとめられる箱もあるといいですね。<br />　この様な箱は既製品にもあるにはありますが、RaspberryPiを束に出来るだけで、電源が考慮されいないだけでなく組んでしまうとGIPOに触りにくい状態になります。これじゃダメです。<br />　作るのも面倒なので改めて探してはみますが、キレイにカットしてキレイに塗装した１枚板に必要な物を取り付ければそれでもいいのかな？とも思っております。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%41%72%74%2d%4e%65%74" class="taglink" title="Art-Net">#&#91;Art-Net&#93;</a>  <a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%52%61%73%70%62%65%72%72%79%50%69" class="taglink" title="RaspberryPi">#&#91;RaspberryPi&#93;</a> -- Posted by 電装工芸 〔666文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=107</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=107</guid>
	<category>tegalog</category>
	<pubDate>Mon, 31 Jan 2022 11:57:47 +0900</pubDate>
</item>
<!-- One Entry Data for RSS Feed -->
<item>
	<title><![CDATA[ 　３Ｄプリンタの仕上がりが稀に酷いことがあります。 ]]></title>
	<description><![CDATA[ 　３Ｄプリンタの仕上がりが稀に酷いことがあります。<br />　常にではないのでプリンタの故障ではなさそうですが、フィラメントが湿気を吸ってしまうと発生しやすい症状のようです。<br />　過去事例では、室温を30度前後、湿度40%以下の環境でプリントした２－３品目では良い結果が出ていましたので、低湿度にしばらく晒すと改善するのだろうと思われます。<br />　室内をこの状態に維持するのは無理ですが、フィラメントを低湿度で保管することは可能です。<br />　<a class="url" href="https&#58;//www.monotaro.com/p/0918/6143/" target="_blank" title="https&#58;//www.monotaro.com/p/0918/6143/">ドライキーパー</a>を買ってみました。小型の乾燥庫です。<br /><img class="embeddedimage" src="https&#58;//www.densokogei.jp/tegalog/images/20220131093537-admin.jpg" alt="20220131093537-admin.jpg"><br />　フィラメントをこの中に数日間保管してからプリントしてみようと思います。<br /><br /><a href="https&#58;//www.densokogei.jp/tegalog/tegalog.cgi?tag=%e3%82%ac%e3%83%81%e5%b7%a5%e4%bd%9c" class="taglink" title="ガチ工作">#ガチ工作</a>  -- Posted by 電装工芸 〔283文字〕 ]]></description>
	<link>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=106</link>
	<guid>https://www.densokogei.jp/tegalog/tegalog.cgi?postid=106</guid>
	<category>tegalog</category>
	<pubDate>Mon, 31 Jan 2022 09:28:47 +0900</pubDate>
</item>

	<!-- END ENTRIES -->
</channel>
</rss>

