09-17-2019 07:11 PM
こんにちは。
最近USB-8506を入手し、とりあえずフレームを1往復させることを目標に勉強中です。環境はVS2017、言語はひとまずC(サンプルコードがCだったので)、
C/C++プログラミングは全く問題ありませんが、LINとUSB-8506に関しては今回が初めてです。
USB-8506をマスタとした1対1通信で、NI-XNET Hardware and Software Manual(PXI8517).pdfの4-157ページ、Interface:LIN:TerminationのプロパティをONにして使いたいのですが、この設定方法が判りません。
プロパティにアクセスするためのAPIやマクロがあるのだと思い、マニュアルやヘッダを漁っているのですが、見当たりません。
多分すごく簡単なことだと思うので申し訳ない感じですが、
よろしくお願いします。
09-18-2019 01:55 PM
平素よりNI製品をご愛顧頂きありがとうございます。
日本ナショナルインスツルメンツ技術部の上野です。
現在参照されているのは、4-157ページとのことですが、第4章はLabVIEW用の説明です。C言語用に関しては第5章に記載されています。
C言語の場合、Interface:LIN:TerminationのプロパティはnxPropSession_IntfLINTermとなります。詳しくは下記のページをご参照ください。
09-19-2019 12:32 AM
上野様、ありがとうございます。
教えていただいたnxPropSession_IntfLINTermがヒントになり、
nxSetProperty()とnxGetPropertySize()のAPIを見つけ、
↓の関数を作り、
|void setNxProperty(nxSessionRef_t sessionHandle, u32 propertyID, void* propertyValue) {
| nxStatus_t nxStatus = 0;
|
| //プロパティサイズを問い合わせる
| u32 propertySize = 0;
| nxStatus = nxGetPropertySize(sessionHandle, propertyID, &propertySize);
| if (nxStatus != nxSuccess) {
| DisplayErrorAndExit(nxStatus, "nxGetPropertySize");
| }
|
| //そのサイズでプロパティを設定する
| nxStatus = nxSetProperty(sessionHandle, propertyID, propertySize, propertyValue);
| if (nxStatus != nxSuccess) {
| DisplayErrorAndExit(nxStatus, "nxSetProperty");
| }
|}
↓の様に呼び出して、
| u32 intfLINTerm = nxLINTerm_On;
| setNxProperty(nxSessionHandle, nxPropSession_IntfLINTerm, &intfLINTerm);
設定が上手くいっていれば、データラインがプルアップされると思うので、D-SUBの3-7
ピン間の電圧を確認しましたが、0Vのままでしたので多分失敗していると思います。
コンパイルは通りますし、エラー表示もありません。
確認の方法が悪いのでしょうか?
09-19-2019 02:47 AM
D-SUBの3-7ピン間ということは、LIN - COM間でしょうか?
ご参照いただいているユーザマニュアルの3-16にあるとおり、そのプロパティでソフトウェア的に有効にできる終端抵抗は、LINバスおよびVBat間(7-9ピン間)です。
この間で仕様書にあるとおり1 KΩの抵抗が有効になるかをご確認ください。
09-19-2019 09:37 PM
>この間で仕様書にあるとおり1 KΩの抵抗が有効になるかをご確認ください。
その確認のためにLIN - COM間の電圧を見ています。
抵抗ONならLIN - COM間が0Vなのはおかしくないですか?
LINバスおよびVBat間(7-9ピン間)で仕様書にあるとおり1 KΩの抵抗が有効になるかを確認するためにはどうすれば良いですか。テスターで抵抗を見るのですか?、具体的にお願いします。
09-20-2019 01:01 AM
おっしゃるとおりですが、LIN-COM間で期待する電圧を確認するには、外部電源からVbatへの電圧印加、プログラム的にプルアップ抵抗を有効化、スレーブ機器を接続して通信回路を閉回路にしておく必要があるかと思います。
具体的には、テスタを用いてVbatでの電源電圧を電圧測定し、Terminationプロパティを有効にするプログラムの動作確認として、テスタを用いた抵抗測定をおこなってから、USB-8506とスレーブにおけるLIN-COM間での電圧をご確認ください。
09-20-2019 01:32 AM - 編集済み 09-20-2019 01:33 AM
テスタで測って17.7KΩでした。nxPropSession_IntfLINTermの設定が0でも、1でも同じです。やはり効いていません。時間が無いので抵抗外付けで対応します。ありがとうごございました。