jl7gmnのblog

yahooブログから移行してきました。アマチュア無線を中心としたブログです。

リモート制御

Thetis-2.10.3.7-Final Releaseがすごい!

久々に中華のTRX-DUOでSdrアプリケーションのThetisを使ってみた。ついでに最新の情報を確認したところ物凄い進化していました。その紹介のyoutube動画です。先ずは紹介動画見てください。とにかくハイエンドのトランシーバーの受信機の機能よりもすごいかも!
私も後でインストールして試してみたいと思います。


 
つづく?

続きを読む

BAND-DATAプラグ&ジャック

アイコムのチューナーAT-100 を八重洲無線器に接続してコントロールする回路で必要なBAND-DATA用のプラグをALIEXPRESSに注文し、昨日届きました。約1週間で届いています。私的には日本で販売されていてもおかしくない物だと思うのですが、実際、本家本元のリニアアンプ用ケーブルコネクタ販売以外には、単品プラグは扱っているところはありませんでした。まったくと言っていいほど販売しているという情報はありませんでした。探しようが足りないのかはわかりませんが、物ありの時代で、何もないという事は、何かしらの力が働いているのかもしれません。中華から手に入りましたので、今はどうでもいいことですが、探している時はそう思いました。あくまでも推定の域ではありますがHi!。
アマゾンなどで販売されているものはDINプラグのオーディオ用で、8Pものは前のブログにも載せておきましたが、型番がMD-8-270-SWの270度ものです。日本ではこのプラグのみの取り扱いのようです。今回注文したものはYAESU MUSENの無線器のBAND-DATAジャックにさせる型番MD-8-260‐SWの262度ものです。高周波処理もしてあるように情報がありました。(馬蹄形の端子ピン配列)

ジャックへ挿す側のピンと ケーブルはんだ付け側のピン
MD-8-262-SWBOTHSIDE

ジャックへ挿す側のジャック側からのピン (配置は馬蹄形)
MD-8-262-SWPINTOP

ケーブルをはんだ付けする側のピン
MD-8-262-SWPINBOTM

無線機側と同じ基板取り付タイプのMD‐8‐262‐SW用ジャック
MD-8-262-SW用ジャック


注文は9月28日にしました。届いたのは丁度1週間の10月5日です。予定はもう少し先を想定していましたので、まあまあ早く届いて良かったというところです。この類のパーツの品質に関しては、挿してみたり、触ってみた感じでは全く問題はないようです。品質に関しての判断は使ってみて期間経過後どうかが本当の品質性能の判断となりますHi!
当面八重洲無線器のバンドデータ扱いはこのプラグが役目をはたしてくれることになります。配線用の多芯ケーブル線ももう少し準備が必要です。絶縁にはヒシチューブもありますが、ホットボンドを使うのもありですね。また、基板切削も控えています。なかなかやることが多いので、できるところから順番に進めてゆきたいものです。

つづく?

HAMLOG 方位情報からのローティターコントロールその4

UDP通信のクライアント側のWindowsFormアプリケーションをⅭ++にて作成していますが、本当はもっと楽に作成したい気持ちもありますが、やってゆくと、やはりC++コードを使うことに意義、(良さ)があります。ネットにも相当なサンプルコードがあり参考にして簡単にプログラムできるVisualBasic(VB)や(C#)がありますが、やはり、知りたいところ、細かなところはブラックボックス化されてしまっているため、それを操れる点ではC++が優位であるようです。ただ、私のやりたいことは、大概VB、C#で十分ではありますが、そこはこだわりです。Hi!しかも、現在の最新版のVISUAL STUDIO 2022を使っていて感じるのが、かなりの進化が感じれれるということです。久々にまたのめりこみ始めています。ハムログコントロールを行っていた当時のVISUAL STUDIO EXPRESS 2008や2010もやることはネットをつないで行うことは同じでも、2024年現在のネット上のAIも相まってプログラムコーディングが楽しくできてしまうという点があります。それはAIを使えるということです。今回も、ネットのAIをフル活用してコーディングしています。使ってて、参考書を開き読んで理解する前にコピペの多様でいとも簡単に動作するコードが出来上がりました。理解は後からでもよいかと思います。数をこなしていくうちに、自然とプログラミングのKnow How(ノウハウ)が身に付くと思います。まずは、自分の目的とするプログラムができたことの喜びや、感激を味わうことが何よりも第一のように思います。私も大学生の頃はそういう教授の授業を受けその影響がかなりあります。Hi!(教科書は最初からなくて、楽しむことから行う授業でした。)習うより慣れろ方式のほうが私には向いているので合っていたのかもしれませんが。と横道にそれましたので、本題にもどします。今回のブログネタは、すでにUDPクライアントとしてのサーバー側のローティターへのハムログ方位データのUDPデータ送信はうまくゆきました。それで、実際に使っていて自分のサーバーをESP32DevKitCで立ち上げて、そのWiFiを使っている時のみUDP通信が成立動作する制御であるということで、このWiFiの接続状況をリアルタイムで表示して常時確認できるようにクライアントアプリ側に組み入れたいということになります。プログラムで今はどのSSIDでのWiFi接続しているかを表示するプログラミングをやっていました。実際にAIに質問して、サンプルのC++コードを得ています。最初は簡単に”C++のUDPクライアントプログラムを教えてください” てな質問からです。すると面白いように、昔のPDP11のコンソール表示のように次から次へとコードが一行ずつ画面に表示されてゆきコードをだしてくれました。中身を見てゆくと、目的のWindowsフォームアプリケーションではなく、DOSコマンドプロンプト画面によるコーディングが多かったりします。中身を見て自分でフォームアプリケーション用にモディファイする方法もありますが、そこは、時間がかかるので、さらにAIに一番楽に使えるコードとしては、メッセージボックスへの表示するとか、テキストボックスへの表示するC++コードといった風に質問を続けてゆきます。一番手っ取り早いのは直接的に ”Visual studio2022 C++でのUDP送信クライアントプログラムを教えてください。” という具合に質問を書き込み実行したりしています。
まずは、いろいろと質問をして感覚的に自分の目的を引き出せればよいというやり方です。目的に近ずくように考えて、質問をしてゆくと参考となるプログラムコードも得やすいと思います。プログラムだけでなく、文法面でも、各文字変換なども有効に質問することで簡単に手法回答を得ることができています。
今回試し使用したAI は Copilot です。
Copilot-AI

簡単で、速いCopilotがもうすぐ来るという予告がはいっていますね!Hi!

Microsoft Copilot Proだと最初の1か月無料、この試用期間の終了後に、¥3,200円/月支払いのようです。
サブスクリプション方式のAIですが、念のためAIに実際に無料かの質問をしてみました。
”今使っているCOPILOTは無料ですか?”
Copilot-AI無料確認

今は無料で提供されているようです。今回100%参考にしたコードはCopilotからです。十分C++コーディング時に利用できました。

という事で、出来上がったC++のプログラムの概要です。
内容的には、現在使っているオリジナルサーバーがWiFi接続されているかを常時確認できるWindowフォームC++アプリケーションになります。

設定した自分のSSIDかどうかサーバーから取り込みして同じSSIDの場合に青色のバックカラーにフォアカラーの白文字で ”UDPTX is READY"と表示させています。
初回読み込み後、何もしなければこの後、別のWiFiにした場合はSSID表示は変化しません。変わったら、取り込みし直すタイマースタートボタンの ”Timer ON" ボタンを押す事で、リアルタイム変化追従します。起動後にTimer ONボタンを押します。さいしょからタイマー起動でもよかったかもしれませんが、そこらへんはいかようにもなりますから、組み込み時に対処します。動作確認のためにはタイマーON ,OFFはあったほうがよいかもしれませんが!?

My_WiFi_ready2024-10-05kako

取り込みしたSSIDが自分のサーバー以外のSSIDがつながっているときはバックカラーピンクに白文字のフォアカラーで ”UDPTX is NOT READY"と表示させています。
My_WiFi_not_ready2024-10-05kako

この現在接続中のWiFiのSSIDのリアルタイム表示を先のハムログデータ上の方位を読み取り、サーバーへUDP送信するクライアントアプリに組み入れます。青色時は問題なくWiFi接続が自分のサーバーの上で動作していることが確認できますから、UDP通信のやり取りが安心してできるという事になるかと思います。??

このアプリのC++コードは、いろいろと試したコードが残っているため汚いので、あとでまとめたいと思います。自分の使っているWiFiが何かが分かるので、いろいろと応用できるアプリケーションだと思います。

つづく?



HAMLOG 方位情報からのローティターコントロールその3

HAMLOGを起動するボタンでHAMLOGリストと入力用フォームのLOG-[A]を起動し、自分のコールサインを打ち込むとハムログの右方に"方位:115度 1.2km”といった情報が表示されます。この情報を取り込むプログラムを前回Microsoft Visual Studio Community 2022(64ビット)-Current Version 17.11.3 のプラットフォームでインストールしてあるVisual C++ 2022 を使い2011年に作成した、当時Visual Studio Express2010 C++のプログラムを最新のプラットフォームにてフォームを別途作成し、コンパイルして、無事にハムログ起動、終了、処理と、方位データと距離データの取り込みまで、うまく動作してくれました。まずは粗削りな操作フォームが次です。現在はプログラム中認識しやすいようにコントロール名をそのまま記載しておいてます。今回は新たなフォームに少し、アイデアを付け加えて、実際にデスクトップからFX‐1200に繋いだESP32の個人WiFiにてクライアント側からのUDP通信(送信)をプログラムしてみました。

DESK-TOP-applicationUDP
最初に、デスクトップPCで、このアプリを立ち上げてから、WiFi設定はメーカーのID,パスワードから、自分でサーバーで組んで設定したサーバーのIDとパスワードを入れ選択設定します。サーバー側からのWiFiに合わせるということです。インターネットがつながるメーカーのターミナルではなく、自分専用のWiFiを使っています。(世界に一つだけの自分で作成したサーバーですから、やってて、たのしくなります。Hi!)
右側のHAMLOG-OPEN でハムログを起動します。確認する最初のデータとして、まずはハムログ登録してある自分のコールサインを入力します。水色の”Data Receive"ボタンを押して、方位と距離を取り込みます。すでにグロバル変数に入るようになっているので、このデータ中の方位のデータ(115度)のみを使いUDPでデータを送出するということになります。送るデータは私のコールサインで取り込みした方位データ(”115”)を送出データで取り決めのコマンドヘッダーの”M”に方位データをストリング化してまとめて”M115”としてUDPデータ送出します。
変換はマイクロソフトのいくつかの提案methodのうち、試してうまくいったものを採用しました。
私の場合はmethod2でうまくいきました。ヘルプにてMicorosoftでは、各種の解決方法を提供してくれてます。ほんとに助かります。Hi!

データの”M115”をUDP送出する前には、取り込み角度の桁がすべて3桁、Mと合わせて4桁となる処理を行っています。0°から360°まであり、取り込み数値だけだと、送出動作しないものがありました。
関係ありませんが、表記上、角度の単位は“度”でなく”°”にしました。
"M0"       0°から9°まで2桁
"M90" 10°から99°まで3桁
"M100" 100°から360°まで
上記を全4桁となる処理を簡単なSWITCHプログラムで行っています。
size_t  size = str2->Length; 
上記の size で文字長を出し
文字長が1桁はゼロ2つ加えます。”M00”+取り込み数値1桁分
文字長が2桁はゼロ1つくわえます。“M0”+取り込み数値2桁分
文字長が3桁の数値はそのままで”M”+取り込み数値3桁分
上記加工後、送出用として準備できた全4桁のデータになります。下記は例です。
"M000"
"M090"
"M360"
// str2に上記”M***”を入れてます。
//****************************************************************************************************************
//新たに前のコードのインクルードに加え、UDP送出用に下記2つを追加インクルードしました。

#include <winsock.h>
#pragma comment(lib, "ws2_32.lib")


//ヘッダーをコマンドボタンのルーチントップに書きます。
private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) {

WSADATA wsaData;
SOCKET sock;
struct sockaddr_in addr;

//str2をストリング変数にキャスト(データ型変換変換)設定
System::String^ str2 = safe_cast<System::String^>(gcStr.Target);
  
       //ここにswitchで”size の長さで、前に説明した全4桁の"M***”をstr2に入れるルーチンが入ります。
       // (switch 省略)
  // 

//以下がMicrosoftのヘルプの内容です。
//**********************************************************************
//VisualC++でマネージド拡張機能を使用してからSytem::String*にchar*変換
//するいくつかの方法の内のmethod2について説明
// 
// 使用するMicrosoft.NET Frameworkクラスライブラリ名前空間
// ・System::Runtime::InteropServices
// ・Msclr::interop
// 
// StringToHGlobalAnsi は、マネージド String オブジェクトの内容を
// ネイティブ ヒープにコピーしてから、その場でアメリカ国立標準協会
// (ANSI) 形式に変換します。
// このメソッドは、必要なネイティブ ヒープ メモリを割り当てます。
//**********************************************************************
// method2 
char* str3 = (char*)Marshal::StringToHGlobalAnsi(str2).ToPointer();
printf(str3);

//あとは、UDPの手順どおりにプログラムします。
//ソケットを使用する前の初期化
WSAStartup(MAKEWORD(2,0), &wsaData); //WSAStartup関数でWinsockを初期化
// MAKEWORD(2.0)はWinsockのバージョン2.0ということらしい。

//UDPソケットを作成するために、socket関数を使用
sock = socket(2, SOCK_DGRAM, 0); //SOCK_DGRAMはUDPを指定
addr.sin_family = AF_INET; //AF_INETはIPv4アドレスファミリー
addr.sin_port = htons(****); //ポート番号****を設定
addr.sin_addr.S_un.S_addr = inet_addr("***.***.***.***"); //自分で設定したサーバーの」リモートIP設定です。

//str3にて任意角度にてデータ送出なります。
sendto(sock, str3, 5, 0, (struct sockaddr*)&addr, sizeof(addr));    //UDP送出
closesocket(sock);  //sockを」閉じます。」
WSACleanup();
return;

//****************************************************************************************************************
上記のUDP通信処理はお決まりの手続きで処理ということですから、手順通りに設定すればよいよう
です。ただし、インクルードファイルはWindow ,Windows Linux 他それぞれ専用に用意されて
あるので、自分でコーディング するときにはどのインクルードファイルが自分のOSに対応しているかの確認は必要です。
フォームには、上記UDP通信時の手順を踏んだプログラムコードを各角度(°)ボタンを30°毎に設定して みました。ハムログからでなくても、おおよそ方位が分かる場合は、手動でボタンを押してローティターを設定方向へ回すというものです。Hi !

C++によるUDP通信でWindowsデスクトップアプリ(ハムログ読み取り機能付き)からESP32DevKitCにつないだローティターの個人サーバーに角度を読み取りまたは指定角度で送出し、ローティターをうまく回せるようになりました。
次のステップとしては、サーバーからは角度を送った角度になるまで、現状の角度をリアルタイムで送ってきています。これをWindowsデスクトップアプリで表示することを検討したいと思っています。
すでにESP32DevKitCどうしのESP32DevKitCのクライアントではUDP送出とサーバーからの角度のUDP受信はではできていることなので、問題はないかと思いますが、さて?

つづく?



HAMLOG 方位情報からのローティターコントロールその2

VISUAL STUDIO 2022のC++マネージドプログラミングでのハムログフォームからの方位と距離情報を取り込みするプログラミングを行いました。結果について言いますと、久々のC++でのコーディングは、大変でしたが、入門書を引っ張りだしてきて、サンプルを確認しながら、まず第一段階の方位と距離の取得はうまくいきました。たくさんの局のハムログの方位距離情報を確認しました。Hi!、方位と距離情報は文字長が変わったりするので、ある文字3点を選択し、それらの位置を起点とした取り込み方法で、方位取得、距離取得に関して思うよううまくいきました。ただここまで行きつくまで、いろいろありました、最初は、通常のテキストボックスに取り込んだ方位と距離情報を使う方法でコーディングをしていたのですが、テキストボックスに取り込んだ文字情報の位置を出すためのコーディングでは、アンマネージドプログラミングとなるfind コマンドがあるのですが、String -cha変換のエラーだらけだったりと、少し悩んだりしていました。入門書を確認し、基本に戻りアンマネージドプログラミングとなるテキストボックスを使った手法ではなく、マネージドプログラミングの対応するリッチテキストボックスを使う事でストレスなく文字列の中のある文字を指定し、その文字の位置の取得をすることができるようになりました。方位と距離を抜き出しすることが容易にできるようになったわけです。これも試してみてからうまくいったので採用しました。アンマネージドプログラミングとなるテキストボックスを止め、マネージドプログラミング対応のリッチテキストボックスへ切り替えたことで、取り込んだ文字情報("方位:***度 ****km")から方位角度の***と距離の****の部分を抜き出しできました。

以下プログラミングした方位、距離取得の起動時のフォームです。
最初は、右のHAMLOG-CONTROLのHAMLOG-OPENコマンドでハムログプログラムを立ち上げます。
前回のブログに示したコードそのまま使っています。
hamlogUDP-kido


次に青色のプログラムのフォームのData Receiveコマンドボタンを押します。これだけです。
最初はワンクッションのメッセージボックスで ”方位角度と距離を取り込みます” が表示されます。

hamlogUDP-kidoMESSAGE


6エリアの距離がある程度ある、実際にQSOした局長さんをハムログに打ち込み方位と距離をだして
の確認です。黄色のテキストボックスに ”225”度 ”1116”km と取得できています。

hamlog-other-1

DX局も確認しました。QSOした遠いイギリスの局長さんです。
方位 ”337”度、距離 ”9132”km と問題なく取り込みできています。

dx-other-1

自分のコールサインだと、方向と距離からみてもGPS基点の場所(市役所)が表示されているようです。方位角度 ”115”度 距離は一番短い ”1.2”km です。うまく取り込みできています。

hamlogUDP-get-direction-kyori


他、方位と距離が表示される場合はすでにメッセージボックスの画像をだしました。

MessageBox::Show("方位角度と距離を取り込みます。");

画像は載せませんが、ハムログフォーム上に方位と距離がない場合は次のメッセージが表示されます。

MessageBox::Show("方位角度と距離の表示なしです。\n 戻ります。");

緑色が今回の解決策のキーとなったリッチテキストボックスです。それ以外は表示するだけの機能のテキストボックスです。確認用にたくさんのテキストボックスがありますが、実際は表示しないで計算で使用するのみのものと、本当のデバッグ用で表示した物なので、実際はこのフォームの1/4位のサイズに収まるとみています。

メインとなる抜き出しのC++コーディング心臓部?です。抜き出しはSubstringを使用しています。
//***********************************************************************************************
//テキストボックス12の文字長 13 "方位:17度 59.7km";   //ある局長さんの情報
textBox12->Text = kazoe.ToString();

String^ cm1= ":";
String^ cm2 = "度";
        //角度を取り込む
int n1; // ":"の位置 0,1,2 の3番目の数字の2 
n1 = richTextBox1->Find(cm1, richTextBox1->SelectionStart + 1, RichTextBoxFinds::None);

textBox8->Text = n1.ToString();

int n2; // "度"の位置 0,1,2,3,4,5,6 の7番目の数字の6
n2 = richTextBox1->Find(cm2, richTextBox1->SelectionStart + 1, RichTextBoxFinds::None);

textBox9->Text = n2.ToString();

textBox10->Text = richTextBox1->Text->Substring(n1 + 1, n2 - n1 - 1);
textBox4->Text = textBox10->Text;

   //距離を取り込む
String^ cm3 = "m";
int n3;   //距離の"m"の位置0,1,2,3,4,5,6,7,8,9,10,11,12 の13番目の数字の12
n3 = richTextBox1->Find(cm3, richTextBox1->SelectionStart + 1, RichTextBoxFinds::None);
textBox13->Text = n3.ToString();
textBox11->Text = richTextBox1->Text->Substring(n2+2 , n3-n2-3);
//***********************************************************************************************

位置基準となる各文字の位置の情報、n1, n2, n3を使いSubstringにて方位角度と距離を抜き出しています。

次は、Windows10 でのUDP クライアントコーディングです。少し情報収集開始します。

つづく?
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード
アーカイブ
  • ライブドアブログ