1856051_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

1856051_ja-JP

1856051_ja-JP

1 つの MATLAB スクリプトからの 2 つの FreeMaster インスタンスの制御

NXPチームの皆様、こんにちは。

2つのFreeMasterインスタンスにアクセスし、監視し、制御 できるMATLABスクリプトファイルを作成したいと考えています。私はユーザーガイドでこれについて話しているセクションを読みましたが、まだ問題があり、添付された例は1つのFreeMaster用であり、2つのFreeMasterインスタンスでは機能しませんでした。私がビルドしようとしている.mファイルは、これまで2つのファイルを開くだけで、それらから読み書きすることはできません。次のエラーが発生します。

ドットインデックスは、このタイプの変数ではサポートされていません。

SingleScriptControlling2FM のエラー (15 行目)
bSucc = pcm1 です。ReadVariable('SpeedActRpm');

誰かがこの目的のためのスクリプトを持っていますか、またはこのエラーを助けることができますか?

事前に感謝いたします。

アハメド

Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

別のPCで試してみましたが、うまくいきます。

どうもありがとう、マイケル。

Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

こんにちは、マイケル。

スクリプトを確認しましたか?問題はまだ存在します。

アハメド

Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

ありがとう、マイケル。エクセルファイルを添付しました。

2つのインスタンスを手動で開いてから、VBAコードを実行してそれらを見つけようとしましたが、それもできませんでした。


Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

うーん、これはExcel VBAに存在する「mult」オブジェクトに、正しいインスタンス名を引数としてFreeMASTERを起動するのに問題があるようです。私は、 "GetAppObject"を呼び出すときにインスタンス名("A"または"B")を渡す方法に問題があると思います。Excelファイルを添付ファイルとしてアップロードできるので、スクリプトを見ることができます。

いずれにせよ、コマンドラインから「A」(pcmaster.exe /sharex A)または「B」(pcmaster.exe /sharex B)という名前でインスタンスを手動で実行する場合。その後、ExcelVBAはそれを見つけることができるはずです。

よろしく
ミハル

Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

こんにちは、アーメドさん。

あなたがMatlabからそれを働かせたのは良いことです。ここで、Excelの問題に焦点を当てましょう。2つの新しいインスタンスを開始するとき - VBAスクリプトはインスタンスにアクセスしますか?つまり、Excel VBAはFreeMASTERオブジェクトを使用して変数などを読み書きできますか?

「はい」の場合、インスタンス名に簡単な問題があります。インスタンスを実行するだけで、それでもアクセスできない場合は、アクセス権に問題がある可能性があります。

試してみる実験:

  • pcmaster.exeを手動で実行し、AやBなどの簡単な名前を付けます。特殊文字などは使用しないでください。次に、VBAスクリプトで同じ名前を使用します。
  • Excelを管理者として実行します。
  • 「c:\NXP\FreeMASTER 3.2\FreeMASTER\examples\scripting\Visual Basic Application - Excel」にある簡単なExcelの例を試してください。彼らは機能しますか?

感謝
ミハル


Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

マイケルさん、頑張っていただきありがとうございました。

1-バージョン3.2.3.2をインストールし、FreeMasterウィンドウから離れる問題が解決しました。

2-上記の例のように、特定のパス内の特定のインスタンスにsharex名を付ける方法を適用し、このsharex名をGetAppObject()メソッドに渡すと、この方法はMATLABスクリプトで適切に機能します。これでMATLABの問題は解決しました。

しかし、Excellで同じことを行うと、実行中の2つのFreeMasterインスタンスを見つけることができず、代わりに2つの新しいインスタンスが開きます。

敬具

アハメド

Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

こんにちは、アーメドさん。

/sharex オプションの後の最初のパラメーターは、pmp プロジェクト ファイルの名前ではなく、実行中のインスタンスが mult に対して識別される名前です。GetAppObject です。プロジェクトも開きたい場合は、名前の後に指定する必要があります。

例:

pcmaster.exe C:\path\SpdControl.pmp    // will just open the project file
pcmaster.exe /sharex SPD       // will run the FreeMASTER named SPD,
// so you can attach to it using GetAppObject("SPD")
pcmaster.exe /sharex SPD C:\path\SpdControl.pmp // will do both

したがって、すべての例で、 /sharexオプションの後に引数を1つだけ渡したため、プロジェクトを開かずにFreeMASTERを開始すべきでした。アプリケーションが起動直後に閉じるとおっしゃいます...これは、インストールに問題があることを示している可能性があります。

  • バージョン3.2.3.2を実行していることを確認できますか?(ヘルプ/バージョン情報ダイアログを参照)。
  • 別のPCで同じことを試すことはできますか?
  • 「pcmaster.exe」だけで始めてみませんかそれが正しく実行されるかどうかを確認するための引数はありませんか?

感謝
ミハル

Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

わかりました、別のPCで試してみます。

とにかく、FreeMASTERが適切な「/ sharex」オプションを使用して手動で起動された場合、VBAスクリプトは正常に実行されます。したがって、これはあなたの問題とは異なる問題であるはずです。」

そしてこれで:もう1つの実験を行い、アプリケーションを手動で起動してみてください。インストールでpcmaster.exeファイルを見つけ、コマンドラインから引数/sharex "A"を使用して実行し、もう1つは/sharex "B"を指定して実行します。次に、"A" と "B" の名前でスクリプトを試してください。

単にインスタンスの名前をA&Bに変更するということですか、それとも何ですか?何か誤解しているような気がします。この /sharex の使い方は?

ご協力のほど、よろしくお願いいたします。


Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

わかりました、私はこれを試してみて、あなたの試みも待ちます。ありがとうございます

Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

こんにちは、アーメドさん。

32ビットExcelで再試行しますが、これには時間がかかります。

もう一度実験を行い、アプリケーションを手動で起動してみてください。インストールでpcmaster.exeファイルを見つけ、コマンドラインから引数/sharex "A"を使用して実行し、もう1つは/sharex "B"を指定して実行します。次に、"A" と "B" の名前でスクリプトを試してください。

問題は、Excel が実行中の 2 つのインスタンスを見つけるか、それとも別の 2 つの新しいインスタンスを開始するかです。

ご協力いただきありがとうございます。
ミハル


Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

私があなたのコードを正確に変更せずに使用したときの同じ行で同じエラー。

はい、a と b は何も設定されていません。

register.bat走ると、一瞬黒い窓が出て消えます。これが何を意味するのかわかりません。

私が使っているExcelは32ビットです。これが違いの原因のようです。


Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

私のコードを正確に試してみてもらえますか?ただ、行動を比較するだけです。Excelの32bit版と64bit版では異なる場合がありますので、ご注意ください。64bit版をテストしています。

また、a変数とb変数が実際に「なし」に設定されている場合は、それらを調べるためにブレークポイントを設定することもできます。

インストールが正しいことを完全に確認するために、「register.bat」を実行してくださいFreeMASTERインストールフォルダ(c:\ NXP \ FreeMASTER 3.2 \ FreeMASTER \ register.bat)の管理者として

感謝
ミハル


Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

さて、私はあなたがこれをもっと調査するのを待っています。あなたの努力に感謝します。

私はVisual Basicを使用してExcelでそれを作ろうとしており、次のコードから始めました:

サブ mmult_test()
McbPcmとして薄暗い
McbPcmとしてDim b
McbMultとして薄暗いマルチ

Set mult = 新しい McbMult
a = multを設定します。GetAppObject("A")
セットb = mult。GetAppObject("B")

Dim bSucc As Boolean

'ReadVariableは、現在のプロジェクトのFreeMASTER変数オブジェクトを使用します。使う
'ReadUIntVariable を使用して、シンボル名を使用してメモリに直接アクセスします。
bSucc = a.ReadVariable("SPEED_CMD", vValue, tValue, bsRetMsg) を設定します。
もしbSucc Then
SHT。Range("B1")です。値 = vValue
終了条件

b.ReadVariable("TrqCtrlSwitch", "b3") の場合
MsgBox ("インスタンス B からの変数" + t2)
然も無くば
MsgBox ("インスタンス B からの読み取りエラー: " + m2)
終了条件
エンドサブ

私がここでの質問で見たこと:https://community.nxp.com/t5/FreeMASTER/Multiple-instances-using-ActiveX-in-VB/td-p/1340033

しかし、私はこの行でコンパイラエラーを得ました: Set bSucc = a.ReadVariable("SPEED_CMD", vValue, tValue, bsRetMsg) エラーは言う: "オブジェクトが必要" そして "Set" を削除すると、それは私に与えます: "オブジェクト変数またはブロック変数が設定されていません" GetAppObjectによって返されたオブジェクトも見ることができないと思います。Excellを使用して2つのFreeMasterインスタンスを制御するために以前にテストしたことがある場合は、これに協力してください。

よろしくお願いします。

アハメド


Re:1つのMATLABスクリプトから2つのFreeMasterインスタンスを制御する

こんにちは、アーメドさん。

MCBです。MULTは、FreeMASTERの複数の実行中のインスタンスを管理するのに役立つオブジェクトの識別子です。メソッド GetAppObject は 1 つだけですが、これは非常に用途が広いです。詳細については、ユーザーマニュアルのセクション6.9をお読みください。

GetAppObject を使用すると、次のことができます。

  • インターフェイス オブジェクトを ActiveX インターフェイスとして、FreeMASTER の "名前付き" 実行中のインスタンスに取得します
  • 名前付きインスタンスがまだ実行されていない場合は、実行します。
  • 名前付きインスタンスを実行し、プロジェクトを読み込みます。

2つ以上のFreeMASTERインスタンスを制御する手順:

  1. インスタンス A を手動で実行するには、プロセスを開始pcmaster.exe。コマンドラインパラメータ「/sharex A」を使用して名前を付けます。FreeMASTERが起動したら、ボード接続の設定、プロジェクトのオープンなどを行います。
  2. 同様に、「B」という名前のインスタンスを実行し、2 番目のボードに接続します。
  3. matlabで、
    • pcmA = マルチ。GetAppObject("A")
    • pcmB = マルチ。GetAppObject("B")
  4. これで、各オブジェクトを使用して変数を読み取り、各ボードに固有の他の制御を行うことができます。

または、プロジェクトを projectA.pcmx と projectB.pcmx に保存することもできます。「設定をプロジェクトファイルに保存する」にチェックを入れて、通信設定が保存されるようにしてください。次に、各プロジェクトの名前をGetAppObjectの3番目の引数として渡すと、FreeMASTERの実行と通信設定とともにプロジェクトが自動的にロードされます。

さらに別の方法は、上記のように(プロジェクトを開かずに)MatlabからインスタンスAとBを開始し、pcmAおよびpcmBオブジェクトに対して実行されるStartCommおよびOpenProjectメソッドを使用してスクリプトからすべてを調整することです。

よろしく
ミハル

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎11-21-2025 10:34 PM
更新者: