データベースをPostgreSQL12.3に更新後、計量器の計測データがデータベースに取り込めていないのに気が付いた。
計量器のデータはRS232Cで送られて来て、XP+VB6で取り込んで、データベースに書き込んでいた。PostgreSQLのODBCドライバーは確か9.*を使っていたと思うのだが、12.3に対応していなかった。ODBCドライバーをpsqlodbc_12_02_0000_x86.zipに更新したのだが、今度はVB6が対応していない様子で、結局XP+VB6はあきらめることになった。

新しい環境はWindows10(64bit)なのだが、VB6(32bit)をインストールしようとすると、エラーが表示される。無視してインストールして、psqlodbc_12_02の64bit版、32bit版をインストールして動作確認したところ、うまく動作しない。VB6を使うのもあきらめた。

今度は、Windwos10+Visual Studio 2019を試してみた。Visual Basic+psqlodbc_12_02_x64がどうゆうわけか動作しない。C#でやってもダメ。Accessだと動作するのによくわからない。どうもpsqlodbcのバグではないかと思う。

ODBC接続がダメなので、Npgsqlで試してみた。Visual Basicは動作せず、C#ならOK。
どういうことなんだ!

結局、Windows10 + C# + Npgsqlで製作することになってしまった。
C#は入門書を1冊読んだことがあるが初めて使う。Npgsqlも販売管理プログラムを作り始める時、検討に使ったことがある程度。まあ、今回は計量器のデータをデータベースにinsertするだけなのでSQLも簡単。

無料のVisual Studioでシリアルポートが扱えるのはラッキーだった。これが一番心配だった。計量器のデータ取り込みだけで開発ソフトを購入するわけにもいかない。無料のVisual Studioでシリアルポートを扱えるわけだからいい時代になったもんだ。

動作環境が決まってしまえば、後は作るだけ。だが、今回もデータ取り込みのところで苦労した。VB6では取り込みはchar型で行っていたのだが、今回は最初ReadLineを使おうとしたのが良くなかった。途中で取り込みが止まってしまう。NewLineを設定してもダメで、C#のchar型で取り込むと文字化けしてしまう。結局、Byte型配列に1バイトづつ読み込んで、固定長になっているフィールドをそれぞれString型に分割してEncodingした。Basicだと型変換で苦労することはないのだがC#はこの辺りが厳密で難しい。

どうもC#のchar型は半角も1文字、全角も1文字で1バイトというわけではないようだ、これがよくわかっていなかった。
(今、考えるとVB6でどうしても文字列の幅が揃わなくて苦労したのは、 VB6のcharもバイト数に関係なく、1文字だったのだろう。空白の半角&H20も全角&H2020もどちらも1文字で取り込まれてしまい、表示時には半角スペースになってしまったのが原因だったのかも。)

データの取り込み部分ができてしまえば、後はNpgsqlでinsertするだけで、これは簡単だった。

一応、計量器のデータをデータベースに書き込むところまで出来たのだが、従来このPCを現場でシンクライアント端末を使って画面表示させていた。現場にPCを持ち込むと、冬場に壊れてしまう。実際、2台PCをダメにした。
今度はこのシンクライアント端末がWinodows10のリモートディスクトップに対応していなかった。このシンクライアント端末はMintWave製で15年は使った。デスクトップPCだと冬場に壊れてしまうのだが、このシンクライアント端末は全く故障しない。非常にタフだ。
ネットでシンクライアント端末の価格を調べると3万円くらいする。さすがに購入する気になれず、どうしたものかと思っていたら、Raspberry Pi でシンクライアントできることがわかった。

元々、計量器用のシンクライアント端末は販売管理プログラムの端末として運用するつもりだったのだが、当時は動作が低速で使い物にならなかったため遊休化していたもの。なので、全く費用をかけていない。それで15年使ったのだからお得だった。
そういう経緯なので、今回もなるべく費用を掛けたくなかった。

すったもんだした挙句に結局、下記で完成した。

サーバー: Windows10 Pro
Homeからアップグレードした。Homeはリモートデスクトップのサーバーになれない。

シンクライアント端末:
Raspberry Pi 3 Model B 1G RAM
HDMI VGA 変換アダプタ hdmi vga変換ケーブル D-SUB 15ピンHDMI オス to VGA メス 1080P プロジェクター PC HDTV 用 HDMI - VGA 変換 アダプターPC DVD HDTV用
(HDMI → D-sub )

最新版はRaspberry Pi 4なのだが、当初使おうと思っていたRPi-TC3がPi4に対応していなかったので、少し古い型を購入した。また、Pi4は冷却ファンが要るようだったので面倒だった。

シンクライアントソフト: raspbian buster + freerdp

最初、RPi-TC3で試してみたのだが、使った遊休品のmicroSDカードが不調で原因が特定できないまま、新規に購入したSDカードはraspbianで試してうまく行ったので、結局、RPi-TC3は使わなかった。調べたところRPi-TC3もWindows10のリモートディスクトップには対応しているようだったので、少し残念だった。
ただ、Raspberry Pi 3 のディスプレイ端子がHDMIでD-subの14inchディスプレイ(1024x768)を使おうとしていたので、HDMIからD-subに解像度を落とさなければならなかった。raspbianならその設定が簡単そうだった。RPi-TC3だと、シンクライアント画面では解像度を落とすことができそうなのだが、設定画面そのものを1024x768にするのがよくわからなかった。その辺りの事情もあり、raspbianにした。多分、RPi-TC3でもできるのだとは思うのだが。

raspbianはインストール時、ローケール設定はしたが、OSの更新作業はしなかった。
ダウンロードにものすごく時間がかかり、再起動時、フリーズしているのかどうか判断できなかった。
後から考えると、一晩かけて更新すべきだったかもしれない。

rdesktopはWindow10に繋がらなかった。freerdpを使った。
rdesktopでは、Kerberos認証がどうのこうの、というエラーが出た。
freerdpだと一発でつながった。

freerdpの自動起動は試してみたが、うまくいかなかった。

https://linux-memo.net/company/rpitc3_update.html
RPi-TC3が詳しく説明してある。このページがわかりやすいので、当初RPi-TC3を使おうと思った。

http://blog2.zunbe.com/?p=7722
freerdpの説明

https://qiita.com/TsutomuNakamura/items/606cae1e8c944d716a02
freerdpをフルスクリーンで

https://qiita.com/karaage0703/items/ed18f318a1775b28eab4
自動起動の説明

<かかった費用概算>
Raspberry Pi 3 Model B 6,000円
HDMI → D-sub ケーブル  800円
microSDカード      1,100円
Raspberry Pi の電源、コネクター、カバーは持ち込み
           計 7,900円

これで10年とか保てば良いのだが、環境が劣悪なのでどうなることやら、、、