ここではint(char.encode('hex'), 16)を使っていたが、電圧や湿度、熱電対の温度に変換して出したい。
import struct
buffer_list = struct.unpack('!23h', buffer)
でおしまい。
structこりゃあ便利だ。Format Charactersを指定することで変換できちゃう。
!:network (= big-endian)
h:short 2byte
23:23回繰り返し(=46byte)
つまりbig-endianのsigned-short, 23 times
2011年12月24日土曜日
2011年12月22日木曜日
GL220の受信データー
忘れないようにGL220は10CHだから':MEAS:OUTP:ONE?'コマンドでの受信データーは46byteだからヘッダーは'#6000046 '
データ受信関連仕様書(GL220_820).pdfの4ページ
例) 端子台20CH、 内部バッファ内データ2点の場合
受信データ, 説明
#6******, ヘッダ(ASCII): #6は接頭文字で固定。次の6文字でその後の******で受信されるバイト数を表します。
1:CH1アナログデータ, 1chデータのバイナリ(2byte)
2:CH2アナログデータ, 2chデータのバイナリ(2byte)
:(中略), : (中略)
10:CH10アナログデータ, 10chデータのバイナリ(2byte)
CH11アナログデータ, 11chデータのバイナリ(2byte)
:(中略), : (中略)
CH20アナログデータ, 20chデータのバイナリ(2byte)
11:パルス1データ1, パルス1データ上位2byte, パルスデータは上位2byte、下位2byteを合計した4byte(32bit)データ
12:パルス1データ2, パルス1データ下位2byte
13:パルス2データ1, パルス2データ上位2byte
14:パルス2データ2, パルス2データ下位2byte
15:パルス3データ1, パルス3データ上位2byte
16:パルス3データ2, パルス3データ下位2byte
17:パルス4データ1, パルス4データ上位2byte
18:パルス4データ2, パルス4データ下位2byte
19:ロジックデータ, ロジックデータのバイナリ(2byte)
20:アラームデータ1, CH1~CH10のアラームデータ(2byte)
アラームデータ2, CH11~CH20のアラームデータ(2byte)
21:アラームデータ(ロジック/パルス), ロジックとパルスのアラームデータ(2Byte)
22:アラーム出力データ, アラーム出力データ(2Byte)
23:ステータス, データの状態を表す情報(2byte), CH1アナログデータ
23×2byte=46byte
アラームデータ2, CH11~CH20のアラームデータ(2byte) の部分に気が付かずに48byteになるがなと唸っていたぞ。
データ受信関連仕様書(GL220_820).pdfの4ページ
例) 端子台20CH、 内部バッファ内データ2点の場合
受信データ, 説明
#6******, ヘッダ(ASCII): #6は接頭文字で固定。次の6文字でその後の******で受信されるバイト数を表します。
1:CH1アナログデータ, 1chデータのバイナリ(2byte)
2:CH2アナログデータ, 2chデータのバイナリ(2byte)
:(中略), : (中略)
10:CH10アナログデータ, 10chデータのバイナリ(2byte)
11:パルス1データ1, パルス1データ上位2byte, パルスデータは上位2byte、下位2byteを合計した4byte(32bit)データ
12:パルス1データ2, パルス1データ下位2byte
13:パルス2データ1, パルス2データ上位2byte
14:パルス2データ2, パルス2データ下位2byte
15:パルス3データ1, パルス3データ上位2byte
16:パルス3データ2, パルス3データ下位2byte
17:パルス4データ1, パルス4データ上位2byte
18:パルス4データ2, パルス4データ下位2byte
19:ロジックデータ, ロジックデータのバイナリ(2byte)
20:アラームデータ1, CH1~CH10のアラームデータ(2byte)
21:アラームデータ(ロジック/パルス), ロジックとパルスのアラームデータ(2Byte)
22:アラーム出力データ, アラーム出力データ(2Byte)
23:ステータス, データの状態を表す情報(2byte), CH1アナログデータ
23×2byte=46byte
2011年12月21日水曜日
create_string_bufferからデーターリスト
create_string_bufferでデーター(data)が帰ってきているとき扱いやすいように
print repr(data.raw)
data_list = [int(char.encode('hex'), 16) for char in data]
print data_list
ふふふ、内包表記じゃ
print repr(data.raw)
data_list = [int(char.encode('hex'), 16) for char in data]
print data_list
ふふふ、内包表記じゃ
2011年12月20日火曜日
pythonでgraphtec GL220
ctypes初めて使った。
CDからドライバーをインストールして。gtcusbr.dllをお側に。
Open device
HANDLE __stdcall GtcUSBr_OpenDevice(void);
Close device
BOOL __stdcall GtcUSBr_CloseDevice(
HANDLE hDev # Handle to the USB to be I/O
);
Read (Block mode)
BOOL __stdcall GtcUSBr_ReadDevice(
HANDLE hDev, # Handle to the USB to be read
LPVOID lpBuffer, # Pointer to the buffer that receives the data read from the USB
DWORD nNumberOfBytesToRead, # Number of bytes to read
LPDWORD lpNumberOfBytesRead, # Pointer to the number of bytes read
DWORD dwTimeOut # TimeOut(ms)
);
Write (Block mode)
BOOL __stdcall GtcUSBr_WriteDevice(
HANDLE hDev, # Handle to the USB to be write
LPVOID lpBuffer, # Pointer to the buffer that sends the data write to the USB
DWORD nNumberOfBytesToWrite, # Number of bytes to write
LPDWORD lpNumberOfBytesWrite, # Pointer to the number of bytes write
DWORD dwTimeOut # TimeOut(ms)
);
あたりを使う。
橋渡しは
LPVOID ctypes.create_string_buffer()
DWORD ctypes.c_ulong()
LPDWORD ctypes.pointer(ctypes.c_ulong())
読むときはクエリーの時はASCIIが帰ってくる。1文字づつ読もう。
フリーランニングで、:MEAS:OUTP:ONE?で瞬時データを読むときは、
まずASCIIで8byteヘッダーを読んで「#6******」アスタリスクの部分をintに変えて続きのdataを読む。
どうでもいいけど。その1
マニュアルGL220 GL820 インターフェイスコマンド(GL220_820 IF_Command_Japanese.pdf)12ページのバッファ構成の欄の「は:MEAS:OUTO:STAT?で確認できます。」はバグ。正しくは「は:MEAS:OUTP:STAT?で確認できます。」
どうでもいいけど。その2
HPの「お問い合わせ」でくるメールの
###### 引用初め
本メールの配信に身に覚えのない場合、お手数ですが以下まで
###### 引用終わり
にはワロタ。
CDからドライバーをインストールして。gtcusbr.dllをお側に。
Open device
HANDLE __stdcall GtcUSBr_OpenDevice(void);
Close device
BOOL __stdcall GtcUSBr_CloseDevice(
HANDLE hDev # Handle to the USB to be I/O
);
Read (Block mode)
BOOL __stdcall GtcUSBr_ReadDevice(
HANDLE hDev, # Handle to the USB to be read
LPVOID lpBuffer, # Pointer to the buffer that receives the data read from the USB
DWORD nNumberOfBytesToRead, # Number of bytes to read
LPDWORD lpNumberOfBytesRead, # Pointer to the number of bytes read
DWORD dwTimeOut # TimeOut(ms)
);
Write (Block mode)
BOOL __stdcall GtcUSBr_WriteDevice(
HANDLE hDev, # Handle to the USB to be write
LPVOID lpBuffer, # Pointer to the buffer that sends the data write to the USB
DWORD nNumberOfBytesToWrite, # Number of bytes to write
LPDWORD lpNumberOfBytesWrite, # Pointer to the number of bytes write
DWORD dwTimeOut # TimeOut(ms)
);
あたりを使う。
橋渡しは
LPVOID ctypes.create_string_buffer()
DWORD ctypes.c_ulong()
LPDWORD ctypes.pointer(ctypes.c_ulong())
読むときはクエリーの時はASCIIが帰ってくる。1文字づつ読もう。
フリーランニングで、:MEAS:OUTP:ONE?で瞬時データを読むときは、
まずASCIIで8byteヘッダーを読んで「#6******」アスタリスクの部分をintに変えて続きのdataを読む。
どうでもいいけど。その1
マニュアルGL220 GL820 インターフェイスコマンド(GL220_820 IF_Command_Japanese.pdf)12ページのバッファ構成の欄の「は:MEAS:OUTO:STAT?で確認できます。」はバグ。正しくは「は:MEAS:OUTP:STAT?で確認できます。」
どうでもいいけど。その2
HPの「お問い合わせ」でくるメールの
###### 引用初め
本メールの配信に身に覚えのない場合、お手数ですが以下まで
ご連絡お願いいたします。
webmaster@grephtec.co.jp###### 引用終わり
にはワロタ。
登録:
投稿 (Atom)