重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Windows用アプリを作りたいのですが、いろいろ制約があり困っております。

実行環境はWin10/11(XPとかでも動いてくれれば最高だがとりあえず現時点でサポートのあるものは必須)で、できるだけ素のWindowsで動いてくれる必要があります。つまり、Node.js入れろとかそういうのがNG。WindowsUpdateでメンテナンスされるランタイムとかの追加まではOKです。(勤務先のPCで動かすために発生する制約。)アプリ起動はデスクトップのアイコンをダブルクリック、くらいで、まずコマンドライン画面を開いてコマンドを打つとかしなくて済む程度に簡素化できること。

やりたいことは、外部に繋いだ機器から送られてくるデータを(仮想)COMポートで読み込み、生データをテキストで保存(ログ用)、そのデータがBCDで1バイトに2桁の数値を入れ込んでるような代物なので人間がパッと見てわかるように変換し、画面に表示しテキストファイルにも生データとは別に記録。必要に応じて機器の方に「センサー2番に切り替えて」みたいなコマンドも送りたい。ChromeのJavascriptにCOMポート読み込みが実装されているとか聞きますが勝手にChromeを入れたりできないし、現状Excelマクロでやっている人もいるのですが読み込んでいる間Excelがずーっと占有される上ExcelのないPCは動かせないので困っていたり。

Windows用と言いましたが、できるだけ素のWindowsで動いてくれればexeファイルだろうとHTMLファイルから何か呼び出す形でも構いません。勤務先のPC故の制約でいろいろ追加が困難という理由で、別途開発環境を必要としない(テキストエディタ1本でなんとかなる)とありがたいです。

はたして、こんな条件を満たす方法はあるのでしょうか。

質問者からの補足コメント

  • ・現在の物理的な接続は主にUSB、論理的にはシリアルポートに見えています(仮想COMポート)。ただし現時点では物理的にもRS-232C(シリアルポート)で残っている場合があります。

    ・通信速度は4800bpsが基本で仕様上の最高は115200bps、実態としては19200bpsくらいまで。NMEA(GPS機器)と同程度です。何せ基本設計が40年以上前…。データ量もこの速度で取りこぼさない程度しかありません。(一部仕様が拡張されててMbps単位の速度が必要なデータもありますが当面は無視。)

      補足日時:2025/06/26 23:57
  • まとめてのお礼とします。

    〉ただ、もしソフト開発したとしても、勤務先の制約で「そんな訳の分からないソフトを使うのはまかりならん!!」ってなりそうですね。

     なので、できれば実体がテキストファイルであるスクリプト処理で済む方法であれば管理者もうるさく言わないだろうと。あと、私がいずれこの業務から離れた後にメンテ・改良を加える人のハードルを下げておきたいという思惑もあります。

    〉最近は歳を取って延々とコードを書くなんてできませんが ChatGPTなんか使えば できそう(なので聞いてみました 参考にどうぞ)

     イメージがしやすくて助かります。どうもPowershellに対して提示のようなことをすれば良さそうな気がしてきました。

    〉ちょっと見た限り、Chrome だけじゃないようですが… 確認したんですか?

     「MS Edgeにも実装されているようですが」であればBAだったのですが。

      補足日時:2025/06/29 00:10

A 回答 (7件)

何をしたいのか どの程度の規模なのか にも寄りますね。


私は若いころに マイコン を作っていて OSも作った(というのはウソで改作しただけですねど)ことがあります。 アセンブラでやりました。GUIは絡まないところだったので、割と簡単でした。

>外部に繋いだ機器から送られてくるデータを(仮想)COMポートで読み込み ....
ああ 割とそれに近いことでしたよ。

最近は歳を取って延々とコードを書くなんてできませんが ChatGPTなんか使えば できそう(なので聞いてみました 参考にどうぞ)

ご要望の内容は、以下のような機能を備えたシリアル通信アプリケーションの設計です:
機能要件(まとめ)
1)仮想COMポートからのデータ受信
2)受信した生データ(バイナリ)をそのままログとして保存(バイナリ or HEX)
3)BCDフォーマット(1バイトに2桁の数値)をデコードし、人間が読める形式に変換
4)変換結果を画面に表示
5)変換結果も別のテキストファイルに保存
6)必要に応じて外部機器にコマンドを送信(例:「センサー2に切り替えて」)

実現方法(Python + pyserialで実装する場合)
必要ライブラリ(事前にインストール)  bash
pip install pyserial

サンプルコードの概要  python
import serial
import time
from datetime import datetime

# COMポートとボーレートの設定
port = "COM3"
baudrate = 9600

# ログファイル
raw_log_file = "raw_log.txt"
decoded_log_file = "decoded_log.txt"

# BCDを10進数文字列に変換(1バイト→2桁)
def decode_bcd(byte_data):
return f"{(byte_data >> 4) & 0x0F}{byte_data & 0x0F}"

# データ受信ループ
def read_from_serial():
with serial.Serial(port, baudrate, timeout=1) as ser:
print(f"Listening on {port} at {baudrate} baud...")
while True:
data = ser.read(8) # 例:8バイト固定長データを受信
if not data:
continue

timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
hex_data = data.hex().upper()
decoded = ' '.join(decode_bcd(b) for b in data)

# 生ログ保存
with open(raw_log_file, "a") as f:
f.write(f"{timestamp} RAW: {hex_data}\n")

# デコードログ保存
with open(decoded_log_file, "a") as f:
f.write(f"{timestamp} DECODED: {decoded}\n")

# コンソール表示
print(f"[{timestamp}] RAW: {hex_data} | DECODED: {decoded}")

# コマンド送信関数
def send_command(command_bytes):
with serial.Serial(port, baudrate, timeout=1) as ser:
ser.write(command_bytes)
print(f"Command sent: {command_bytes.hex().upper()}")

# 例:センサー2に切り替えるコマンド送信
# send_command(b'\xA1') # 実際のコマンドは機器仕様に従う


補足:BCDとは?
・BCD(Binary-Coded Decimal)は、1バイトの上位4ビットと下位4ビットで、それぞれ1桁(0〜9)を表現します。
例:0x25 → 2と5 → "25"
GUI化(任意)
・tkinter を使えば簡易GUI(リアルタイム表示・ボタンでコマンド送信)も可能です。
・Webベースなら Flask + WebSocket でリアルタイム表示も可能です。
    • good
    • 0

>ChromeのJavascriptにCOMポート読み込みが実装されているとか聞きますが勝手にChromeを入れたりできないし、



ちょっと見た限り、Chrome だけじゃないようですが… 確認したんですか?
    • good
    • 0

仮想COMポートってのが、USB接続なのか??


汎用のWinPCの複数台に設置するのか?
それによってベストな手段は大きく変わると思いますけどね…
    • good
    • 0

>アプリ起動はデスクトップのアイコンをダブルクリック、くらいで、まずコマンドライン画面を開いてコマンドを打つとかしなくて済む程度に簡素化できること。



C言語で、コマンドラインアプリをつくって、そのショートカットをデスクトップに置けばよいのでは?

パラメタを渡したなら、パラメタの書かれたファイルをドラッグすれば、コマンドラインアプリにそのファイル名が渡されるので、それを開けば、パラメタもコマンドラインアプリからアクセスできますよ。

その他の条件は、C言語から
 (仮想)COMポートで読み込み
 生データをテキストで保存(ログ用)
 画面に表示し
 生データとは別に記録
 機器の方にコマンドも送りたい
これらを実行するどのようなライブラリ関数を呼び出すかの問題でしょ。
    • good
    • 0

VisualBASIC は無料で使えて,exe は GUI で使えます。

シリアル通信なら
https://www.contec.com/jp/support/basic-knowledg …
にあるようにすればできるのではないですか? 僕自身はこれは使ったことがありません。ただ Windows 用の GUI のプログラムは複数作ってしょっちゅう使っています。
    • good
    • 0

元があるなら一度ソフトを落として11対応に修正する


https://visualstudio.microsoft.com/ja/free-devel …
    • good
    • 1

>>外部に繋いだ機器から送られてくるデータを(仮想)COMポートで読み込み、



この「(仮想)COMポート」ってのが何を意味するのか分かりません・・。
WinXPの頃など、昔であればCOMポートが付いているのが普通だったりしましたが、最近のPCでCOMポートを使いたい場合は、デスクトップなら拡張スロットに増設ボードを追加するなどが必要ですね。

上記の問題が解決できたとして、一般的には、質問にあるような処理をする場合、C#とかC++などの言語を使って、ソフト開発をするようになると思います。
ただ、もしソフト開発したとしても、勤務先の制約で「そんな訳の分からないソフトを使うのはまかりならん!!」ってなりそうですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!