シリアル通信の上限は?

ふと気になったことがあって、マイコンのデバッグで使うUART通信、

評価ボードだとUSB-UARTブリッジICが搭載されていて接続できたり、

あるいはRS-232Cに変換してPCと接続したり……

このときよく使われる通信速度として115200bpsというのがあるが、なんでこのスピードなんでしょうね?


そもそもUARTというのは調歩同期式シリアル通信の代表的なもので、

調歩同期式というのは信号線1本で通信を完結できる仕組みである。

一般的には送信・受信を分けて全二重にすることが多いが、それでも2本である。

SPI通信だとクロック・チップセレクト信号も伝達することが通常だが、

UARTではスタートビットの送信で通信開始を示し、

それを合図に取り決めたボーレートで順番にデータをやりとりして、

最後にストップビットをやりとりしたら1byte送信完了となっている。


UART通信を正しくやる上で肝心なのが時間精度である。

例えば9600bpsで通信する場合、104.2us周期で送信側は信号を切替、受信側はサンプリングしなければならない。

スタートビットからストップビットまでの間に1bitズレると通信に失敗する。

高速になるほど、これがシビアになるので難しい?


とはいえ、その上限が115200bpsとも思えないところはある。

確かにあるシステムでは同じ基板の上に乗ったマイコン同士が1MbpsのUART通信をしている。

なぜUARTなのかというと、この間に絶縁素子があるからである。

信号線1本(往復で2本)で伝達できるというのは絶縁という点でも有利である。

UARTというのはシンプルな方式なので、それ自体に上限はなさそうで、

問題は経路とインターフェースということになろうかと思う。

さっきの例だと絶縁素子のスピードで決まる部分が多いかと思う。

あるいはマイコンのUART機能はクロック周波数の8分周が最速とか決められてるので、

そういうところで最高速度が決まるということである。


通信相手がPCの場合に問題となりそうなのは、RS-232Cという伝送経路と、

USB-UARTブリッジICの性能というところが問題ではないかと思う。

今どきPC自体にRS-232Cが搭載されているということはそうそうなくて、

一般的にはUSB接続のRS-232Cインターフェースと組み合わせて使うが、

その内部にはUSB-UARTブリッジICが搭載されているのが通常である。

それをRS-232Cで引き出した先におくか、評価ボード上に置くかの違いである。


まず、RS-232Cの最高速度だが、規定上は20kbpsとなっているらしい。

この範囲内に入るボーレートでよく使われるのが9600bpsと19200bpsだが……

明らかにこれは実態に合っていなくてRS-232Cはもっと高速な通信で使われることは多い。

無難な数字として9600bpsとか19200bpsが使われることはあるが。

現実的な上限は150~250kbpsぐらいの範囲にあることが多いようだ。

ある基板に搭載されていたRS-232Cのドライバ/レシーバICではMaximum Data Rateは150kbps(min.)となっていた。

このICを介して行うRS-232Cの通信は150kbpsが上限になるということで、

冒頭に書いた115200bpsはその上限に近い数字である。

というか115200bpsの通信は通せる仕様ということでこうしたんじゃないか。


もう1つの要素としてはUSB-UARTブリッジICの対応速度がある。

1Mbpsぐらいは対応しているものが多いようである。

もう少し速くて2Mbpsとか3Mbpsとか対応したものもあるようだけど。

基板上で完結する通信ならば少なくとも1Mbpsぐらいは対応できるとみられるので、

USB-UARTブリッジICを基板上に置けばそのあたりが現実的な上限なのだろう。


というわけで115200bpsというのは現代的なシステムではほぼ対応できるボーレートで比較的速いものとして選ばれたのではないかと思う。

RS-232Cを通すとなると、さらに倍速の230400bpsが通るか通らないかというところ。

堅いのは115200bpsまでということなんだろう。

ただ、UARTという通信方式そのものは1Mbps程度までは対応可能で、

インターフェースや通信経路をよくよく精査すればより高速化は可能かもしれないと。


なんでこんな話を書いたかというと10MbyteぐらいあるデータをROMに書くのに、

マイコンにUARTで送って書き込んでもらうことを考えたのだが、

10Mbyteのデータを115200bpsで送ることを考えると、

UARTで1byte送るにはスタートビット+8bit+ストップビット=10bit送る必要があるので、

所要時間は 10×106×10/115200=868sと求まる。

868秒と言われてもピンとこないが、60で割ると14.5分である。

データ送信プロトコル(例えばYMODEM)のオーバーヘッドなど加味せずにこれだけかかるのである。


で、速くする余地はあるのかと考えたのだが、

まず最初に考えたのはデータ圧縮、ただ、すでに圧縮されているのか効果が見いだせなかった。

効果があればzlibとか組み込んでDeflateしたデータを送るとか考えたけど。

となると、通信速度自体を上げたいと調べたがRS-232Cを介する場合はこれが現実的な上限であると。

1Mbpsまで速くできれば100sだから、2分ぐらいで送信できる計算で、

これだとそんなに悪くない気がするが、さすがに15分は遅いなと。

というわけでシリアル通信で送る作戦は手軽でよいと思ったのだが、

こうも遅いとあまりよい方法ではないと思った。

他の手段がなければ15分かかっても仕方ないですけど。


結論から言えば、以前紹介したICEからプログラムでは無いものを書く方式が速かった。

ICEからプログラムでは無いものを書く

書き込み先のROMはマイコンのプログラムを格納するROMではなかったが、

マイコンには接続されているので、同じような書き込み方をすることはできた。

マイコンのデバッグインターフェースの速度次第だとは思うのだが、

一般的に考えればUARTよりは速いわけで、データ転送だけ考えれば速い。

あとはオーバーヘッドなど総合的に見てどうかという話ではあるけど、

数分で書き込み完了できたので、この方法がよいと思った。

ただ、ICEで接続できる場合に限られるので、やはりシリアル通信で書き込みたい話もあるかもしれない。

Cでレジスタを使ってやらかしてる

コンパイラのバージョンを変えたら正しく動かないという話があり、

なんのこっちゃと調べていたらレジスタやスタックの使い方が変わったことで、

既存のバグ(かそれに近いもの)が露呈した形である。


1つはスタックに確保した配列の範囲外を操作したことによるもので、

なぜこれが見逃されてきたかというのは気になるところだが、

配列サイズを適切に設定すれば解消する問題なので、これはこれでよい。

問題は残り2つで、元々スタックの使用方法に依存する処理と、

どうしてもレジスタ上で処理してほしい処理である。


スタックの使用方法に依存する処理はコンパイル結果に依存することは口伝されていたので、

新しいコンパイル結果に見合った調整を行えば回避できる。

が、そもそもスタックの使用方法に依存する処理というのが問題じゃないかという話で、

そこに依存しないように作っておくべきだったのではというのは……

この問題への僕の考える答えは後で書く。


もう1つのどうしてもレジスタ上で処理したい処理の話だが、

端的に言えばコーディングの問題である。

Cのコーディングでこの変数はレジスタ上に配置することを保証することはできない。

変数宣言時にregisterキーワードを付けるとレジスタ上に配置するよう努めるが、

必ずしもレジスタ上に配置しなくてもよいとされている。

それでコンパイラの独自拡張で変数の配置場所をレジスタに指定することができて、

これを使うことでCでコーディングしながらレジスタ上での処理が保証できるようになっていたが、

問題はこのレジスタ上に配置される変数がグローバル変数扱いだったことである。

グローバル変数といっても当該Cファイルを超えて、extern宣言でアクセスできるわけではないはずだが。


もう1つの問題が使用していたレジスタがスクラッチレジスタではなかったことである。

各アーキテクチャではABI(Application Binary Interface)の取り決めによりレジスタの使い方が決まっている。

32bit版のARMの場合、r0~r3は引数・返り値の受け渡しに使い、r14(lr)は復帰先のアドレスを格納するなど。

で、呼びされた関数で破壊してもよいスクラッチレジスタの規定があり、

r0~r3, r12の5つのレジスタは各関数で退避せず破壊してもよいことになっている。

これ以外のr4~r11, r13(sp), r14(lr)は使用する場合は各関数でスタックなどに退避する必要がある。


どうしてもレジスタ上でやりたい処理をスクラッチレジスタを使ってやっていればよかったのだが、

上を見てもわかるように32bit版のARMの場合、スクラッチレジスタの大半は引数・返り値の受け渡し用でもあり、

そういうレジスタをグローバル変数に割りあてるというのは到底認められないわけである。

そこでこれ以外のレジスタを使っていたのだが、退避させる処理が抜けていたと。

unsigned int reg4; //コンパイラ独自拡張でr4に配置
void something(void){
   unsigned int reg4_keep;
   reg4_keep = reg4;
   //reg4を使った処理
   reg4 = reg4_keep }

こう書いていればよかったのだが、そうなっていなかったのである。

というわけでこういう記述に修正してとりあえず回避できた。

なんでこれで従来問題になってなかったのかが不思議だが。

なお、コンパイル結果を確認するとスクラッチレジスタに退避させているようだった。


最大の失敗はこの処理をアセンブラで書かなかったことではないかと思う。

アセンブラで書いていれば、スクラッチレジスタを使って素直に書けたはずなので。

そもそもスクラッチレジスタとそうでないレジスタについて知識がなかったのでは? というのも気になるけど。

そんな処理があることは以前から知っていた(詳しくコードは見てなかったが)

ただ、ローカル変数をレジスタに割りあてる機能だと勘違いしてて退避処理も入れてくれると思っていたが、

そうではなく自分で退避させる必要があったというのも勘違いなのかもしれないが。


冒頭に書いたスタックの使用方法に依存する処理も、

スタックを使わないようにアセンブラで工夫して書くことはできるわけで、

そうしておけばコンパイル結果に依存しないコードになってたのになと。

もちろんアセンブラで書くことでコーディングのミスを起こしやすいとか、

長期的に見れば移植性の問題などあるにはあるけど、

結局コンパイラのバージョン違いで移植性の問題が起きてるじゃないかと。

最近別の仕事でアセンブラでコーディングせざるを得ないところをいろいろやって、

もうそれアセンブラで書けばと言ってしまいがちなのはある。

難しいことをアセンブラで書いちゃダメですけどね。

いにしえの写真付き切手

先日、知人に封書を送ったら「この切手変わってるね」と言われた。

その昔、祖父が作った「写真付き切手」である。

祖父が亡くなった後、あれこれと持っていた切手を両親が持ち帰ってきて、

その一部をもらったもので、大半は記念切手だが、なんと自作の切手もあったのである。


記念切手としていろいろな柄の切手が発売されることはあるが、

個人・企業がオリジナルの柄の切手を作るというのは制度的に難しいところがある。

一方でオリジナルの切手を作りたいというニーズは存在し、

いろいろ考えた日本郵政公社(当時)は2003年に「写真付き切手」のサービスを始めた。

プリクラ感覚でオリジナル切手シートを印刷 (Internet Watch)

あらかじめ決められた柄の切手の下に提出した写真が印刷されていると。

シール切手になっていて、切手と写真が一緒に貼れるようになっている。

(切手と写真の間にはミシン目が入っているが、切り離す目的ではない)


ただ、いかにも切手と写真という感は強く、2006年に「フレーム切手」のサービスが開始、

額縁状の切手の中に写真などが入っているという形になっている。

切手と写真の間にはミシン目が入っているが、切り離しを目的としたものではない。

これにより一見するとオリジナルの柄の切手を作れているように見える。

実際にはフレーム部分(柄は既製)が切手であって、その内側にある写真は制度上の切手ではないが。

なお、フレーム切手には額縁状のものだけでなく、写真の下に帯状に付くものも存在する。

従来の写真付き切手は切手が上、写真が下だったのが入れ替わったものとも言える。

ただ、切手部分のサイズが大幅に縮小され、写真がドンと目立つ形にはなっている。


写真付き切手の頃からそうなのだが、日本郵便自身が作ったフレーム切手もある。

例えば、オリンピックのメダリストが刷り込まれたフレーム切手がそうで、メダル獲得の数日後に早々発売されている。

記念切手の制作には時間がかかるが、フレーム切手ならすぐに作れるわけである。

他にもいろいろなコンテンツのフレーム切手が発売されており、

以前にコミックマーケットに日本郵便が出展していた話を紹介している。

ファンレターから手紙文化を根付かせる


ところで写真付き切手にしても、フレーム切手にしてもそうなのだが、

実用すると消印が写真部分にかかることがある。

昔の写真付き切手はそれを見越したが切手部分がかなり縦長で、

普通に消印が押されれば写真にはかからないようにしていたんだと思う。

ところでこのフレーム切手は額面80円なのだが、現在の郵便料金には30円足りない。

以前、30円切手(キタキツネ)を入手していたので、これを上に貼って、縦に2枚の切手を並ぶようにした。

こうなると機械で消印が押せなかったか、手押しの消印が押されていた。

「東京北部」の手押しの消印とかなかなか狙って押せるものではないが。

2枚の切手の間を狙って1個押されていて、これで両方潰れているのだが、

勢い余ったか、切手と勘違いしたか、写真のど真ん中に消印がもう1つ押されていた。

あーあ、という感じである。


写真付き切手はできるだけ消印がかからないようにという配慮もあったが、

現在のフレーム切手こそ消印がかからないのは難しいのではないかと思う。

郵便局の窓口で特に指示すれば写真にかからないように押してくれるだろうけど。

写真付き切手・フレーム切手の切手と写真の境目にミシン目があると書いたのはそのためで、

消印が切手部分のどこかにかかっていればよいので、そこを区別するための境界線である。


この写真付き切手の使い道というのはわりと困るもので、

せっかく高いお金出して作ったオリジナルの切手なのだから、

単に額面があればいいような用途で使うにはもったいなくて、

なにか祖父に縁がある人への手紙で使えればと思っていた。

その中ではわりとふさわしい人に送ったつもりだったが「何これ?」みたいに言われるとはまさか。

現在使おうとするとどうしても不足額があるのが煩わしいが、ふさわしい用途では消化していきたい。

対向ループ型とは

Cities:Skylines2で渋滞と闘っているわけだが、

やはり織り込み区間、高速道路のインターチェンジが連続するところがきつい。

集散路を付けて2つのインターチェンジを一体化するとだいぶ改善するので、

やはりこういうのは最初から考えて作らないとダメだったなと。


で、そうやって一体化していくと、結局これって4方向接続のインターチェンジなんだなと気づく。

3方向接続ならばトランペット型は交差1箇所で簡単に作れるので多用していて、

その中にはかなり近接して2つ並ぶものも存在した。

最初から4方向接続のインターチェンジにしておけばよかったのだが、

当初はそこまでやるのは難易度が高いと考えていたのである。


日本で4方向接続のインターチェンジ(ジャンクション)と言えば、

やはりタービン型が典型例で、コンパクトで見た目もきれいだが、

ランプ同士の交差を考えなければならないので作るのはけっこう大変。

作りやすいのはクローバー型だが、面積を食う上に織り込み交通の問題がある。

当初はとにかく右折をさせないためにクローバー型のような構造を使って、

ある程度は効果があったが、結局は織り込みに苦しむはめに。


そんなので作りやすくて織り込み区間が生じない構造があるか、

と調べていたら対向ループ型というのが見つかった。

ランプ同士の交差は考えなくてよいので、上と下の2階層あれば作れる。

典型例としては東北自動車道・東京外環道の川口JCTがあるそう。

川口JCTの標識マップ (ドラぷら)

北西と南東に270度向きを変えるループが存在する。これが対角にあるから対向ループ型という。


対向ループ型の構造をよくよく解きほぐすと、トランペット型を2つくっつけたものであることがわかる。

川口JCTの場合、東北道の向きには6本の道がとおっている。

西から順番に南→東, 東→北, 北行本線, 南行本線, 東→南, 北→西 と並んでいる。

東→北と北→西 あるいは 南→東と東→南 だけに着目してみると、

まさにトランペット型と同じ形をしてるんですよね。

北側に接続するトランペット型と、南側に接続するトランペット型を、

東北道本線を挟んで突き合わせると、確かにこういう形になる。


だからといって作りやすいわけでもないけど。

3層になってもよいならタービン型の方が案外つくりやすいのかもしれない。

トランペット型に比べると、当然、本線とランプの交差箇所が多くなる。

トランペット型は1箇所だが、対向ループ型は3箇所ある。

これが制約として重くのしかかるところである。


用地的にもなかなか思ったように取れないことはあるかもしれない。

近畿自動車道と阪神高速東大阪線の東大阪JCTはほぼ対向ループ型なのだが、

大阪都心→松原の向きについては本線を乗り越えて直結するランプがある。

これにより北東角のスペースを節約しているとみられる。

ちょうど東大阪市役所がある側ですね。市街地にあるので省スペースであることは重要である。

スペースの都合で、半分対向ループ型、半分タービン型みたいなのができたところもある。

2層では済まずに3層(高架・地平・地下)になってしまうが、なんとか頭で考えられる範囲に収まった。

結局はスペースの問題ですか。十字路に比べるとそりゃスペース食うもんな。

行動支付ってなんだ?

昨日、上野公園から秋葉原界隈まで歩いて来て、

ソフマップに行くと中国語だらけのポスターが貼られていた。

表題に「台湾行動支付優恵活動一覧表」とあった。


なんのこっちゃという感じなのだが小さく日本語で「コード決済キャンペーン一覧」と書かれている。

どうも台湾のコード決済サービスの名前がいろいろ並んでいて、

それぞれこういうキャンペーンがありますよと書いてあるわけだ。

で、その下にはPayPayのマークも書かれている。

PayPayのプラットフォームに乗り入れる形で利用しているということらしい。

日本語で「日本のPayPayはキャンペーン対象外となります」と書いてあるとおり、

あくまでも台湾の決済サービスのキャンペーンである。


「優恵活動」は割引キャンペーンという意味で、これもよいと思う。

「支付」は支払ということで決済サービスを表す言葉によく付いている。

Alipayも中国語表記だと「支付宝」ですよね。

気になるのは「行動支付」という組み合わせで何でこれがコード決済なのかという話である。

翻訳にかけてみるとこれで「モバイル決済」という訳が出てきた。


うーんと考えてしまったが、おそらく行動=mobileなのだろう。

いろいろ調べてみると移動支付という表記もあり、同じような意味なのだろう。

mobile=移動というのは日本語でも理解しやすいが、行動とも書けるのだろう。

なるほどねーという感じである。

日本で言えばコード決済とかスマホ決済という言い方になるので、

着眼点からしてだいぶ違うなとは思った。


それにしてもPayPayの提携先ってこんなに多いんだなと驚いた。

外国人旅行者が当地のコード決済サービスを利用するのは容易ではないが、

こうしてプラットフォーム間の乗り入れが行われていれば利用できると。

日本の提携先をどうするかと考えればPayPayが一番よい。

クレジットカードの使えない店にも多く導入されているからである。

ソフマップは別にクレジットカードでも構わないわけだけどね。

昔からPayPayとともにAlipayを導入する話は合ったけど、それだけでもないんだなと。

博物館に寄付する

今日は東京に行く用事があったので、東京国立博物館へ。

入口で見せるのは「奈良国立博物館賛助会員会員証」……

なんだそれと思ったかも知れないが、昨年末に奈良博に寄付をしたのである。


どこの博物館でも寄付は受け付けているだろうけど、

奈良国立博物館では個人は年5万円払うと賛助会員になることができる。

国立博物館では共同でWebから寄付できるポータルサイトがあって、

これを使うとクレジットカード決済で寄付できる。

書類をFAXで送ったり、銀行振り込みしたりする必要はない。便利ですね。


この寄付というのは所得税の寄付金控除の対象であり、

また(独)国立文化財機構は東京都の指定団体のため住民税の寄付金控除の対象となる。

(都道府県の条例指定団体は市町村の条例指定団体であることも多いが、市町村によるので要確認)

昔から博物館に寄付できることは知っていたのだが、

昨年に寄付した大きなきっかけは11月~12月ぐらいに所得税が思いのほか高いことに気づいたのである。

所得税の寄付金控除は所得控除であり、所得税率により受けられる恩恵が異なる。

そういうことで同じ寄付金額でも所得税の高い人と低い人では恩恵が異なると。

住民税の方は10%の税額控除、こっちは税率一定というのもあるが。

住民税の寄付金控除は市町村・都道府県への寄付金(ふるさと納税)がよく知られるが、

寄付額×10%の基本分と、基本分と所得税の寄付金控除でカバーできない部分を控除する特例分があり、

一般にはこの特例分の上限(住民税所得割の20%)がふるさと納税の上限と言われているが、

実はそれを超えても一般の寄付金控除の対象になるので税控除が0になるわけではない。

条例指定団体への寄付はそれと同じことである。


東京都の条例指定団体に(独)国立文化財機構があるというのは、

東京都に本部がある独立行政法人ということで指定されているとみられるが、

同団体への寄付であれば目的は問わないので、奈良博への寄付でも問題ない。

だいたいは都道府県内で活動する団体が都道府県の条例指定団体になっていて、

国立文化財機構だと東京都・奈良県・京都府がこの趣旨で対象になる。

(福岡県は県内に本部のある団体に限るので、対象ではない?)

余談ですが、就職以来、活動資金を寄付している日本赤十字社だが、

東京都の条例指定団体なのでどんな寄付金でも控除対象になるのだが、

条例指定団体でない場合、住民税の控除対象になる寄付金はかなり限定されている。

何も考えずに活動資金を寄付して住民税・所得税両方の控除があるのは幸運なことである。


話は戻って、奈良博に寄付したきっかけは1つではないのだが、

5万円で受けられる恩恵として東博よりよかったのは大きな理由である。

いずれの国立博物館に寄付しても他館での恩恵は一定存在する。

奈良博については5万円の寄付で、奈良博では平常展・特別展問わず「随時ご観覧」できるとある。

随時ってのがすごい書き方ですね。理論上は正倉院展を14回見てもよい。

他の国立博物館では平常展はいつでも、特別展は各展1回ずつ観覧できる。

上記はいずれも同伴者1名が伴ってもよい。

一方の東博だが、5万円のシルバー会員、20万円のゴールド会員……とあるが、

シルバー会員は全国立博物館の平常展はいつでも観覧できるのだが、

特別展は東博を含めて会員証提示での観覧対象にはなっていない。

東博での特別展の開会式・内覧会の招待という特典があるので、

そのときあわせて行けば結果的に特別展を無料観覧できるのだが、そう都合が合うかという話である。

ゴールド会員であれば、全館で特別展を各展1回ずつ観覧できるが、さすがに高い。


そんなわけで奈良博への寄付というのは5万円というそこそこ手が届く額で、

なおかつ東博含めて他館での恩恵も十分に大きいことがメリットだった。

これまで「奈良博メンバーシップカード」を持っていたのも、

奈良博で特別展2回見て、他館でも平常展は観覧できるなら十分お得で、

対照的に東博の会員制度は高い割に恩恵が少ないとしていたためで、

コストパフォーマンスを言えば奈良博というのは前もそうだったのである。

寄付にコストパフォーマンスを求めるのはおかしいじゃないかという話はあるかもしれないけど。


で、寄付したのは年末最終週で、寄付翌日に電話が来て、

なにかと思ったら書類送付は年明けでよいかという確認だった。

年明けで問題ないと連絡すると書類が届いたのは先日木曜日だった。

中には受領証、会員証、現在やっているおん祭の特集展示の図録などが入っていた。

特集展示の図録も送ってくれるんですね。

受領証とともに東京都の条例指定団体ですよという案内まで入れてくれていた。知ってたけどな。

会員証はプラスチック製で氏名などは印刷されていた。わりとしっかりしている。

有効期限は月単位で切り上げて来年1月末まで、ラッキーという感じ。


で、これを見せて東博を見ていたわけである。

表慶館でやっているHello Kitty展が大盛況だったが、今日は平常展だけで。

本館は12月は工事で閉鎖されている展示室も多かったのだが、

年明けは彫刻の展示室が1つ閉鎖されているのみ。

この時期の東博と言えば「博物館に初もうで」ですよね。

へび年にちなんだ展示ということで、東博で蛇と言えばこれと思ったのか、最初にあったのは自在の蛇の複製品である。

自在というのは自在に動かせる置物だが、だからといってガチャガチャ動かすわけにはいかない。

ところが、この複製品を作って、何らかの方法(磁力?)で動かしていたのである。

金属3Dプリンターでの複製品らしく、こんなの作れるのかと驚くばかり。

とはいえ、蛇はあんまりなネタで、東洋館のコレクションも持って来たり、

例年の特集展示とはちょっと違った感じだった。


寄付にコストパフォーマンスを求めるかという話を書いたが、

奈良国立博物館と国立国際美術館(大阪・中之島)にキャンパスメンバーで何度か観覧したことが、

現在各地で博物館にいって見聞を深めるきっかけになっていることは間違いない。

そのルーツの1つである奈良博に寄付するのは名誉あることだと考えている。

彫刻(仏像)の展示はハイライトではあるけれど、それだけではない博物館で、

展示スペースの制約もあるけど、他のジャンルのコレクションも展示できるとよくて、

そういう活動充実に少しでも役に立てばなという思いは確かにある。

せっかくの賛助会員ですので、この1年は奈良博にも積極的に足を運びたいなと思う。

その先続けるかはわかりませんけどね。税金次第という面はある。

Cities:Skylines2と郵便と貨物駅

Cities:Skylines 2で遊んでいて、郵便サービスが滞る事象が起きた。

どうもこのゲームの郵便はいろいろバグが多いらしく、

特に貨物駅・貨物港との兼ね合いで問題が起きやすいようだ。


貨物駅・貨物港に郵便が運び込まれていて何ごとと思ったのだけど、

このゲームでは郵便というのはシステム上、3種類の物資として扱われる。

未分類郵便・市内郵便・市外郵便の3つである。

郵便局は未分類郵便を集め、市内郵便を配達するというフローになる。

未分類郵便のフローは2つ存在して、1つはそのまま市外に搬出されるもの。

ただ、そのまま市外に搬出すると郵便局~市外の輸送が細々発生売る。

それは効率が悪いよねというので、郵便仕分け施設というのを作ることができ、

郵便仕分け施設は未分類郵便を市外郵便と市内郵便に作り替える。

これにより未分類郵便は仕分け施設まで運ぶだけでよく、

市外への搬出は市外郵便のみでよく、郵便仕分け施設からの輸送に集約できる。


という話なのだが、これと貨物駅・貨物港が加わると複雑である。

貨物駅・貨物港というのは各種の物資をストックし、

不足分を外部・他駅・他港から輸送、余剰分を外部・他駅・他港へ輸送する機能を持っている。

通常は物資を生産すると、物資を市内の需要家に運ぶか、市外に運ぶか自動的に選ばれるが、

駅・港がある場合、生産した物資はとりあえず駅・港に送ってストックすればよい。

その物資は他の駅・港や外部に輸送されるとは限らず、市内の需要家に配達されることもある。

貨物駅を置いて周辺を整備しているとき、まだ路線設定していないどころか、

電気・上下水道の接続もされていない貨物駅を出入りする車がいたのはそのためである。

生産者はどこに運ぶか考えずに駅に運んできているのである。


郵便で使われる3種類の物資も駅・港を介して運ぶことができる。

仕分け施設がある場合、郵便局→仕分け施設で未分類郵便を輸送し、

仕分け施設で生じた市外郵便を駅・港に輸送する。

市外郵便は市内の需要家がいないので、余剰となるので適宜市外に搬出される。

これとは別に市内郵便が外部から駅・港に輸送され、これは郵便局に配送されているはず。


でも、駅・港がある場合はもっとシンプルでよいのである。

郵便局から未分類郵便を駅・港に運んで、余剰の未分類郵便を搬出、

駅・港に外部から届く市内郵便がストックされ、これが郵便局に輸送される。

駅・港がない場合は、郵便局が個別に市外との輸送を行う必要があるので、

仕分け施設を使うことで効率化されるという理屈なのだけど、

駅・港があれば駅・港と郵便局の間の輸送がメインになるので、こっちの方が効率的である。


というわけで仕分け施設を壊して、あとバグが生じたときには駅・港を全部壊して再建するとよいと見たので、

駅・港も壊して再建して、少しずつ改善してきた。

オフィス・商店の多いエリアは郵便局の車両が足りていないということで、

追加車庫も作って郵便の停滞については解消していった。

貨物駅・貨物港を見ると未分類郵便がどんどこ貯まっていくわけだが、

時々減っているので、船や列車で外部に搬出されているのだと。

逆に市内郵便も届くが、これは郵便局に輸送されているとみられる。


さて、市の人口は22万人に達し、マイルストーンの最後「メガロポリス」に到達した。

これで一応はゴールということになるが、まだまだでは?

貨物駅・貨物港の設置に伴い、トラック輸送は駅・港との往来がメインになり、

このために郊外に建設予定で切れ端を置いていた高速道路同士を接続し、

できるだけ駅・港との往来は郊外を通ってできるようにしていった。

これにより市域も広がった感があり、宅地開発も進めていきたいが。

とはいえ、計算能力の問題もあるんですよね。

画質を犠牲にしながらなんとか持たせている感じはあるが、もう厳しいんかね。

渋滞対策がずっと課題なのはそうなんですけどね。

ただ、郊外の高速道路をつないだり、織り込み区間の対策をすればまだいけるか。

シリアル通信からプログラムをロードしたい

デバッグ用にシリアル通信でプログラムをロードして実行できるようにしたいという話があった。

以前のシステムではそのための特別なプログラムをマイコンに書き込んで、

そういうことをできるようにしていたのだが、今回はそれを通常のプログラムに入れた方がいいねと。


話によればU-Bootのようなブートローダーの機能を参考に作ったのだという。

今回のシステムでも当初はU-Bootが必要なのでは?

という話があったのだが、結局は不要となった経緯がある。

U-Bootにはシリアル通信でプログラムをロードするコマンドがあって、

当初の実験時に loadyコマンドでYMODEMで転送した覚えがあるような。

確かそのときはメモリ上に転送した後、mmc writeコマンドでSDカード(MMC)に書き込んだっただったか。

プログラムを保存する機能は持っていないけど、転送機能はほぼそれで、

あとはU-Bootで言うところの bootmコマンド、単純に指定アドレスにジャンプするだけだけど、

それを実装しておけばテスト用のプログラムをシリアル通信で転送して実行できるわけ。


元々マイコンに焼いていたコードを流用して作り始めたのだが、

かなり改変が大きく、跡形もないぐらいに変わってしまったかも。

アルゴリズム的にはあまり変わってないんですけどね。

内部的にはprintfもどきの関数を自作して持っていたりする。

他のデバッグでも表示にはこれを使うかと付替をしたりなんとか。


あとはそこにロードするプログラムのひな形も作ってみて、

実運用上、こういう使い方ができるといいなというのを多少加えた。

できたものを動かしてみると、確かにけっこう便利かもしれない。

最初はデバッグ用のプログラムをROMに書いて動かせばよいと思ってたが、

いろいろ特殊な事情もあるので、単純にROMに書いても動かない問題があった。

なのでデバッグ機能を作り込んだ方がよいねとなったのだけど、

それ以外のメリットとしてはROM書換用にICEなど用意する必要が無いこと。

ロードするプログラムを変えればいろいろな評価に活用できること。

(現在もそういう使い方をしているらしい)


従来よりこの機能の使い道も増えたので、新しい使い方もあるかもねとは言っているが果たしてどうか。

そこはわからんけど当初の機能の代替としては十分でしょう。

大豆のお肉を食べる

買い物に行くと「大豆のお肉」が投げ売りされていた。

値引きシールが貼られてるのはよく見るけど、ここまでの投げ売りはなかなか。

炒め料理用とあるので、これで炒め物でも作るかと購入。


見た目は炒めた後の豚肉みたいな感じだけど……

どんな味なんだろとつまみ食いしてみると……豆腐だな。

炒めて味付けするとそれなりになるのかもしれないとやってみたけど、

肉というのは軟らかすぎるのか……豆腐を炒めたような感じに。

肉の旨味とかそういうのがないのであんまりな炒め物だった。


「大豆のお肉」って一体何なんでしょうね。

豆腐なのかというとそういうわけではないようだ。

「大豆のお肉」は大豆の油分を搾油、加熱・加圧・乾燥させてできた、マルコメの大豆ミート製品。

(おいしい大豆のお肉の使い方 (マルコメ))

大豆から大豆油を取った残りということだそう。

豆乳は大豆の油分とたんぱく質のほとんどで、これをにがりで固めたもの。

大豆のお肉 は繊維質とたんぱく質が残ったものということで位置づけが異なる。

ただ、風味というのは似るんでしょうね。


どうしても肉は食わないという人は日本にはそうそういませんから、

大豆ミートの需要はそんなに多くないというのが実情か。

単純においしければ売れるかもしれないけど、

今回食べた感じだと、うーんとなってしまう。調理法も悪かったのかもしれないけど。

確かに単純に肉の代わりに使えばよいというわけではないのはそうだろう。


商売としてどうなんだろうなというのは気になりますが。

店で売れているのもそうそう見ませんからね。

ホーム柵対応で車番を上に書くか

最近気づいたことがあって、それは駅の可動式ホーム柵対応にあわせて、

車両番号を車体上部に書き直すのは必ずしも一般的ではないということ。


これ、地域によってピンと来る人とそうでない人がいるかも。

大阪市営地下鉄(現OsakaMetro)今里筋線は開通時からホーム柵が導入され、

それに伴って導入された新車は車両番号が窓上に書かれていた。

従来は窓の下に番号を書いていたのでちょっと異様な見た目だけど、

これは柵で番号が隠れてしまうのを防ぐという明確な理由があった。

以後、大阪市→OsakaMetroでは各線に可動式ホーム柵の導入を進めていく。

御堂筋線天王寺駅(2015年)など車両側の改造なしで導入した駅もあったが、

停止位置を手で細かく合わせるのを何駅もやるのはとても大変ということか、

全駅導入にあたっては停止位置を制御できるように車両を改造している。

このとき改造された車両も車両番号を窓上に移している。


ただ、ここまでくっきりしてるのはOsakaMetroぐらいかもしれない。

東京メトロでは副都心線開業時の新車からは窓の横に車番を書くようにしている。

それ以前の車両にはわりと近年になって窓横に車番が貼り足されているそう。

ところで東京メトロでは南北線でフルスクリーンタイプのホームドアを導入している。

こうなるとどこに書いても見えないので同じという考えだったと思うのだが、

実は直通先の埼玉高速鉄道では可動式ホーム柵が導入されているので、

ここでは意味があるということで近年は窓横に車番が貼り足されているそう。

ただ、その埼玉高速鉄道の車両は窓の下に車番が書いてあるんですよね。

開通当時からホーム柵があるが、車番を上に書くという発想がなかったか。


新車からというのは1つの考えとしてあって、

京都市も烏丸線の一部駅でホーム柵を導入したが、それ以降に導入された新車は窓上に番号を書いている。

烏丸線は車両改造なしで導入したので付替のタイミングがないのはあるけど。

直近で予定がなくてもとりあえず上に書いておけばよいという考えはあり、

ドア位置が揃う見込みが全く立たない近鉄も新車の8A系は連結部の上に番号を書いてあるよう。

(あべの橋駅と阪神三宮駅ではロープ式のホーム柵があるが、車番が隠れることはない)

一方で近鉄けいはんな線の車両はOsakaMetro中央線のホーム柵導入に合わせて改造されているが、

この改造を経ても車番は窓下にしか書かれていないそう。そこはやらんのかい。


対照的にJR各社はホーム柵導入路線の新車でも窓下に番号を書いている。

現在の山手線の車両はホーム柵導入後に入った車両だし、

大阪環状線の323系はホーム柵導入に向けてドア位置を揃えることを目的とした新車である。

それならホーム柵に隠れない場所に番号を書いておけばよさそうだが、そうはしていない。

特に不要という判断なのだろうか。

大手の私鉄では京阪と名鉄が直近の新車でも車番を窓下に書いているよう。

(南海は子会社で今年4月合併予定の泉北線用の新車で窓上に書いたものがある)

名鉄はともかく、京阪は京橋駅などにホーム柵を付けているのだが、それでも上には書いてないみたいね。


OsakaMetroの感覚では窓上に車番が書いてあるのがホーム柵対応の印とおもってたが、

世間的には必ずしもそうとは言えないということである。

もちろん車両側の改造なしにホーム柵を導入している駅もあるので、

こうすると車番を上に動かしているとは限らないのはあるでしょうけど、

JRの例を見てもわかるようにそんなの関係ないという会社もある。

そういうもんらしい。