e-eovでスクリプトエラーが発生する場合

e-eovでスクリプトエラーが発生したとき、対処方法はヘルプサイトに記載されていましたが分かりにくかったので実手順の覚書です。

エラー表示は古いブラウザでよくみるスクリブトエラーダイアログですが、発生後の状態がショッキングな感じです。

アプリのキャッシュをクリアするんだそうです。加えて再インストールが必要とのことですが、面倒なのでまずコレだけで試してみます。

一旦アンインストールします。

再ダウンロードしてインストールします。特にバージョンアップ等ではないです。

無事ふっきしました。

んーんどうしてでしょう? e-eovインストールした状態で、Win11にアップデートしたのが原因かもしれません。

Hyper-Vで仮想OSにリモートログインする設定

弊方ではOSクリーン状態、古いOSでののアプリ動作確認に、Hyper-Vで仮想OSで実施することが多いです。機能は VmWare には敵いませんが、Windows Pro版なら無償で使えます。特にOSのロールバックができるので、OSクリーン状態でのアプリ動作確認に重宝します。仮想OS側はMSDNに加入していれば XP まで使えます。しかし Hyper-V の仮想OSウインドウは使いにくいので、リモートディスクトップで仮想OSを使います。その設定の覚え書きです。設定方法の一つであって他の方法があるやもしれません。

ホストOS側でリアルPCと仮想OSを一つのLANに入れるたのネットワークアダプタを、 Hyper-V の管理機能から以下のように作ます。この手順は、リアルネットワークアダプタを変更した場合も必要です。

ホストOS側のネットワーク接続にアダプタが以下の様に追加されます。

次に仮想OS側で、Hyper-V の管理機能の仮想OSの設定にて、ネットワークアダプタの仮想スイッチを作成したアダプタに切替えます。

仮想OSを起動して、下記のようにTCP/IPの設定をします。古いOSはネットアクセスしないようにしておきます。

PingがホストOSに飛ぶか仮想OS側で確認します。

PingがホストOSから飛ぶかホストOS側で確認します。

リモートディスクトップでのファイルのコピペは使えますが、仮想OSとファイル共有もできた方がよいので確認します。

仮想OS側:

ホストOS側:

あとは普通にリモートログインします。

Hyper-V覚書き

  • ディスク容量はかなり食うので専用のストレージを追加した方がいい。
  • OS起動中に、ディスクが足りなくなると壊れる。ただ壊れたらロールバックすれば治る。
  • MACアドレスを任意に固定できる。
  • 仮想OSでUSBデバイスは使えない。

公正取引委員会の下請け法調査アンケートに回答してみる

以前公正取引委員会の下請け法のアンケートに回答しようと試みましたが期限切れでできませんでした。今回ようやく回答できたのでその覚え書きです。全てを熟読し、真剣に考え取引内容を吟味し回答すると、1社さんあたり1時間はかかりそうです。

回答期限を一日過ぎていましたが回答できました。今回は金曜が期限でしたが、次週の祭日月曜はOKでしたので、次週の稼働日朝までは大丈夫なのかもしれません。期限は厳格ではないようなので期限切れでもログインしてみましょう。

設問はかなり具体的な内容でした。ボリューム感がわかるよう件数だけ列挙します。

カテゴリ設問数
発注書について9
支払いについて9
金額の決定ついて8
金額の調整について10
発注内容の変更について4
寄付的なことについて4
取引と関係ない物品の購入依頼について4
納入について6
返品について3
有償支給の原材料費について2
型、治具、設備について2
インボイス制度について4
その他2
68

その他以下の問いがありました。

  • 氏名と役職
  • 事業内容
  • 年間取引額
  • 取引年数
  • フリーランス法/事業者間取引適正化法の調査への、回答の利用可否。
  • 実際の取引内容について、文章で記載も可能。

アンケート内に、売上振込手数料の差引 について問いが見受けられました。あまり好ましくないととらえられているようです。過去職場では海外ベンダーの現地法人では断れらていました。国内で商習慣なのかもしれませんね。担当としてはベンダーと購買部/資材部と板挟みで嫌な思いしますし、良いことです。

無くなるような記載が見られました。こちらも過去職場では海外ベンダーの現地法人では断れらていました。確かに受け取る側も面倒ですし、他の支払いに回す要素がないと、100%額を受取るには満期待ちしないといけません。また購買部/資材部がすべて交渉してくれる会社ならよいのですがそうでない場合、担当としてはベンダーと購買部と板挟みで交渉事が増えてしまいます。これも開発で忙しいとき、文書の郵送の手間が増えで辛かったです。


以上ですが、色々細かくヒアリングされ、抑止力となり社会が良くなる期待感がもてます。ただその前に末端の方々にも教育が必要だとは思います。

今期は、2社さん分がアンケート依頼が来ていました。これまで毎期1社さんでした。前職場にて下請け法教育があり、資本金一億円以上の請け元さんが対象と認識していましたが、今回のアンケート内容を見ると1000万以上も対象になるみたいです。しかし全ての会社さんのが来るわけでもないようです。どういう選定基準なのか気になります。

Windows用シリアル通信コントロール新旧の留意点

電子コントローラとシリアル通信で通信するWindowsアプリを作成する場合、弊方では動作が軽く、細かくコントロールしたいため大体Win32APIを直接使います。

Windows用製シリアル通信コントロールは、自主トライや既存コードが使っていた場合に使用しています。その際に気づいた事項の覚書です。


.NET の標準コントロール SerialPort は以下の特徴があるようです。

  • 当然ですがMFC や VB6 では使用できない。
  • Windowsレジストリ登録は不要。
  • 受信イベントは画面と別スレッドで動作する。
  • 特に多機能ではない。

以下留意点です。

受信イベントは別スレッドで動作するためデリゲート( Swiftのデリゲートとは異なる物です )が必要になります。 そのままだとbuildエラーか実行時にエラーが出ます。デリケートは .NET の特有のややとっつきにくい部分、理解してもたまに使う程度なのでよく忘れてしまいます。以下コード例です。

private:
delegate void formatReceiveData_Delegate(void);	    // デリゲートの型宣言
formatReceiveData_Delegate^ formatReceiveData_Obj;  // デリゲートのインスタンス宣言	
    :
    :

private: System::Void Form1_Load(
   System::Object^  sender, 
   System::EventArgs^  e
) {
    :
    :
   // UI操作を行うmethodのデリゲートを生成、生成は一度でOK
   formatReceiveData_Obj	= gcnew formatReceiveData_Delegate(this, &Form1::formatReceiveData);
    :
    :
}

private: System::Void serialPort1_DataReceived(
   System::Object^ sender, 
   System::IO::Ports::SerialDataReceivedEventArgs^ e
) {
	if ( dgrdReceive->InvokeRequired ) {		// thread排他が必要か、対象UIで判別。

		// デリゲートを排他無しで呼び出す
		this->BeginInvoke( this->formatReceiveData_Obj );
	}
	else {
		formatReceiveData();			// 受信値表示
	}

	procReceivedAfter( serialPort1 );  // 受信後処理
}

private: System::Void formatReceiveData(void) {
    :
    :
    UI処理 ....
    :
    :

ASCIIコード通信など不定長フレーム通信にて、msecオーダーで受信イベントが発生すると、忙しすぎて画面操作イベントが受付けられずフリーズ状態に至ってしまいます。 .NETでもこんなもんなんですね。PC は core i7 です。特定のシステムであれば、ReceivedBytesThresholdプロパティで調整も可能か漏れません。汎用ツールを作成する場合は苦しいです。

対策するには、受信専用Thread立てます。以下コード例です。

private:
		Thread^	recvTheard = nullptr;
		static	System::IO::Ports::SerialPort^  _serialPort1;

private: System::Void btnOpen_Click(
   System::Object^ sender, 
   System::EventArgs^ e
) {
  	_serialPort1	= serialPort1;  // Thread内で参照用にstaticにインスタンス退避
		serialPort1->Open();
		recvTheard = gcnew Thread( gcnew ThreadStart( this->RecvThreadMain ) );
		recvTheard->Start( );
}

public: static System::Void RecvThreadMain( 
	void
) {
	char rcvBytes[8192];

	while( 1 ) {
			Byte	rcvByte;
			Int32	rcvLen;
			try {
			  // 不定長の場合はその時々で受信した分を読む
 				 rcvByte		= _serialPort1->ReadByte();
				 _serialPort1->Read( rcvBytes, rcvByte );  
			}
			catch (System::TimeoutException^ exp) {
				// タイムアウトはスルー
			}
	}

受信の都度、UIに表示するとマトモに見えないので、表示内容は変数にキャッシュしておいて、Timerコントロールで0.5秒周期程度で、キャッシュした表示内容をまとめて反映させるようにします。これで下図くらい改善されます。

秒オーダーの応答性でよい場合以外は、受信インベントは使わない方が無難なようです。


2000年以前から存在しているVB6標準のコントロール、まだ使用されている場合かあるようです。弊方では最近まで使ったことはありませんでした。以下の特徴があるようです。

  • たぶん MFC か VB6 でないと使用できない。
  • 実行するPCにて、Windowsレジストリ登録が必要。
  • 通信用スレッドは立てないので、通信周期によっては画面処理の応答性が落ちる。
  • 使い方がシンプル。
  • ナゾが多い。

以下留意点です。

普通に受信させると下図のようになってしまいます。

これによる具体的弊害は、

  • 60byte超えるパケットを読む場合、ロジックでバッファリングする必要がある。
  • シリアルポートOPEN直後、60byte受信バッファに溜まるのでアプリが応答しなくなってしまう。

その半面メリットも考えられます。

  • 受信イベントが多発しないため、.NETの様に大量受信時にフリーズ状態になりにくい。


ActiveCommはかつて販売されていたサードパーティのコントロールです。これもかなり古いものです。以下の特徴があるようです。

  • たぶんMFC か VB6 でないと使用できない。
  • 実行するPCにて、Windowsレジストリ登録が必要。
  • 通信用スレッドは立てないので、通信周期によっては画面処理の応答性が落ちる。
  • MS Comm よりは普通に使える。

昔々使った印象ですと、購入して使うほどメリットはないと感じていましたが、MS Comm の奇妙さを目のあたりにすると有用性はあったのかと思います。


java には、jSerialComm というものがあるようですね。今度また。


あまり知られた情報ではないかもしれませんが、リアルRS232C、USBシリアル変換器の種類によって、単位時間あたりの ReadFile API で読めるサイズが変わります。1フレームを受信長で十分なタイムアウト時間で受信ストリームバッファを活用してRead待ちしている場合は関係ないですが、1~数byteづづ受信都度読みをしている場合はこの影響をうけます。アプリ側に作りによっては、RS232Cの種類によって動作がかわってしまいます。この影響か、上記コントロールにどこまで影響を与えているかは分っていません。このことが「USBシリアル変換器の相性問題」の要因かもしれません。


以上、Windows用シリアル通信コントロール新旧の留意点です。何にしても用途に応じてWin32APIを直接使い 内部Thread動作する.dllコントロールを作成するのがベストです。組込み機器との通信となると、どうしても応答性が求められてしまいます。 この主のWindowsアプリケーションで、不安定、遅い、応答性悪いが、対策時間ない/対策する自信がないなどお困りの場合は、こちらまでご相談してみてださい。アプリは本体は作るが、.dll 側だけ頼みたい場合でも製作したします。

SGP311:Xperia Tablet Z Wi-Fi 16GB版をAndroid 13相当にSetupする

以前 Xperia Tablet Z Wi-Fi 32bit版:SGP312 を Android13 相当にsetupしました。本モデルには、16GB版の SGP311 があります。今回はこちらの方をセットアップしました。32GB版SGP312との違いを報告します。


海外ではこちらの方がポピュラーに模様です。日本では J:COM モデルが存在するようです。今回実施したのは、そのモデルでした。FlashTool のログでは以下の様に日本向けWifi 16GBモデルとなっているようです。


受領した J:COM モデル は Android 4.2.2 でした。

アップデートサービスが無かったのかは定かではありませんが、ROMレイアウトを純正の最終版に変更しておかないと、カスタムROMとマッチしない場合が多いため、5.1.1 にアップデートします。

XperaiのROMダウンロードソフト: XperiFirm では Tablet Z は古くて未対応のようです。Android File Host より、SGP311_10.7.A.0.228_R4E_SGP311_VMo+EU1_1272-7819.ftf をダウンロードし、FlashTool で書込みます。特に問題なくアップデートできました。


J:COMモデルということで制限がかかっていないか気になりましたが、以下のように大丈夫でした。

これまでどおり unlock して再起動し、Unlocked: Yes を確認します。


SGP312 ではリカバリ領域への書込みができませんでした。SGP311 でも同様でした。しかたなくboot領域にカスタムリカバリを書きます。SGP312 twrp-3.7.0_9-0-pollux_windy.img 同じでOK。

改めてSGP311で海外情報をしらべると 「no recovery partition on the TabZ」 という文言あり。詳細はこちら。

尚、当機種に関わらずこの状態では bootloaderが無い 非常に高リスクな状態です。bootloader無し状態でハードウェアのみで充電できるのか??? 100%充電してから実施するのが無難です。


SGP312 と同様に、lineage-20.0-20231125-UNOFFICIAL-pollux_windy.zip、MindTheGapps-13.0.0-arm-20231025_200806_Z-Tab.zip(弊方の修正版) を、TWRPでまとめてInstallします。結果としては特に問題なしです。

実は弊方、OS初回起動前にバッテリを空にしてしまい、充電してもい充電中表示も表示さなず、文鎮状態に至りました。たしか電源ボタンかUPボタンを長押しして、サイドのLEDがからに変わり復活したように記憶しています。当機種に関わらずOS の Install 後はなるべく早くOS初回起動を行った方が無難なようです。


以上、SGP311: Z Tablet Wi-Fi 16GB版を Andoroid13 相当にUpdateする手順です。しかしながら自分でやるのはメンドクサイ、忙しい、自身が無い方は、弊方でセットアップをお受けいたします。約1.5時間の個人様向け工数+事務費で税込4,000円 。Android 4.2.2 → 5.1.1のUPDATEが必要な場合は、+1,000円。 ご相談、依頼はこちらから。