
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本でなんとかなる)とありがたいです。
はたして、こんな条件を満たす方法はあるのでしょうか。
No.4ベストアンサー
- 回答日時:
何をしたいのか どの程度の規模なのか にも寄りますね。
私は若いころに マイコン を作っていて 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 でリアルタイム表示も可能です。
No.7
- 回答日時:
>ChromeのJavascriptにCOMポート読み込みが実装されているとか聞きますが勝手にChromeを入れたりできないし、
ちょっと見た限り、Chrome だけじゃないようですが… 確認したんですか?
No.5
- 回答日時:
>アプリ起動はデスクトップのアイコンをダブルクリック、くらいで、まずコマンドライン画面を開いてコマンドを打つとかしなくて済む程度に簡素化できること。
C言語で、コマンドラインアプリをつくって、そのショートカットをデスクトップに置けばよいのでは?
パラメタを渡したなら、パラメタの書かれたファイルをドラッグすれば、コマンドラインアプリにそのファイル名が渡されるので、それを開けば、パラメタもコマンドラインアプリからアクセスできますよ。
その他の条件は、C言語から
(仮想)COMポートで読み込み
生データをテキストで保存(ログ用)
画面に表示し
生データとは別に記録
機器の方にコマンドも送りたい
これらを実行するどのようなライブラリ関数を呼び出すかの問題でしょ。
No.3
- 回答日時:
VisualBASIC は無料で使えて,exe は GUI で使えます。
シリアル通信ならhttps://www.contec.com/jp/support/basic-knowledg …
にあるようにすればできるのではないですか? 僕自身はこれは使ったことがありません。ただ Windows 用の GUI のプログラムは複数作ってしょっちゅう使っています。
No.1
- 回答日時:
>>外部に繋いだ機器から送られてくるデータを(仮想)COMポートで読み込み、
この「(仮想)COMポート」ってのが何を意味するのか分かりません・・。
WinXPの頃など、昔であればCOMポートが付いているのが普通だったりしましたが、最近のPCでCOMポートを使いたい場合は、デスクトップなら拡張スロットに増設ボードを追加するなどが必要ですね。
上記の問題が解決できたとして、一般的には、質問にあるような処理をする場合、C#とかC++などの言語を使って、ソフト開発をするようになると思います。
ただ、もしソフト開発したとしても、勤務先の制約で「そんな訳の分からないソフトを使うのはまかりならん!!」ってなりそうですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows用アプリ作成方法
-
宮崎駿作品集15枚組を購入した...
-
マイナー保健証で、紙の時より...
-
世界中で、人気のある、1000万...
-
AI を おちょくる質問
-
スマホのUSBポートやタブレット...
-
youtubeで、意図しない...
-
ハッシュ値はGitHubに書いてあ...
-
GitHubの使い方が分からないの...
-
rsyncをインストールするとssh...
-
チャタリングが起きるのはメカ...
-
coPilotにかけられた、制限(?...
-
X線解析装置の出力、オートロッ...
-
soc、マイコン、ARM、組み込み...
-
ワード作成した名刺の大量印刷...
-
プログラミングで気をつけるべ...
-
クリップボードに保存する事が...
-
Linuxにはオープンソースという...
-
microSDカードと外付けSSDって...
-
至急です。 電源入れたままSIM...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
soc、マイコン、ARM、組み込み...
-
宮崎駿作品集15枚組を購入した...
-
ワード作成した名刺の大量印刷...
-
教えてください Windows11で暗...
-
ノートパソコンを落としてしま...
-
Debianをノートパソコンにイン...
-
パスワードをハッシュ値にして...
-
至急です。 電源入れたままSIM...
-
AI を おちょくる質問
-
ハッシュ値はGitHubに書いてあ...
-
GitHubの使い方が分からないの...
-
GitHubはオープンソースのプロ...
-
AndroidはLinuxディストリビュ...
-
LinuxではUTF8のBOMなし、UTF8...
-
サーフェスについて、「再起動...
-
電線からインターネットに接続...
-
UQモバイルやLINEモバイルやmin...
-
ドコモやソフトバンクやauやLIN...
-
プログラミングで気をつけるべ...
-
SIMのように電線を使わずにイン...
おすすめ情報
・現在の物理的な接続は主にUSB、論理的にはシリアルポートに見えています(仮想COMポート)。ただし現時点では物理的にもRS-232C(シリアルポート)で残っている場合があります。
・通信速度は4800bpsが基本で仕様上の最高は115200bps、実態としては19200bpsくらいまで。NMEA(GPS機器)と同程度です。何せ基本設計が40年以上前…。データ量もこの速度で取りこぼさない程度しかありません。(一部仕様が拡張されててMbps単位の速度が必要なデータもありますが当面は無視。)
まとめてのお礼とします。
〉ただ、もしソフト開発したとしても、勤務先の制約で「そんな訳の分からないソフトを使うのはまかりならん!!」ってなりそうですね。
なので、できれば実体がテキストファイルであるスクリプト処理で済む方法であれば管理者もうるさく言わないだろうと。あと、私がいずれこの業務から離れた後にメンテ・改良を加える人のハードルを下げておきたいという思惑もあります。
〉最近は歳を取って延々とコードを書くなんてできませんが ChatGPTなんか使えば できそう(なので聞いてみました 参考にどうぞ)
イメージがしやすくて助かります。どうもPowershellに対して提示のようなことをすれば良さそうな気がしてきました。
〉ちょっと見た限り、Chrome だけじゃないようですが… 確認したんですか?
「MS Edgeにも実装されているようですが」であればBAだったのですが。