質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

1回答

686閲覧

PC間のテキストファイル転送をCOM通信でしたい

kumesinn

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2022/12/09 06:57

前提

設備付属の専用PC(PC-A)と、一般PC(PC-B)があります。
PC-A:
Windows10Pro
スタンドアロン運用でLAN接続が不可能。
ソフトウェアのインストールが不可。
PC-B:
Windows10Enterprise。
グループポリシーによりUSBメモリ等の外部ストレージがブロックされ認識できない。

PC-AとPC-B間のCOM通信は可能。RS232Cや、BluetoothのSPPが使えそう。

実現したいこと

PC-Aで生成されるテキストファイルを、PC-Bへ転送したい。
手段は以下のどちらでも良い。
1.ファイルそのものを転送する。
2.ファイル内の文字列を転送する。
ここで言うテキストファイルは、タブ区切りtxtやカンマ区切りcsvを意味する。

今回は、2.ファイル内の文字列を転送する。をやってみた。

発生している問題・エラーメッセージ

エラーはない。
改行が無くなり1行で転送されてしまう事が問題。

該当のソースコード

Windows PowerShell

ソースコード PC-A(送信側)

$serialPorts = [System.IO.Ports.SerialPort]::GetPortNames(); $str = Get-content "C:\temp\test.csv" #echo($str) $com = New-Object System.IO.Ports.SerialPort "COM8", 4800, ([System.IO.Ports.Parity]::Odd),7,([System.IO.Ports.StopBits]::One) $com.WriteBufferSize = 4800 $com.DtrEnable = $true $com.RtsEnable = $true $com.Handshake=[System.IO.Ports.Handshake]::RequestToSend $com.NewLine = [Char]0x0D + [Char]0x0A $com.Encoding=[System.Text.Encoding]::GetEncoding("Shift_JIS") $com.Open() Start-Sleep -m 500 $com.WriteLine($str) Start-Sleep -m 500 $com.Close() $com.Dispose()

#ソースコード PC-B(受信側)

$com = New-Object System.IO.Ports.SerialPort "COM7" $com.Encoding=[System.Text.Encoding]::GetEncoding("Shift_JIS") $com.Open() Start-Sleep -m 500 $str = $com.ReadLine() #$str = $com.Read echo ($str) $com.Close() $com.Dispose() pause

試したこと

PC-B(受信側)は、他の言語(LabVEIW,VBA)で受信させてみても同様、改行が無くなってしまう。
PC-A(送信側)で、echo($str)によりテキストファイルから読み取った内容の表示させたところ、改行されていた。
よって改行が消えるのは送信時か受信時だと思う。

補足事項

PC-Aにソフトウェアのインストールが不可のため、Windows10標準のPowerShellを使ってみました。言語にこだわりはありません。
初歩的な質問でお恥ずかしい限りです。アドバイスいただけたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

通信自体は成功しているようですので
Base64Encodeして送信してみてはどうでしょうか?
この方法ならBinaryファイルも転送できますよー

ファイルがたくさんある場合は
ZipなどでまとめてからBase64Encodeすると
いいですよ

投稿2023/02/18 07:31

kamikazelight

総合スコア305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問