質問編集履歴
2
C++のコードを追記しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -58,122 +58,33 @@
|
|
58
58
|
つたない文章で分かりにくいとは思いますが、何卒よろしくお願いいたします
|
59
59
|
|
60
60
|
追記
|
61
|
-
```
|
61
|
+
```C++
|
62
|
-
import ctypes
|
63
|
-
|
62
|
+
//保存先ファイル名の取得
|
64
|
-
|
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
|
-
(
|
65
|
+
if( SaveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK )
|
66
|
+
{
|
71
|
-
|
67
|
+
if( System::IO::File::Exists(SaveFileDialog1->FileName))//既存ファイルチェック
|
68
|
+
{
|
72
|
-
|
69
|
+
System::IO::File::Delete(SaveFileDialog1->FileName);
|
73
|
-
("TriggerCh",c_ubyte),
|
74
|
-
("ClockSel",c_ubyte),
|
75
|
-
("SamplingClock",c_int),
|
76
|
-
("PreTriggerLen",c_int),
|
77
|
-
|
70
|
+
}
|
78
71
|
|
79
|
-
|
80
|
-
#dll読み込み
|
81
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
77
|
+
TotalLeng = 0;
|
150
|
-
#連続取り込み開始
|
151
|
-
|
78
|
+
EnableDisableControl(2);
|
152
|
-
print(cc)
|
153
|
-
|
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
|
-
|
80
|
+
Timer1->Enabled = true;
|
170
|
-
|
81
|
+
}
|
171
|
-
|
82
|
+
else//正常にスタートできなかった
|
172
|
-
print(n)
|
173
|
-
|
174
|
-
"""連続取り込み停止"""
|
175
|
-
Sampling_Stop(ID)
|
176
|
-
|
177
|
-
|
83
|
+
{
|
178
|
-
|
84
|
+
SaveFile->Close();
|
85
|
+
Tusbadsms_Device_Close((short) IdSel->SelectedIndex);
|
86
|
+
}
|
87
|
+
}
|
88
|
+
}
|
179
|
-
```
|
89
|
+
```
|
90
|
+
Tusbadsms_Sample_Startが関数となっています。
|
1
pythonのコードを追記しました。
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
|
+
```
|