NXPチームの皆様、こんにちは。
2つのFreeMasterインスタンスにアクセスし、監視し、制御 できるMATLABスクリプトファイルを作成したいと考えています。私はユーザーガイドでこれについて話しているセクションを読みましたが、まだ問題があり、添付された例は1つのFreeMaster用であり、2つのFreeMasterインスタンスでは機能しませんでした。私がビルドしようとしている.mファイルは、これまで2つのファイルを開くだけで、それらから読み書きすることはできません。次のエラーが発生します。
ドットインデックスは、このタイプの変数ではサポートされていません。
SingleScriptControlling2FM のエラー (15 行目)
bSucc = pcm1 です。ReadVariable('SpeedActRpm');
誰かがこの目的のためのスクリプトを持っていますか、またはこのエラーを助けることができますか?
事前に感謝いたします。
アハメド
別のPCで試してみましたが、うまくいきます。
どうもありがとう、マイケル。
こんにちは、マイケル。
スクリプトを確認しましたか?問題はまだ存在します。
アハメド
ありがとう、マイケル。エクセルファイルを添付しました。
2つのインスタンスを手動で開いてから、VBAコードを実行してそれらを見つけようとしましたが、それもできませんでした。
うーん、これはExcel VBAに存在する「mult」オブジェクトに、正しいインスタンス名を引数としてFreeMASTERを起動するのに問題があるようです。私は、 "GetAppObject"を呼び出すときにインスタンス名("A"または"B")を渡す方法に問題があると思います。Excelファイルを添付ファイルとしてアップロードできるので、スクリプトを見ることができます。
いずれにせよ、コマンドラインから「A」(pcmaster.exe /sharex A)または「B」(pcmaster.exe /sharex B)という名前でインスタンスを手動で実行する場合。その後、ExcelVBAはそれを見つけることができるはずです。
よろしく
ミハル
こんにちは、アーメドさん。
あなたがMatlabからそれを働かせたのは良いことです。ここで、Excelの問題に焦点を当てましょう。2つの新しいインスタンスを開始するとき - VBAスクリプトはインスタンスにアクセスしますか?つまり、Excel VBAはFreeMASTERオブジェクトを使用して変数などを読み書きできますか?
「はい」の場合、インスタンス名に簡単な問題があります。インスタンスを実行するだけで、それでもアクセスできない場合は、アクセス権に問題がある可能性があります。
試してみる実験:
感謝
ミハル
マイケルさん、頑張っていただきありがとうございました。
1-バージョン3.2.3.2をインストールし、FreeMasterウィンドウから離れる問題が解決しました。
2-上記の例のように、特定のパス内の特定のインスタンスにsharex名を付ける方法を適用し、このsharex名をGetAppObject()メソッドに渡すと、この方法はMATLABスクリプトで適切に機能します。これでMATLABの問題は解決しました。
しかし、Excellで同じことを行うと、実行中の2つのFreeMasterインスタンスを見つけることができず、代わりに2つの新しいインスタンスが開きます。
敬具
アハメド
こんにちは、アーメドさん。
/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を開始すべきでした。アプリケーションが起動直後に閉じるとおっしゃいます...これは、インストールに問題があることを示している可能性があります。
感謝
ミハル
わかりました、別のPCで試してみます。
「とにかく、FreeMASTERが適切な「/ sharex」オプションを使用して手動で起動された場合、VBAスクリプトは正常に実行されます。したがって、これはあなたの問題とは異なる問題であるはずです。」
そしてこれで:もう1つの実験を行い、アプリケーションを手動で起動してみてください。インストールでpcmaster.exeファイルを見つけ、コマンドラインから引数/sharex "A"を使用して実行し、もう1つは/sharex "B"を指定して実行します。次に、"A" と "B" の名前でスクリプトを試してください。
単にインスタンスの名前をA&Bに変更するということですか、それとも何ですか?何か誤解しているような気がします。この /sharex の使い方は?
ご協力のほど、よろしくお願いいたします。
わかりました、私はこれを試してみて、あなたの試みも待ちます。ありがとうございます
こんにちは、アーメドさん。
32ビットExcelで再試行しますが、これには時間がかかります。
もう一度実験を行い、アプリケーションを手動で起動してみてください。インストールでpcmaster.exeファイルを見つけ、コマンドラインから引数/sharex "A"を使用して実行し、もう1つは/sharex "B"を指定して実行します。次に、"A" と "B" の名前でスクリプトを試してください。
問題は、Excel が実行中の 2 つのインスタンスを見つけるか、それとも別の 2 つの新しいインスタンスを開始するかです。
ご協力いただきありがとうございます。
ミハル
私があなたのコードを正確に変更せずに使用したときの同じ行で同じエラー。
はい、a と b は何も設定されていません。
register.bat走ると、一瞬黒い窓が出て消えます。これが何を意味するのかわかりません。
私が使っているExcelは32ビットです。これが違いの原因のようです。
私のコードを正確に試してみてもらえますか?ただ、行動を比較するだけです。Excelの32bit版と64bit版では異なる場合がありますので、ご注意ください。64bit版をテストしています。
また、a変数とb変数が実際に「なし」に設定されている場合は、それらを調べるためにブレークポイントを設定することもできます。
インストールが正しいことを完全に確認するために、「register.bat」を実行してくださいFreeMASTERインストールフォルダ(c:\ NXP \ FreeMASTER 3.2 \ FreeMASTER \ register.bat)の管理者として
感謝
ミハル
さて、私はあなたがこれをもっと調査するのを待っています。あなたの努力に感謝します。
私は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インスタンスを制御するために以前にテストしたことがある場合は、これに協力してください。
よろしくお願いします。
アハメド
こんにちは、アーメドさん。
MCBです。MULTは、FreeMASTERの複数の実行中のインスタンスを管理するのに役立つオブジェクトの識別子です。メソッド GetAppObject は 1 つだけですが、これは非常に用途が広いです。詳細については、ユーザーマニュアルのセクション6.9をお読みください。
GetAppObject を使用すると、次のことができます。
2つ以上のFreeMASTERインスタンスを制御する手順:
または、プロジェクトを projectA.pcmx と projectB.pcmx に保存することもできます。「設定をプロジェクトファイルに保存する」にチェックを入れて、通信設定が保存されるようにしてください。次に、各プロジェクトの名前をGetAppObjectの3番目の引数として渡すと、FreeMASTERの実行と通信設定とともにプロジェクトが自動的にロードされます。
さらに別の方法は、上記のように(プロジェクトを開かずに)MatlabからインスタンスAとBを開始し、pcmAおよびpcmBオブジェクトに対して実行されるStartCommおよびOpenProjectメソッドを使用してスクリプトからすべてを調整することです。
よろしく
ミハル