SMC-4DL-PCIボードでの制御プログラム

このQ&Aのポイント
  • SMC-4DL-PCIボードでアクチュエータを制御するためのプログラム作成に問題があります
  • VC6.0を使用してプログラミングを行い、ビルドしてもアクチュエータが動きません
  • おそらくプログラムのどこかに問題がありますが、初心者でサンプルプログラムも難しく解読できません
回答を見る
  • 締切済み

SMC-4DL-PCIボードでの制御プログラム

コンテックさんのSMC-4DL-PCIボードを使用してアクチュエータを動かそうとしています(動かしたいのはオリエンタルモーターさんのELC)。 VC6.0を使用してプログラミングを行い、ビルドして.exeを実行すると何も起きません。 ボードに付属のサンプルプログラムではアクチュエータが動くので、配線ミスということは無いと思います。 おそらく組んだプログラムのどこかがおかしいのだとは思うのですが、恥ずかしながらプログラミング自体初めてなうえ、サンプルプログラムが難しすぎて解読が全く出来ないのでどうしたらいいか困っています。 卒論で使用するのでとにかく早く作り上げなければなりません。 足りない部分、間違いなどあればご指摘お願いします。 (ちゃんとライブラリファイルも追加してあります) #include "stdafx.h" #include "CSmc.h" #include "CSmcdef.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { long Ret; char *DeviceName ="SMC000" ; short Id ; Ret = SmcWInit( DeviceName , &Id ); short PulseMode ; short DirTimer ; PulseMode = 5; DirTimer = 1; Ret = SmcWSetPulseType( Id , 1, PulseMode , DirTimer ); Ret = SmcWSetInitParam( Id , 1); short MotionType ; short StartDir ; MotionType = 2; StartDir = 0; Ret = SmcWSetReady( Id , 1, MotionType , StartDir ); short Coodinate ; short StopPosition ; Coodinate = 1; StopPosition = 1000; Ret = SmcWSetStopPosition( Id , 1, Coodinate , StopPosition ) ; Ret = SmcWMotionStart( Id , 1); Ret = SmcWExit( Id ); return 0; }

noname#230358
noname#230358

みんなの回答

noname#230359
noname#230359
回答No.1

さすがにこれだけじゃあわからない 実機もないし int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { //   Ret の 宣言 long Ret; // DeviceName の宣言 & "SMC000" 代入 char *DeviceName ="SMC000" ; // Id の 宣言 short Id ; //   SmcWinit (初期化)失敗したら Ret に なんか変えるので ブレークポイント 作って 見る Ret = SmcWInit( DeviceName , &Id ); //   PulseMode DirTimer の宣言 short PulseMode ; short DirTimer ; //   代入 PulseMode = 5; DirTimer = 1; //   失敗したら Ret に なんか変えるので ブレークポイント 作って 見る Ret = SmcWSetPulseType( Id , 1, PulseMode , DirTimer ); //   失敗したら Ret に なんか変えるので ブレークポイント 作って 見る Ret = SmcWSetInitParam( Id , 1); //   宣言 short MotionType ; short StartDir ; //   代入 MotionType = 2; StartDir = 0; //   失敗したら Ret に なんか変えるので ブレークポイント 作って 見る Ret = SmcWSetReady( Id , 1, MotionType , StartDir ); //   宣言 short Coodinate ; short StopPosition ; //   代入 Coodinate = 1; StopPosition = 1000; //   失敗したら Ret に なんか変えるので ブレークポイント 作って 見る Ret = SmcWSetStopPosition( Id , 1, Coodinate , StopPosition ) ; //   失敗したら Ret に なんか変えるので ブレークポイント 作って 見る Ret = SmcWMotionStart( Id , 1); // 失敗したら Ret に なんか変えるので ブレークポイント 作って 見る Ret = SmcWExit( Id ); return 0; } デバッグの仕方を覚えましょう たぶん素人なので話がかみ合わないんだと思う たとえば char *DeviceName ="SMC000" ; を     char *DeviceName ="SNC000" ; と打ち間違えても 実行ファイルはできます コンパイルする前に VC6 だと F8 で ステップ 起動できるはずなので それで トレース していくべきです まあ、普通 Ret を 見て エラーが発生したら 処理すべきですが してないので 初心者に優しくない プログラムだと思う そのプログラムは エラーが発生しても 駄々流しです デバッグの仕方 http://www.vcppclub.com/kouza/beginner/beginner3.html まあ、本当に初心者なので ハローワールドから はじめてみたほうがいいです

noname#230358
質問者

補足

ブレークポイントとは何でしょうか? デバッグで何か引っかかってもビルドできてしまうことはあるんですか? 実機をお持ちでなかったらおそらくおわかりにならないと思います、 このコードはコンテックさんオリジナルのコードなので・・・

関連するQ&A

  • SMC-4DL-PCIボードでのプログラム

    コンテックさんのSMC-4DL-PCIボードを使用してアクチュエータを動かそうとしています(動かしたいのはオリエンタルモーターさんのELC)。 VC6.0を使用してプログラミングを行い、ビルドして.exeを実行すると何も起きません。 ボードに付属のサンプルプログラムではアクチュエータが動くので、配線ミスということは無いと思います。 おそらく組んだプログラムのどこかがおかしいのだとは思うのですが、恥ずかしながらプログラミング自体初めてなうえ、サンプルプログラムが難しすぎて解読が全く出来ないのでどうしたらいいか困っています。 卒論で使用するのでとにかく早く作り上げなければなりません。 足りない部分、間違いなどあればご指摘お願いします。 (ちゃんとライブラリファイルも追加してあります) #include "stdafx.h" #include "CSmc.h" #include "CSmcdef.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { long Ret; char *DeviceName ="SMC000" ; short Id ; Ret = SmcWInit( DeviceName , &Id ); short PulseMode ; short DirTimer ; PulseMode = 5; DirTimer = 1; Ret = SmcWSetPulseType( Id , 1, PulseMode , DirTimer ); Ret = SmcWSetInitParam( Id , 1); short MotionType ; short StartDir ; MotionType = 2; StartDir = 0; Ret = SmcWSetReady( Id , 1, MotionType , StartDir ); short Coodinate ; short StopPosition ; Coodinate = 1; StopPosition = 1000; Ret = SmcWSetStopPosition( Id , 1, Coodinate , StopPosition ) ; Ret = SmcWMotionStart( Id , 1); Ret = SmcWExit( Id ); return 0; }

  • CONTEC SMC-4DL-PE プログラム

    CONTECのボード:SMC-4DL-PE、三菱電機のサーボアンプ:MR-J4-70Aとモータ:HG-KR73Bを接続し、モータを動かすプログラムを作成しております(言語はC#です)。 ボードとアンプの配線は以下のURLを参考に行いました。 URL:http://www.contec-kb.com/848/ プログラム作成の参考として、まず、ボード付属のサンプルプログラムBaseMove等を使用して、モータが動くかどうか確認したのですが、モータが動かなくて困っております(動作時、エラーはありませんでした)。 三菱電機のソフトMR Configrator2を使用したテスト運転では、モータが動作することを確認できましたので、アンプとモータの配線は大丈夫だと考えております。 原因として、以下の項目が挙げられると思っています。 [1] ボードとアンプの結線のミス [2] ボードのSmcWSetPulseType関数等の各種初期設定内容が、相手機器(アンプ)の仕様に準じていない [3] ボードのパルス出力部の不良 個人的には2番目ではないかと、疑っているのですが、(ボード側およびアンプ側の)どの初期設定を変更すれば、モータが動作するようになるかわからず、困っております。 この問題および使用機器等について詳しい方、ご教示いただけますと幸いです。 よろしくお願いいたします。

  • windowsプログラム、文字化けする

    windowsプログラム、文字化けする 最近になってwindowsプログラムに興味を持ってやってみようと思い サイトでいざ勉強しようと思ったんですが、サンプルコードをVC++2008で コンパイル実行してみると、すべて文字化けしています。なぜでしょう ちなみにOSはXP、サンプルコードてのが #include <windows.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBox(NULL, "Hello World!", "メッセージ", MB_OK); return 0; } メッセージボックスでの文字表示のサンプルみたいですがどうもうまくいきません もう1つ このサンプルをソースファイルの拡張子cppでやるとエラーがでるんですがcだと警告が出るだけなんですが これはいったいなんででしょうか。 すみません、最近こういう勉強を始めたばかりなので。

  • F-BASICを使用して、コンテックのデジタル入出力ボードを制御する方法は?

    F-BASICで、コンテック製のデジタル入出力ボード(PIO-16/16L(LPCI)H)を制御したいのですが、制御できません。 付属のCD-ROMのサンプルプログラムやテクニカルリファレンスを読みましたが、ぜんぜん参考になりません。 制御(入出力プログラム)を御教えください。御願いします。  OSは、WIN2000です。

  • spawnl

    #include "stdafx.h" #include <process.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // TODO: この位置にコードを記述してください。 _spawnl(_P_WAIT, "chkbook.exe",...); return 0; } 上のようにして、MFCサンプルの ckhbook.exe  (引数はありません。) を呼び出そうとしましたが、上手く動きません。  どのように修正すれば良いのでしょうか?  コンソールプログラムの場合は、 簡単に呼び出せます。  よろしくお願いいたします。

  • メソッド制御に関して

    C++初心者です。 メソッドのタスク制御??を行いたいのですが、 いまいちよくわかりません。 やりたいことは、下記のソース(検討違いかと思いますが..)のように、 メソッドをリストにして、ループで処理をさせたいというものです。 下記を説明致しますと、TestFunc1()・TestFunc2()というメソッドがあります これらのメソッドをリスト化(programList)して、 メソッド呼び出し元(main)にて、ループをさせてメソッドコールをするというものです。 下記ソースもかなり見当違いであると思われますが、 大変申し訳ございませんが、ご教授よろしくお願いいたします。 ########################################################### # task_Test.cc ########################################################### #include <stdio.h> #include <stdlib.h> #include <unistd.h> // 起動プログラム数 #define PROGRAM_NUM (2) // 呼ばれ元メソッド1 int TestFunc1() {  // 戻り値  int ret = 0;  printf("TestFunc1 Start!\n");  return ret; } // 呼ばれ元メソッド2 int TestFunc2() {  // 戻り値  int ret = 0;  printf("TestFunc2 Start!\n");  return ret; } // 起動プログラムリスト (void*) programList[PROGRAM_NUM]={TestFunc1(),TestFunc2()} int main(int argc,char *argv[]) {  // ループカウンタ  int iCnt;  // ループ処理  for (iCnt=0; iCnt<PROGRAM_NUM; iCnt++)  {   programList[iCnt];  }  return 0; } ###########################################################

  • C言語:アウトプット引数のキャストについて

    以下のサンプルソースのように、(1)の場合、出力結果が24にならないのはなぜでしょうか?基礎的な質問だと思いますがよろしくお願いします。 --------------------------------------- サンプルソース #include <stdio.h> int getValue(unsigned short* us){ *us = 24; } main(){ int ret = 0; int intVal = 0; unsigned short usVal = 0; /* (1)int型のintValをunsigned short型にキャストした場合 */ ret = getValue((unsigned short*)&intVal); printf("%d\n", intVal); /* (2)unsigned short型のusValをそのまま引数に渡した場合 */ ret = getValue(&usVal); printf("%d\n", usVal); } ---------------------------------- 出力結果 1572864 ←(1)の結果 24 ←(2)の結果 -----------------------------------

  • Windowsゲームプログラミングを始めたのですが

    最近ゲームのプログラムを始めた者です。 C言語でWindowsプログラムを書き始めたのですが、最初の宣言を行った時点でコンパイル時に大量のエラーが出てしまいました。 ↓が内容です。 #include<windows.h> #include<stdio.h> #include<stdlib.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ } 使用OSはVistaです。 急いではいないので、どなたか解決法を知っている方、ご指導お願いします。

  • WINDOWSプログラミングをしている方へ質問

    WINDOWSプログラミングしている方へ質問です。 DOSプログラム #include <stdio.h> int main(void) { ・・・・・・・   return 0; } までの文+基本的な関数を覚えているプログラマが大半(ほぼ全員)だと思いますが WINDOWSプログラム #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); char szClassNme[] = "任意の文字"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow) { ・・・・・・ return (0L); } までの文+基本的な関数をWINDOWSプログラマは覚えているのでしょうか? それともCの基本的な事が分かるうえで必要に応じて関数や決まり事 を確認(本やサイト等)しながらプログラミングを しているのでしょうか? 両方のの経験者の方、暇な時にでも回答お願いします

  • ShellExecuteをつかって・・・

    もしかしたら非常に簡単な問題かもしれないんですけど、 SDIベースでShellExecuteをつかって以下のような関数を作ってコンパイルすると、 ”error C2065: 'm_hWnd' : 定義されていない識別子です。” がでます。 前に別プロジェクトでやったときは特に定義せず使えたような気がするのですが、 何か使い方が間違っているのでしょうか? #include "stdafx.h" #include "FCwin.h" #include "MainFrm.h" #include "FCwinDoc.h" #include "FCwinView.h" ・・・中略・・・ int CFCwinApp::DosFcExe() { HINSTANCE ret = ShellExecute(m_hWnd,"open","command.com",NULL,"c:\\",SW_SHOW); if((int)ret <= 32 ){AfxMessageBox("DOS窓開けません",MB_OK);return 1;} return 0; }