teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

C++のコードを追記しました。

2019/08/05 04:16

投稿

p_pp
p_pp

スコア17

title CHANGED
File without changes
body CHANGED
@@ -58,122 +58,33 @@
58
58
  つたない文章で分かりにくいとは思いますが、何卒よろしくお願いいたします
59
59
 
60
60
  追記
61
- ```python
61
+ ```C++
62
- import ctypes
63
- from ctypes import*
62
+ //保存先ファイル名の取得
64
- import numpy as np
63
+ SaveFileDialog1->OverwritePrompt = true;
65
- """構造体宣言"""
64
+ SaveFileDialog1->Filter = "データファイル(*.dat)|*.dat";
66
- class ADSMS_SETTING(Structure):
67
- _fields_ = [
68
- ("ChLen",c_ubyte),
69
- ("ChPattern", c_ubyte*3),
70
- ("ChPatternRange", c_ubyte*3),
65
+ if( SaveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK )
66
+ {
71
- ("TriggerTypes",c_ubyte),
67
+ if( System::IO::File::Exists(SaveFileDialog1->FileName))//既存ファイルチェック
68
+ {
72
- ("TriggerLevel",c_short),
69
+ System::IO::File::Delete(SaveFileDialog1->FileName);
73
- ("TriggerCh",c_ubyte),
74
- ("ClockSel",c_ubyte),
75
- ("SamplingClock",c_int),
76
- ("PreTriggerLen",c_int),
77
- ("TotalLen",c_int)]
70
+ }
78
71
 
79
-
80
- #dll読み込み
81
- dll=ctypes.cdll.LoadLibrary('tt.dll')
72
+ SaveFile = gcnew StreamWriter(SaveFileDialog1->FileName);//ファイルを開く
82
- #機械ID
83
- ID=0
84
-
85
- #関数の引数型設定
86
- dll.Tusbadsms_Device_Open.argtypes=[c_short]
87
- dll.Tusbadsms_Device_Close.argtypes=[c_short]
88
- dll.Tusbadsms_Single_Sample.argtypes=[c_short,c_ubyte,c_ubyte,POINTER(c_short)]
73
+ ret = Tusbadsms_Sample_Start((short) IdSel->SelectedIndex,smpl_setting);
89
- dll.Tusbadsms_Status_Read.argtypes=[c_short,POINTER(c_ubyte),POINTER(c_ubyte),POINTER(c_int)]
90
- dll.Tusbadsms_Memory_Read.argtypes=[c_short,POINTER(c_short*9000),POINTER(c_int)]
91
- dll.Tusbadsms_Sampling_Stop.argtypes=[c_short]
92
- """
93
- dllの関数をセット
94
-
95
- """
96
- #オープン
97
- Device_Open=dll.Tusbadsms_Device_Open
98
- #クローズ
99
- Device_close=dll.Tusbadsms_Device_Close
100
- #測定値一回取り込み
101
- Single_Sample=dll.Tusbadsms_Single_Sample
102
- #測定値連続取り込み関数
103
- Sample_Start=dll.Tusbadsms_Sample_Start
74
+ if( ret == 0 )//正常にスタートできた
104
- #連続取り込み動作状態の確認
105
- Status_Read=dll.Tusbadsms_Status_Read
106
- #連続取り込み済みデータの取得
107
- Memory_Read=dll.Tusbadsms_Memory_Read
108
- #連続取り込み停止
109
- Sampling_Stop=dll.Tusbadsms_Sampling_Stop
110
- #ソフトウェアトリガー
111
- Sampling_Trigger=dll.Tusbadsms_Sampling_Trigger
112
-
113
- """
114
- ADコンバータ制御
115
-
116
- """
117
- #オープン
75
+ {
118
- Device_Open(ID)
119
-
120
-
121
- """
122
- 単一取り込み
123
-
124
- """
125
-
126
- #結果を格納するための変数valを作成
127
- val = c_short()
128
-
129
- #指定チャンネル入力の変換値を一回取り込む
130
- Single_Sample(ID,0,1,byref(val))
131
-
132
- print(val.value)
76
+ StopReq = false;
133
-
134
- """
135
- 連続取り込み
136
-
137
- """
138
- #連続取り込み設定
139
- adsms=ADSMS_SETTING()
140
- adsms.ChLen=1
141
- adsms.ChPattern[0]=0
142
- adsms.ChPatternRange[0]=0
143
- adsms.TriggerTypes=1
144
- adsms.TriggerLevel=100
145
- adsms.TriggerCh=0
146
- adsms.ClockSel=0
147
- adsms.SamplingClock=100
148
- adsms.PreTriggerLen=0
149
- adsms.TotalLen=9000
77
+ TotalLeng = 0;
150
- #連続取り込み開始
151
- cc=Sample_Start(ID,adsms)
78
+ EnableDisableControl(2);
152
- print(cc)
153
- Sampling_Trigger(ID)
79
+ Timer1->Interval = 100;
154
-
155
- """連続取り込み状態確認"""
156
- #結果を格納するための変数を作成
157
- status = c_ubyte() #0:停止中 1:トリガ待ち 2:サンプリング中
158
- ovf = c_ubyte()#0:正常 1:オーバーフロー発生(FIFOメモリの空きが無くなりました)
159
- lengh = c_int()#PC内データバッファに取り込まれているデータセットの数
160
- #連続取り込み状態確認
161
- Status_Read(ID,byref(status),byref(ovf),byref(lengh))
162
- print(status.value,ovf.value,lengh.value)
163
-
164
- """連続取り込みデータ取得"""
165
- #結果を格納するための変数を作成
166
- leng = c_int()
167
- data=(c_short*9000)()
168
- Memory_Read (ID,byref(data),byref(leng))
169
- print(leng.value)
80
+ Timer1->Enabled = true;
170
- #numpy配列に格納
81
+ }
171
- n=np.ctypeslib.as_array(data)
82
+ else//正常にスタートできなかった
172
- print(n)
173
-
174
- """連続取り込み停止"""
175
- Sampling_Stop(ID)
176
-
177
- #クローズ
83
+ {
178
- Device_close(ID)
84
+ SaveFile->Close();
85
+ Tusbadsms_Device_Close((short) IdSel->SelectedIndex);
86
+ }
87
+ }
88
+ }
179
- ```
89
+ ```
90
+ Tusbadsms_Sample_Startが関数となっています。

1

pythonのコードを追記しました。

2019/08/05 04:16

投稿

p_pp
p_pp

スコア17

title CHANGED
File without changes
body CHANGED
@@ -55,4 +55,125 @@
55
55
  実際に関数を呼び出し、構造体を引数として動かしたところ、pythonでのエラーは起きませんでしたが、各機能関数(プロシージャ)から戻る処理結果コードでは、「指定パラメータのエラー」という戻り値がきます。おそらく構造体が間違っていると思うのですが...
56
56
 
57
57
 
58
- つたない文章で分かりにくいとは思いますが、何卒よろしくお願いいたします
58
+ つたない文章で分かりにくいとは思いますが、何卒よろしくお願いいたします
59
+
60
+ 追記
61
+ ```python
62
+ import ctypes
63
+ from ctypes import*
64
+ import numpy as np
65
+ """構造体宣言"""
66
+ class ADSMS_SETTING(Structure):
67
+ _fields_ = [
68
+ ("ChLen",c_ubyte),
69
+ ("ChPattern", c_ubyte*3),
70
+ ("ChPatternRange", c_ubyte*3),
71
+ ("TriggerTypes",c_ubyte),
72
+ ("TriggerLevel",c_short),
73
+ ("TriggerCh",c_ubyte),
74
+ ("ClockSel",c_ubyte),
75
+ ("SamplingClock",c_int),
76
+ ("PreTriggerLen",c_int),
77
+ ("TotalLen",c_int)]
78
+
79
+
80
+ #dll読み込み
81
+ dll=ctypes.cdll.LoadLibrary('tt.dll')
82
+ #機械ID
83
+ ID=0
84
+
85
+ #関数の引数型設定
86
+ dll.Tusbadsms_Device_Open.argtypes=[c_short]
87
+ dll.Tusbadsms_Device_Close.argtypes=[c_short]
88
+ dll.Tusbadsms_Single_Sample.argtypes=[c_short,c_ubyte,c_ubyte,POINTER(c_short)]
89
+ dll.Tusbadsms_Status_Read.argtypes=[c_short,POINTER(c_ubyte),POINTER(c_ubyte),POINTER(c_int)]
90
+ dll.Tusbadsms_Memory_Read.argtypes=[c_short,POINTER(c_short*9000),POINTER(c_int)]
91
+ dll.Tusbadsms_Sampling_Stop.argtypes=[c_short]
92
+ """
93
+ dllの関数をセット
94
+
95
+ """
96
+ #オープン
97
+ Device_Open=dll.Tusbadsms_Device_Open
98
+ #クローズ
99
+ Device_close=dll.Tusbadsms_Device_Close
100
+ #測定値一回取り込み
101
+ Single_Sample=dll.Tusbadsms_Single_Sample
102
+ #測定値連続取り込み関数
103
+ Sample_Start=dll.Tusbadsms_Sample_Start
104
+ #連続取り込み動作状態の確認
105
+ Status_Read=dll.Tusbadsms_Status_Read
106
+ #連続取り込み済みデータの取得
107
+ Memory_Read=dll.Tusbadsms_Memory_Read
108
+ #連続取り込み停止
109
+ Sampling_Stop=dll.Tusbadsms_Sampling_Stop
110
+ #ソフトウェアトリガー
111
+ Sampling_Trigger=dll.Tusbadsms_Sampling_Trigger
112
+
113
+ """
114
+ ADコンバータ制御
115
+
116
+ """
117
+ #オープン
118
+ Device_Open(ID)
119
+
120
+
121
+ """
122
+ 単一取り込み
123
+
124
+ """
125
+
126
+ #結果を格納するための変数valを作成
127
+ val = c_short()
128
+
129
+ #指定チャンネル入力の変換値を一回取り込む
130
+ Single_Sample(ID,0,1,byref(val))
131
+
132
+ print(val.value)
133
+
134
+ """
135
+ 連続取り込み
136
+
137
+ """
138
+ #連続取り込み設定
139
+ adsms=ADSMS_SETTING()
140
+ adsms.ChLen=1
141
+ adsms.ChPattern[0]=0
142
+ adsms.ChPatternRange[0]=0
143
+ adsms.TriggerTypes=1
144
+ adsms.TriggerLevel=100
145
+ adsms.TriggerCh=0
146
+ adsms.ClockSel=0
147
+ adsms.SamplingClock=100
148
+ adsms.PreTriggerLen=0
149
+ adsms.TotalLen=9000
150
+ #連続取り込み開始
151
+ cc=Sample_Start(ID,adsms)
152
+ print(cc)
153
+ Sampling_Trigger(ID)
154
+
155
+ """連続取り込み状態確認"""
156
+ #結果を格納するための変数を作成
157
+ status = c_ubyte() #0:停止中 1:トリガ待ち 2:サンプリング中
158
+ ovf = c_ubyte()#0:正常 1:オーバーフロー発生(FIFOメモリの空きが無くなりました)
159
+ lengh = c_int()#PC内データバッファに取り込まれているデータセットの数
160
+ #連続取り込み状態確認
161
+ Status_Read(ID,byref(status),byref(ovf),byref(lengh))
162
+ print(status.value,ovf.value,lengh.value)
163
+
164
+ """連続取り込みデータ取得"""
165
+ #結果を格納するための変数を作成
166
+ leng = c_int()
167
+ data=(c_short*9000)()
168
+ Memory_Read (ID,byref(data),byref(leng))
169
+ print(leng.value)
170
+ #numpy配列に格納
171
+ n=np.ctypeslib.as_array(data)
172
+ print(n)
173
+
174
+ """連続取り込み停止"""
175
+ Sampling_Stop(ID)
176
+
177
+ #クローズ
178
+ Device_close(ID)
179
+ ```