2024年3月 この範囲を時系列順で読む この範囲をファイルに出力する
音響も照明もデジタルコンソールを使うのが日常となりました。
これらはとても高機能で便利な機器ですが、弱点を申し上げるなら起動に時間がかかることと、瞬間停電で動作不良に陥ることがあることです。
機器に与える電源は半仮設なことが多いためコネクタの脱落や接点不良の可能性は拭えず、老朽化した劇場ですと空調器等の動作によっては瞬間停電に等しい状態に陥ることもあります。
完全停電ならともかく、瞬間停電による動作不良はクライアントに理解を得ることが難しく、ストレージへのアクセス中に電源が落ちますとシステムが深刻な支障に至ることもあります。
前置きが長くなりましたが、瞬間停電や数分の停電があってもコンソールの動作を維持する対策を施したいので「無停電電源装置」を使いたい。いわゆる「UPS」です。
UPSのバックアップ方式には様々な種類があるのでどんな状況でも安心とは言い切れませんが、無いよりは明らかに事故率を下げられます。
ただ、UPS製品は据え置きを前提にした物が多く、仕込んでバラしてを繰り返すと物理的に傷みやすい。
ならばと思ったのが、デスビとUPSをラックケースに1パッケージにしたモノはどうだ?というアイデア。デスビとはノイズフィルタとサージカットを提供する電源分配装置と言えばいいでしょうか。欲しいのは瞬間停電に対策し、電源ノイズを軽減し、サージカットをする物です。安価なUPSでもサージカットは入っています。ノイズフィルタまで入っている物は重装備の設備用となりますが、コモンモードフィルタを入れれば事足ります。
私の印象ですが、UPSと言えば「OMRON」さん。安価な普及品から高性能な重装備品まで幅広くラインナップし、何よりも保守用の交換バッテリーの入手に安心感があります。バッテリーの寿命は3-5年のため、安いだけ品はいざ交換したいときにバッテリーが手に入らないこともあるからです。
コンソール周りの消費電力は300wくらいが平均でしょうか。上には上がありますが、一番頻度の高い条件を一般条件とし、もっと必要なら複数使うなり専用品として対策する方向で。
OMRONさんの製品で19インチラックにマウント出来そうな安価な製品ですと「BX50F」でしょうか。
「BX50F」

バックアップ容量は500VA/300wなのでもう一息欲しい気もしますが、小型軽量だし、空冷余白や付属パネルを含めても2Uに収まりそうなので実用的かなと。
実は、OMRONさんのBZ50LT2をすでに使っています。一見安っぽいのですが十分に使えています。事故に遭遇したことはありませんが、試験停電させたところ数分保持しました。卓周辺で単体の消費電力が300wを越える製品は多くありませんし、BX50Fは形が違うだけで同等の製品ですから十分使えるでしょう。
#照明器具
これらはとても高機能で便利な機器ですが、弱点を申し上げるなら起動に時間がかかることと、瞬間停電で動作不良に陥ることがあることです。
機器に与える電源は半仮設なことが多いためコネクタの脱落や接点不良の可能性は拭えず、老朽化した劇場ですと空調器等の動作によっては瞬間停電に等しい状態に陥ることもあります。
完全停電ならともかく、瞬間停電による動作不良はクライアントに理解を得ることが難しく、ストレージへのアクセス中に電源が落ちますとシステムが深刻な支障に至ることもあります。
前置きが長くなりましたが、瞬間停電や数分の停電があってもコンソールの動作を維持する対策を施したいので「無停電電源装置」を使いたい。いわゆる「UPS」です。
UPSのバックアップ方式には様々な種類があるのでどんな状況でも安心とは言い切れませんが、無いよりは明らかに事故率を下げられます。
ただ、UPS製品は据え置きを前提にした物が多く、仕込んでバラしてを繰り返すと物理的に傷みやすい。
ならばと思ったのが、デスビとUPSをラックケースに1パッケージにしたモノはどうだ?というアイデア。デスビとはノイズフィルタとサージカットを提供する電源分配装置と言えばいいでしょうか。欲しいのは瞬間停電に対策し、電源ノイズを軽減し、サージカットをする物です。安価なUPSでもサージカットは入っています。ノイズフィルタまで入っている物は重装備の設備用となりますが、コモンモードフィルタを入れれば事足ります。
私の印象ですが、UPSと言えば「OMRON」さん。安価な普及品から高性能な重装備品まで幅広くラインナップし、何よりも保守用の交換バッテリーの入手に安心感があります。バッテリーの寿命は3-5年のため、安いだけ品はいざ交換したいときにバッテリーが手に入らないこともあるからです。
コンソール周りの消費電力は300wくらいが平均でしょうか。上には上がありますが、一番頻度の高い条件を一般条件とし、もっと必要なら複数使うなり専用品として対策する方向で。
OMRONさんの製品で19インチラックにマウント出来そうな安価な製品ですと「BX50F」でしょうか。
「BX50F」

バックアップ容量は500VA/300wなのでもう一息欲しい気もしますが、小型軽量だし、空冷余白や付属パネルを含めても2Uに収まりそうなので実用的かなと。
実は、OMRONさんのBZ50LT2をすでに使っています。一見安っぽいのですが十分に使えています。事故に遭遇したことはありませんが、試験停電させたところ数分保持しました。卓周辺で単体の消費電力が300wを越える製品は多くありませんし、BX50Fは形が違うだけで同等の製品ですから十分使えるでしょう。
#照明器具
機材の補助としてバンジーコードを輪にしたモノを使うことにしました。
バンジーコードとは周囲を繊維の編み込みで包んだゴム紐です。荷止めとして使われることが多いゴムです。
輪にするには端を繋げないといけませんが、バイスバーサノットと呼ばれる結び方が良さそうです。
少し難しい結び方ですが、ほどけ難いのは良いことです。
と言いつつ、これも良さそう。
#舞台の小物
バンジーコードとは周囲を繊維の編み込みで包んだゴム紐です。荷止めとして使われることが多いゴムです。
輪にするには端を繋げないといけませんが、バイスバーサノットと呼ばれる結び方が良さそうです。
少し難しい結び方ですが、ほどけ難いのは良いことです。
と言いつつ、これも良さそう。
#舞台の小物
ATXを汎用電源化するための基板を発注しました。
24ピンのATXコネクタを挿し、リセッタブルヒューズを介してXHコネクタに出力する物です。


PCBGOGOさんに発注しましたが、改めて価格を評価したところレジストやシルクの色で価格が随分違う。標準色(レジスト緑/シルク白)は安い。しかもリードタイムが短い。
これまでは気分で色を決めていましたが、見せ基板でないなら安くて早いが正義。これまで無駄遣いをしていたようです。
肝心の価格は送料別10枚で$19(日本円で2,876円)です。75x60mmサイズで1枚300円しません。サンハヤトさんの感光基板を買うより安いのに両面基板でレジストもシルクも入る。格安と言うしかありません。
送料は3,000円くらいですが、これを高いと言ったら何も始まりません。
ATX電源からは24P以外のコネクタも出ていますが、そのまま使うかコネクタを付け替えるかします。
追記
ジャンク箱を覗いて電源を見繕っていたら新品未開封のSFX(300w)が居ました。随分前に保守用としてストックした物だと思うので使うことはないでしょうし、新たなPCを組むには電力不足ですがRaspberryPiの開発環境には十分です。
ケーブルハーネスは短くします。パッケージをスッキリさせるには余計なケーブルが邪魔だからです。ちょっと面倒ですが、ATX電源のハーネスの加工を習得しておけば後で役立つかな?
この電源からはATXの24ピン、補助12vの4ピン、SATA、ペリフェラル4Pがそれぞれ1系統出ています。24ピンは今回作った基板にあてがってXHコネクタに出力し、補助12vはDCコネクタに付け替えてモニタなどの電源とし、SATAとペリフェラル4Pはそのまま残そうかなと。
#電子工作
24ピンのATXコネクタを挿し、リセッタブルヒューズを介してXHコネクタに出力する物です。


PCBGOGOさんに発注しましたが、改めて価格を評価したところレジストやシルクの色で価格が随分違う。標準色(レジスト緑/シルク白)は安い。しかもリードタイムが短い。
これまでは気分で色を決めていましたが、見せ基板でないなら安くて早いが正義。これまで無駄遣いをしていたようです。
肝心の価格は送料別10枚で$19(日本円で2,876円)です。75x60mmサイズで1枚300円しません。サンハヤトさんの感光基板を買うより安いのに両面基板でレジストもシルクも入る。格安と言うしかありません。
送料は3,000円くらいですが、これを高いと言ったら何も始まりません。
ATX電源からは24P以外のコネクタも出ていますが、そのまま使うかコネクタを付け替えるかします。
追記
ジャンク箱を覗いて電源を見繕っていたら新品未開封のSFX(300w)が居ました。随分前に保守用としてストックした物だと思うので使うことはないでしょうし、新たなPCを組むには電力不足ですがRaspberryPiの開発環境には十分です。
ケーブルハーネスは短くします。パッケージをスッキリさせるには余計なケーブルが邪魔だからです。ちょっと面倒ですが、ATX電源のハーネスの加工を習得しておけば後で役立つかな?
この電源からはATXの24ピン、補助12vの4ピン、SATA、ペリフェラル4Pがそれぞれ1系統出ています。24ピンは今回作った基板にあてがってXHコネクタに出力し、補助12vはDCコネクタに付け替えてモニタなどの電源とし、SATAとペリフェラル4Pはそのまま残そうかなと。
#電子工作
ATX(SFX)電源を汎用電源化するため、ATXコネクタを調べました。
以下がピンアサイン、規格ケーブル色、特殊ピンの機能です。
現行規格は24ピン、旧規格は20ピンです。カッコ内は20ピンの値。
ピンの並びは長手方向に1~12(10)、PIN1の隣に戻って13(11)~24(20)です。
ATX 24pin Connector Pin Assignment (20pins are in parentheses)
Cable Connector is Molex 5556.
Pcb Connector is Molex 5566.
------------
1 ( 1) +3.3v [Orange]
2 ( 2) +3.3v [Orange]
3 ( 3) GND [Black]
4 ( 4) +5v [Red]
5 ( 5) GND [Black]
6 ( 6) +5v [Red]
7 ( 7) GND [Black]
8 ( 8) PWR_OK [Gray] 起動し出力が安定すると+5vが出力されます。パイロットランプにも使用可。
9 ( 9) +5vSB [Purple] 起動していなくても電源が入力されると+5vが出力されます。パイロットランプにも使用可。
10 (10) +12v [Yellow]
11 +12v [Yellow]
12 +3.3v [Orange]
------------
13 (11) +3.3v [Orange]
14 (12) -12v [Blue]
15 (13) GND [Black]
16 (14) PS_ON [Green] GNDに落とすと起動します。NCにすると停止します。
17 (15) GND [Black]
18 (16) GND [Black]
19 (17) GND [Black]
20 (18) Rererved(-5v) [*NC] 配線されていないことが多い。されていれば-5v。
21 (19) +5v [Red]
22 (20) +5v [Red]
23 +5v [Red]
24 GND [Black]
------------
+3.3v x 4pin
+5v x 5pin
+12v x 2pin
-12v x 1pin
GND x 8pin
------------
他のコネクタも規格ケーブル色は上記と同じです。
+3.3v [Orange]
+5v [Red]
+12v [Yellow]
GND [Black]
※ ケーブルがすべて黒の製品も多い
16ピンをGNDに繋げれば起動しますので、物理スイッチを間に入れれば起動スイッチになります。
簡単な改造とは言えませんが、工作の汎用電源にはATX電源を使うといいような気がします。特にSFXの300w程度の物は小型で安価なマルチ電源と言えます。
参考:ATX/EPS電源のピンアサイン
#ガチ工作 #電子工作
以下がピンアサイン、規格ケーブル色、特殊ピンの機能です。
現行規格は24ピン、旧規格は20ピンです。カッコ内は20ピンの値。
ピンの並びは長手方向に1~12(10)、PIN1の隣に戻って13(11)~24(20)です。
ATX 24pin Connector Pin Assignment (20pins are in parentheses)
Cable Connector is Molex 5556.
Pcb Connector is Molex 5566.
------------
1 ( 1) +3.3v [Orange]
2 ( 2) +3.3v [Orange]
3 ( 3) GND [Black]
4 ( 4) +5v [Red]
5 ( 5) GND [Black]
6 ( 6) +5v [Red]
7 ( 7) GND [Black]
8 ( 8) PWR_OK [Gray] 起動し出力が安定すると+5vが出力されます。パイロットランプにも使用可。
9 ( 9) +5vSB [Purple] 起動していなくても電源が入力されると+5vが出力されます。パイロットランプにも使用可。
10 (10) +12v [Yellow]
11 +12v [Yellow]
12 +3.3v [Orange]
------------
13 (11) +3.3v [Orange]
14 (12) -12v [Blue]
15 (13) GND [Black]
16 (14) PS_ON [Green] GNDに落とすと起動します。NCにすると停止します。
17 (15) GND [Black]
18 (16) GND [Black]
19 (17) GND [Black]
20 (18) Rererved(-5v) [*NC] 配線されていないことが多い。されていれば-5v。
21 (19) +5v [Red]
22 (20) +5v [Red]
23 +5v [Red]
24 GND [Black]
------------
+3.3v x 4pin
+5v x 5pin
+12v x 2pin
-12v x 1pin
GND x 8pin
------------
他のコネクタも規格ケーブル色は上記と同じです。
+3.3v [Orange]
+5v [Red]
+12v [Yellow]
GND [Black]
※ ケーブルがすべて黒の製品も多い
16ピンをGNDに繋げれば起動しますので、物理スイッチを間に入れれば起動スイッチになります。
簡単な改造とは言えませんが、工作の汎用電源にはATX電源を使うといいような気がします。特にSFXの300w程度の物は小型で安価なマルチ電源と言えます。
参考:ATX/EPS電源のピンアサイン
#ガチ工作 #電子工作
今日もホール増員置きダヌキしてました。珍しく旗日にオフだったのですが、結構大掛かりなツアーだったので召喚された次第。
ツアーの皆様は仕事が出来る人ばかりのためタッパまで終わればバラシまでヒマですから調べ物や研究が出来るのです。
そんなワケで、コンソール画面を書く手段を新たに見つけつつ、Art-Netパッチの基本設計や要となる要素を整理し終わりました。机上作業が終わったので次は実機試験です。
VsCodeからSSHでRaspberryPiを触る方法で作業するのですが、この物理環境を今一度整備しましょう。パソコン、卓、node以外の必要な物が固定され配線されたトランク型のラップトップパソコンみたいなモノを作るです。配電盤箱よろしく中に合板を貼り付けてテキトウにビス止め出来るアルミトランクみたいなモノがあればいいでしょうか。これに電源(DC3.3v,5v,12v小型のSFX電源?)、RaspberryPi、モニタ、EtherneHubなどの基本用品と都度の課題で必要なモノを組み付けておくのです。キーボードはワイヤレスなので仕舞う場所だけ??。ここまでしておけば場所を選ばず作業出来そうです。
#ガチ工作 #器具の製作
ツアーの皆様は仕事が出来る人ばかりのためタッパまで終わればバラシまでヒマですから調べ物や研究が出来るのです。
そんなワケで、コンソール画面を書く手段を新たに見つけつつ、Art-Netパッチの基本設計や要となる要素を整理し終わりました。机上作業が終わったので次は実機試験です。
VsCodeからSSHでRaspberryPiを触る方法で作業するのですが、この物理環境を今一度整備しましょう。パソコン、卓、node以外の必要な物が固定され配線されたトランク型のラップトップパソコンみたいなモノを作るです。配電盤箱よろしく中に合板を貼り付けてテキトウにビス止め出来るアルミトランクみたいなモノがあればいいでしょうか。これに電源(DC3.3v,5v,12v小型のSFX電源?)、RaspberryPi、モニタ、EtherneHubなどの基本用品と都度の課題で必要なモノを組み付けておくのです。キーボードはワイヤレスなので仕舞う場所だけ??。ここまでしておけば場所を選ばず作業出来そうです。
#ガチ工作 #器具の製作
コンソールの画面操作では「ANSIエスケープシーケンス」を使うイメージでいましたが、「ncurses」と呼ばれる便利なライブラリがあることを今更知りました。これを使えばコンソール画面作りが楽になりそうです。
キー操作の扱いを調べていたのですが、「C言語で矢印キーの入力を完璧に検出する5つのステップ」を読んでいたら「ncurses」が便利とのこと。ここから調べを進めたところナルホドが連発。「cursesライブラリの超てきとー解説」を読むと概要がわかるような。
#C言語
キー操作の扱いを調べていたのですが、「C言語で矢印キーの入力を完璧に検出する5つのステップ」を読んでいたら「ncurses」が便利とのこと。ここから調べを進めたところナルホドが連発。「cursesライブラリの超てきとー解説」を読むと概要がわかるような。
#C言語
SharedMemory(共有メモリ)であるmmapの使い方が整理出来つつあります。
検証はこれからですが、理解出来たところをオレメモとして書いておきます。
あくまで「オレメモ」です。間違いアリアリでよろしくお願いします。
なお、mmapには様々な用法あるらしい。下記はプロセス間の共有メモリに限った使い方です。
/* mmapを使うためのライブラリ */
#include <sys/mman.h>
/* 共有メモリにテキストを代入する */
char *st; // 扱うデータの型でmmapのポインタを設定
int msize = 4096;
st = mmap( NULL, msize, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0 ); // ここまでやってからfork()でプロセスを分ける
*st = 'TEST'; // mmapに「TEST」が代入される(変数をポインタで扱う方法で扱える)
/* 使用後は共有メモリを解放する */
munmap( st, msize );
mmapの引数
1つ目(addr/NULL):mmapを定義するメモリアドレスを設定する項目だが、NULLにしておけばOSが決めてくれる。
2つ目(size/msize):確保するメモリサイズの指定。ページメモリのサイズの倍数にするベシというご意見と、欲しいメモリサイズを指定すればOSが調整してくれるというご意見など色々ある。変数の型からsizeofで得る方法(sizeof(int)など)を使われている方もいる。
3つ目(prot/PROT_READ | PROT_WRITE):読み書きモードを設定する。この書き方だと読み書き両方可能にする。
4つ目(flag/MAP_ANON | MAP_SHARED):MAP_ANONはファイルをマッピングせずに使う指定(共有メモリとして使うだけならこれでいい)、MAP_SHAREDはプロセス間で共有するという指定。
5つ目(fd/-1):ファイルディスクリプタの指定だが、上記でMAP_ANONにしているので-1で無しとする。
6つ目(offset/0):スタートアドレスからどれくらいずらしたところを使うか。
共有メモリは読み書きのタイミングをマネージしれくれませんので、何かしらの管理をしないといけません。
参考:ページメモリのサイズを取得する
#include <unistd.h>
#include <stdio.h>
long page_size = sysconf( _SC_PAGESIZE );
ついでにpipeも。
ただし、ここではpipe2(Linux固有)を使います。pipeの上位互換で引数でノンブロッキングの設定が出来るからです。通常のpipeはパイプが空の場合に有効なデータが取り出せるまで待ってしまいますがO_NONBLOCKを設定すると待ちません。
なお、以前の書き込みでpipeは単純なスタックと書きましたが、Queue程マネジメントされていないFIFOです。訂正します。
/* pipeを使うためのライブラリ */
#define _GNU_SOURCE // よくわからないけど必要なおまじない?
#include <fcntl.h> // O_*(ここではO_NONBLOCK) 定数の定義の取得
#include <unistd.h> // pipeの本体を呼ぶ
/* pipeの定義 */
int pipefd[2]; // ファイルディスクリプタとしてint配列を用いる 変数の名前は任意
if( pipe2( pipefd, O_NONBLOCK ) < 0 ) { // ファイルディスクリプタとする配列とノンブロッキングのフラグを引数にする
// pipe2の戻り値が-1なら設定エラー
}
/* pipeへの書き込み */
char *st = "TEST";
write( pipefd[1], st, strlen( st ) ); // strlenは<string.h>が必要。成功なら書き込んだバイト数、失敗なら-1が戻る。
/* pipeからの読み出し */
char buf[128];
read( pipefd[0], &buf, sizeof( buf ) ); // パイプが空の場合はEOFを得るか戻り値が0になると思われる。成功なら読み取ったしたバイト数、失敗なら-1が戻る。
/* pipeを閉じる(fork()して読み出し側書き込み側に分かれる場合はfork()した後に使わない側を閉じて運用する。もちろん終了する際にはすべて閉じる) */
close( pipefd[0] ); // 読み出しを閉じる
close( pipefd[1] ); // 書き込みを閉じる
int配列pipefdは[0]が読み出し[1]が書き込みになるファイルディスクリプタ。
#define MEMREAD 0
#define MEMWRITE 1
などとして使うとわかりやすいかも。
OSに寄りますが、スタック長は65536バイトが一般的らしい。
pipeは読み書きのタイミングをマネージしてくれます。
どちらもファイルを読み書きする手法を応用していますので、ファイルの読み書きの仕方を勉強しなおしてから取り組むとわかりやすいかもしれません。
#C言語
検証はこれからですが、理解出来たところをオレメモとして書いておきます。
あくまで「オレメモ」です。間違いアリアリでよろしくお願いします。
なお、mmapには様々な用法あるらしい。下記はプロセス間の共有メモリに限った使い方です。
/* mmapを使うためのライブラリ */
#include <sys/mman.h>
/* 共有メモリにテキストを代入する */
char *st; // 扱うデータの型でmmapのポインタを設定
int msize = 4096;
st = mmap( NULL, msize, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0 ); // ここまでやってからfork()でプロセスを分ける
*st = 'TEST'; // mmapに「TEST」が代入される(変数をポインタで扱う方法で扱える)
/* 使用後は共有メモリを解放する */
munmap( st, msize );
mmapの引数
1つ目(addr/NULL):mmapを定義するメモリアドレスを設定する項目だが、NULLにしておけばOSが決めてくれる。
2つ目(size/msize):確保するメモリサイズの指定。ページメモリのサイズの倍数にするベシというご意見と、欲しいメモリサイズを指定すればOSが調整してくれるというご意見など色々ある。変数の型からsizeofで得る方法(sizeof(int)など)を使われている方もいる。
3つ目(prot/PROT_READ | PROT_WRITE):読み書きモードを設定する。この書き方だと読み書き両方可能にする。
4つ目(flag/MAP_ANON | MAP_SHARED):MAP_ANONはファイルをマッピングせずに使う指定(共有メモリとして使うだけならこれでいい)、MAP_SHAREDはプロセス間で共有するという指定。
5つ目(fd/-1):ファイルディスクリプタの指定だが、上記でMAP_ANONにしているので-1で無しとする。
6つ目(offset/0):スタートアドレスからどれくらいずらしたところを使うか。
共有メモリは読み書きのタイミングをマネージしれくれませんので、何かしらの管理をしないといけません。
参考:ページメモリのサイズを取得する
#include <unistd.h>
#include <stdio.h>
long page_size = sysconf( _SC_PAGESIZE );
ついでにpipeも。
ただし、ここではpipe2(Linux固有)を使います。pipeの上位互換で引数でノンブロッキングの設定が出来るからです。通常のpipeはパイプが空の場合に有効なデータが取り出せるまで待ってしまいますがO_NONBLOCKを設定すると待ちません。
なお、以前の書き込みでpipeは単純なスタックと書きましたが、Queue程マネジメントされていないFIFOです。訂正します。
/* pipeを使うためのライブラリ */
#define _GNU_SOURCE // よくわからないけど必要なおまじない?
#include <fcntl.h> // O_*(ここではO_NONBLOCK) 定数の定義の取得
#include <unistd.h> // pipeの本体を呼ぶ
/* pipeの定義 */
int pipefd[2]; // ファイルディスクリプタとしてint配列を用いる 変数の名前は任意
if( pipe2( pipefd, O_NONBLOCK ) < 0 ) { // ファイルディスクリプタとする配列とノンブロッキングのフラグを引数にする
// pipe2の戻り値が-1なら設定エラー
}
/* pipeへの書き込み */
char *st = "TEST";
write( pipefd[1], st, strlen( st ) ); // strlenは<string.h>が必要。成功なら書き込んだバイト数、失敗なら-1が戻る。
/* pipeからの読み出し */
char buf[128];
read( pipefd[0], &buf, sizeof( buf ) ); // パイプが空の場合はEOFを得るか戻り値が0になると思われる。成功なら読み取ったしたバイト数、失敗なら-1が戻る。
/* pipeを閉じる(fork()して読み出し側書き込み側に分かれる場合はfork()した後に使わない側を閉じて運用する。もちろん終了する際にはすべて閉じる) */
close( pipefd[0] ); // 読み出しを閉じる
close( pipefd[1] ); // 書き込みを閉じる
int配列pipefdは[0]が読み出し[1]が書き込みになるファイルディスクリプタ。
#define MEMREAD 0
#define MEMWRITE 1
などとして使うとわかりやすいかも。
OSに寄りますが、スタック長は65536バイトが一般的らしい。
pipeは読み書きのタイミングをマネージしてくれます。
どちらもファイルを読み書きする手法を応用していますので、ファイルの読み書きの仕方を勉強しなおしてから取り組むとわかりやすいかもしれません。
#C言語
中華電機を覗いていたらこんな電圧計を発見!

調整に使うモノではないと思いますが、パイロットランプを兼ねて受電電圧の大雑把な確認には使えると思います。100v200vを間違っていないか、ドロップしていないかの確認ってことです。
これのいいのは薄いことです、奥行きが18mmしかありません。これまでは丸穴で小型の物は奥行きが50mm以上ありましたが、ここまで薄いなら箱のサイズに自由度が出ます。例えばTRUE1のレセプタクルを羊かん箱に実装すると奥行のために箱の表面には大きなブランクが出来ますが、ここを埋める配置で使えそうなので良いかなと。直電源のTRUE1化を少しづつ進めていますが、思案中の分岐ボックスに使えるかなと。
#器具の製作


調整に使うモノではないと思いますが、パイロットランプを兼ねて受電電圧の大雑把な確認には使えると思います。100v200vを間違っていないか、ドロップしていないかの確認ってことです。
これのいいのは薄いことです、奥行きが18mmしかありません。これまでは丸穴で小型の物は奥行きが50mm以上ありましたが、ここまで薄いなら箱のサイズに自由度が出ます。例えばTRUE1のレセプタクルを羊かん箱に実装すると奥行のために箱の表面には大きなブランクが出来ますが、ここを埋める配置で使えそうなので良いかなと。直電源のTRUE1化を少しづつ進めていますが、思案中の分岐ボックスに使えるかなと。
#器具の製作
プロセス間通信を大別しますと、SharedMemory(mmap含む)、Pipe、Queueです。左から「速いけど扱いが難しい」→「扱いが簡単だけど遅い」となるようです。
SharedMemoryは初期定義でメモリサイズを指定しなければなりませんが、型の指定は無く、ポインタを使った変数アクセスの要領で使えます。メモリサイズが最初から固定されるので実質的には型が決まった変数となりますが、読み出してもデータが残ることが特性でしょうか。
PipeはマネージされないQueueと思って捉えています。FIFOみたいな挙動で単純な受け渡しをする一時スタックです。
QueueはPipeが高度にマネージされFIFOまたはLIFOとして機能するイメージです。遅いのが難点ですが、速度を求めないなら便利な手段です。
SharedMemoryとPipeはどちらが速いか論争があるようですが、消さなければ残るメモリーと読みだしたら消える一時スタックというそもそもの違いがある上に、転送速度は誤差レベルの違いしか無いように思われますので、用途に合わせて使い分けるだけかなと・・・。
ネットの情報にも教科書にも、これらの違いを一覧してくれる情報がほとんどありません。関数のパラメータや動作特性などのそもそもの説明がなく、どれが速いか遅いかって比較があればましな方です。コピペの様なソースコードに「俺ってスゲーと思わね?」って感じの斜め上の応用を加えたコードが書かれている物ばかり。説明をしてくれる気持ちはありがたいのだけど、中途半端な応用に本筋が埋もれたサンプルコードを誰が喜ぶのかと疑問を感じたりしています。大変勝手な言い方ですが、検索結果が無駄に多くなって分かりやすい情報が埋もれてしまいますので、ガチのプロは見向きもしない、初心者には伝わらない、そんな「俺スゲーでしょ解説」はお控え願いたいものです。斜め上の応用は書く人それぞれのクセであって一般論とは言い難いのですし。
上記はネット検索で迷宮を彷徨ってしまった思いからの愚痴です。わかってんなら書けよとか言われそうですが、人に教えられる程習得出来たら是非書きたいものです。
#C言語
SharedMemoryは初期定義でメモリサイズを指定しなければなりませんが、型の指定は無く、ポインタを使った変数アクセスの要領で使えます。メモリサイズが最初から固定されるので実質的には型が決まった変数となりますが、読み出してもデータが残ることが特性でしょうか。
PipeはマネージされないQueueと思って捉えています。FIFOみたいな挙動で単純な受け渡しをする一時スタックです。
QueueはPipeが高度にマネージされFIFOまたはLIFOとして機能するイメージです。遅いのが難点ですが、速度を求めないなら便利な手段です。
SharedMemoryとPipeはどちらが速いか論争があるようですが、消さなければ残るメモリーと読みだしたら消える一時スタックというそもそもの違いがある上に、転送速度は誤差レベルの違いしか無いように思われますので、用途に合わせて使い分けるだけかなと・・・。
ネットの情報にも教科書にも、これらの違いを一覧してくれる情報がほとんどありません。関数のパラメータや動作特性などのそもそもの説明がなく、どれが速いか遅いかって比較があればましな方です。コピペの様なソースコードに「俺ってスゲーと思わね?」って感じの斜め上の応用を加えたコードが書かれている物ばかり。説明をしてくれる気持ちはありがたいのだけど、中途半端な応用に本筋が埋もれたサンプルコードを誰が喜ぶのかと疑問を感じたりしています。大変勝手な言い方ですが、検索結果が無駄に多くなって分かりやすい情報が埋もれてしまいますので、ガチのプロは見向きもしない、初心者には伝わらない、そんな「俺スゲーでしょ解説」はお控え願いたいものです。斜め上の応用は書く人それぞれのクセであって一般論とは言い難いのですし。
上記はネット検索で迷宮を彷徨ってしまった思いからの愚痴です。わかってんなら書けよとか言われそうですが、人に教えられる程習得出来たら是非書きたいものです。
#C言語
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105