8: 2013-09-18 (水) 20:28:14 yoshida | 9: 2013-09-19 (木) 15:10:09 yoshida | ||
---|---|---|---|
Line 3: | Line 3: | ||
[[ショップページへ>http://www.besttechnology.co.jp/modules/onlineshop/index.php?fct=photo&p=xxx]] | [[ショップページへ>http://www.besttechnology.co.jp/modules/onlineshop/index.php?fct=photo&p=xxx]] | ||
**概要 [#i9b1c92f] | **概要 [#i9b1c92f] | ||
- | 本製品(以後DXハブと称す)はインターフェースにRS485、又はTTLを利用する機器とPCを簡潔に接続し、通信するためのものです。~ | + | 本製品はインターフェースにRS485、又はTTLを利用する機器とPCを簡潔に接続し、通信するためのものです。~ |
- | 通信手段は提供していますが、通信方法はユーザアプリケーションにより提供されるものとします。Dynamixel製品に限り、ユーザアプリケーションであるDynamixelConfiguratorをご利用頂けます。 | + | 通信手段は提供していますが、通信方法はユーザアプリケーションにより提供されるものとします。[[Dynamixelシリーズ>Dynamixelシリーズ 他#m101b537]]に限り、ユーザアプリケーションである[[DynamixelConfigurator>#w7bb99b0]]をご利用頂けます。 |
**仕様 [#w1fc9eab] | **仕様 [#w1fc9eab] | ||
Line 18: | Line 18: | ||
|動作温度範囲|-10~60℃ 結露なきこと| | |動作温度範囲|-10~60℃ 結露なきこと| | ||
|寸法|外径:50.8x32.4mm(±0.5mm) &br;取り付け穴:45.1x26.7mm 4-φ2.2| | |寸法|外径:50.8x32.4mm(±0.5mm) &br;取り付け穴:45.1x26.7mm 4-φ2.2| | ||
- | |厚み| | | ||
|重量| | | |重量| | | ||
|電源|入力:DC4~40V(絶対最大定格電圧:60V) &br;出力:23A(最大定格電流:100A)| | |電源|入力:DC4~40V(絶対最大定格電圧:60V) &br;出力:23A(最大定格電流:100A)| | ||
|コネクタ|ホストPC間:USB(USB microB)x1 &br;RS485:MOLEX 22-03-5045x6 &br;TTL:MOLEX 22-03-5035x6| | |コネクタ|ホストPC間:USB(USB microB)x1 &br;RS485:MOLEX 22-03-5045x6 &br;TTL:MOLEX 22-03-5035x6| | ||
- | |通信仕様|RS485:半二重、最大通信速度 20Mbps、ESD ±15kV、最大ノード数 256台、終端抵抗付 &br;TTL:半二重、最大通信速度 3Mbps &br;電源:USBバスパワー| | + | |通信仕様|RS485:半二重、ESD ±15kV、最大ノード数 256台、終端抵抗付 &br;TTL:半二重、最大通信速度 3Mbps &br;電源:USBバスパワー| |
|環境配慮|Rohs未対応| | |環境配慮|Rohs未対応| | ||
Line 91: | Line 90: | ||
****サンプルプログラム [#ccd4be79] | ****サンプルプログラム [#ccd4be79] | ||
+ | ライブラリが用意されていない場合は電文作成と電文解析を行う必要があります。以下はDynamixel製品へPINGを行った際の電文作成と電文解析のサンプルとなります。 | ||
+ | #html{{ | ||
+ | <pre class="brush:c"> | ||
+ | #include <winsock2.h> | ||
+ | #include <windows.h> | ||
+ | #include <stdio.h> | ||
+ | #include <stdint.h> | ||
+ | #include <stdbool.h> | ||
+ | |||
+ | #define COMPORT "\\\\.\\COM6" // 環境に合わせて変更して下さい | ||
+ | #define BAUDRATE (1000000) | ||
+ | #define TIMEOUT (1000) | ||
+ | #define TARGETID (2) // DynamixelのID | ||
+ | |||
+ | void main (void) { | ||
+ | HANDLE hd; | ||
+ | COMMTIMEOUTS timeouts = { 0, 0, TIMEOUT, 0, 0 }; | ||
+ | DCB cDcb; | ||
+ | COMSTAT comStat; | ||
+ | DWORD dwErrors; | ||
+ | uint8_t buf[10]; | ||
+ | uint32_t wlen, len, rlen; | ||
+ | int i, cksum; | ||
+ | // 通信の設定 | ||
+ | memset (&cDcb,0,sizeof(cDcb)); | ||
+ | cDcb.BaudRate = BAUDRATE; | ||
+ | cDcb.ByteSize = 8; | ||
+ | cDcb.fParity = false; | ||
+ | cDcb.Parity = NOPARITY; | ||
+ | cDcb.StopBits = ONESTOPBIT; | ||
+ | cDcb.fOutX = false; | ||
+ | cDcb.fInX = false; | ||
+ | cDcb.fTXContinueOnXoff = true; | ||
+ | cDcb.XonLim = 512; | ||
+ | cDcb.XoffLim = 512; | ||
+ | cDcb.XonChar = 0x11; | ||
+ | cDcb.XoffChar = 0x13; | ||
+ | cDcb.fOutxDsrFlow = false; | ||
+ | cDcb.fOutxCtsFlow = false; | ||
+ | cDcb.fRtsControl = RTS_CONTROL_DISABLE; | ||
+ | cDcb.fDtrControl = DTR_CONTROL_ENABLE; | ||
+ | cDcb.fErrorChar = 0; | ||
+ | cDcb.fBinary = true; | ||
+ | cDcb.fNull = 0; | ||
+ | cDcb.fAbortOnError = false; | ||
+ | cDcb.wReserved = 0; | ||
+ | cDcb.EofChar = 0x03; | ||
+ | cDcb.EvtChar = 0; | ||
+ | if ((hd = CreateFileA (COMPORT, (GENERIC_READ | GENERIC_WRITE), 0, NULL, OPEN_EXISTING, 0, NULL)) != INVALID_HANDLE_VALUE) { | ||
+ | if ((SetCommMask (hd, 0) != 0) && SetCommState (hd, &cDcb) != 0) { | ||
+ | PurgeComm (hd, (PURGE_TXCLEAR | PURGE_RXCLEAR)); | ||
+ | // 機器に合った送信データの作成を記述 | ||
+ | // テスト用にDynamixel製品へのpingパケット作成 | ||
+ | buf[0] = buf[1] = 0xff; | ||
+ | buf[2] = cksum = TARGETID; | ||
+ | buf[3] = 0x2; | ||
+ | buf[4] = 0x1; | ||
+ | cksum += (buf[3] + buf[4]); | ||
+ | buf[5] = (uint8_t)(~(cksum) & 0xff); | ||
+ | len = 6; | ||
+ | // 送信処理 | ||
+ | ClearCommError (hd, &dwErrors, &comStat); | ||
+ | PurgeComm (hd, (PURGE_RXCLEAR)); | ||
+ | if (WriteFile (hd, buf, len, (LPDWORD)&wlen, NULL)) { | ||
+ | // 受信処理 | ||
+ | SetCommTimeouts (hd, &timeouts); | ||
+ | if (ReadFile (hd, buf, len, (LPDWORD)&rlen, NULL)) { | ||
+ | // 電文解析処理を記述 | ||
+ | // テスト用にDynamixel製品のpingステータスを解析 | ||
+ | for (i = 2, cksum = 0; i < rlen - 1; i++) cksum += buf[i]; | ||
+ | if (buf[0] == 0xff && buf[1] == 0xff && buf[2] == TARGETID && buf[3] == 0x2 && buf[5] == ((~cksum) & 0xff)) { | ||
+ | printf ("%d is Alive.\n", TARGETID); | ||
+ | } else printf ("check failed\n"); | ||
+ | } else printf ("read failed\n"); | ||
+ | } else printf ("write failed\n"); | ||
+ | } else printf ("comm failed\n"); | ||
+ | PurgeComm (hd, (PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR)); | ||
+ | CloseHandle (hd); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
**デバイスドライバ [#xd623de9] | **デバイスドライバ [#xd623de9] |