次の方法で共有


入門ガイド - Microsoft Standard Driver for 3D Printers

Microsoft Standard Driver for 3D Printers を使用すると、開発者は簡単にプリンターを Windows 10 と互換性のあるものにすることができます。 Microsoft OS 記述子を使用するすべてのプリンターは、互換性のある 3D プリンターとして認識できます。 この記事では、具体的な例を使用して、デバイスを Windows 10 で 3D プリンターとして認識し、その印刷機能を伝達するファームウェアの作成方法について説明します。

はじめに

Microsoft Standard Driver は、3D プリンターを Windows 10 と互換性を持たせたい独立系ハードウェア ベンダー (IHV) から独自のドライバーを作成する負担を軽減します。 Microsoft OS 記述子を認識している Windows のバージョンでは、コントロール要求を使用して情報を取得し、ユーザーの操作を必要とせずにデバイスのインストールと構成に使用します。

Windows 10 で 3D プリンターを動作させる一般的なプロセスには、次の手順が含まれます。

  1. 互換性 ID。 独立系ハードウェア ベンダー (IHV) は、プリンターのファームウェアに "3D Print" 互換性 ID を含める必要があります。 これにより、デバイスを 3D プリンターとして認識できます。

  2. 標準ドライバー。 デバイスが接続されると、Windows Update は 3D 印刷標準ドライバーをダウンロードし、既定の構成を使用する 3D プリンターとして現在のデバイスを検出します。

  3. 拡張プロパティ記述子。 標準ドライバーの一部として、3D プリンターの基本構成がいくつか用意されています。 そのため、開発者は、3D プリンターに一致する基本構成を選択できます。 基本構成を選択する上で、開発者は、一部のプロパティをオーバーライドして、3D プリンターとの一致を改善し、新しいファームウェアに含めることができます。

  4. プラグ アンド プレイ。 ファームウェアが 3D プリンターのフラッシュ メモリに書き込まれると、ユーザーが Windows 10 コンピューターに接続するたびに、標準ドライバーが自動的にダウンロードされ、開発者が選択したカスタム印刷機能が使用されます。

以降のセクションでは、具体的な例を使用して、これらの各手順を説明します。

詳細については、「Microsoft OS 記述子」を参照してください。

互換性 ID

現在 3D プリンターを使用している Windows オペレーティング システムに指定するには、適切な互換性 ID を使用する必要があります。 マイクロソフトの互換性 ID の一覧は、Microsoft OS 記述子でご覧いただけます。

3D プリンターと互換性のある ID を次の表に示します。

互換性 ID 準互換 ID 説明
"3DPRINT" (0x33 0x44 0x50 0x52 0x49 0x4E 0x54 0x00) 場合により異なる MS3DPRINT G コード プリンター

3D プリンター ファームウェアに含まれているヘッダー ファイルでは、IHV は、次のように互換性 ID を指定する必要があります。

#define MS3DPRINT_CONFIG_SIZE 232

#define MS3DPRINT_OSP_SIZE (4+4+2+0x20+4+MS3DPRINT_CONFIG_SIZE)

#define MS3DPRINT_XPROP_SIZE (4+2+2+2+MS3DPRINT_OSP_SIZE)

#define SIZE_TO_DW(__size)                \
        ((uint32_t)__size) & 0xFF,        \
        (((uint32_t)__size)>>8) & 0xFF,   \
        (((uint32_t)__size)>>16) & 0xFF,  \
        (((uint32_t)__size)>>24) & 0xFF

// CompatibleID and SubCompatibleID
static const uint8_t PROGMEM ms3dprint_descriptor[40] = {
    0x28, 0x00, 0x00, 0x00,                          // dwLength
    0x00, 0x01,                                      // bcdVersion
    0x04, 0x00,                                      // wIndex
    0x01,                                            // bCount
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        // RESERVED
    0x00,                                            // bFirstInterfaceNumber
    0x01,                                            // RESERVED
    '3', 'D', 'P', 'R', 'I', 'N', 'T', 0x00,         // compatibleID ("3DPRINT")
                                                 // subCompatibleID
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00   /*        */  
,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00               // RESERVED
};

上記のコードにある次の行が、3D プリンターの互換性 ID です。

'3', 'D', 'P', 'R', 'I', 'N', 'T', 0x00, // compatibleID ("3DPRINT")

この特定の構成により、IHV はファームウェアをコンパイルしてデバイスをフラッシュできます。 デバイスが接続されると、3D Print Standard Driver が自動的に Windows Update からダウンロードされます。

この段階でプリンターは標準ドライバーの既定の構成を使用しています。既定の構成で使用されるパラメーターは、ファイル StandardGCode.xml の %SYSTEMROOT%\System32\MS3DPrint フォルダーからアクセスできます。 さらに、開発者は別の基本構成を使用することを選択できます。基本構成の一覧は、同じフォルダー %SYSTEMROOT%\System32\MS3DPrint からアクセスできます。 この一覧には、新しい 3D プリンターが市場に出てくると、新しい構成が定期的に設定されます。

拡張プロパティ OS 機能記述子

前のセクションで説明したように、IHV は複数の基本構成にアクセスできます。 これには、プリンターのフラッシュ メモリに格納する必要がある情報の量を最小限に抑えるというメリットがあります。 開発者は、使用可能になった基本構成を調べて、プリンターに最も近いものを選択できます。 この例では、SD カードの基本構成を選択し、一部のプロパティを次のパラメーターでオーバーライドします。

パラメーター Value
Job3DOutputAreaWidth 250000
Job3DOutputAreaDepth 260000
Job3DOutputAreaHeight 270000
Filamentdiameter 2850

これらのパラメーターの詳細については、3D Printing SDK (MSI ダウンロード) のドキュメントに含まれる MS3DPrint Standard G-Code Driver.docx を参照してください。

使用する基本構成とオーバーライドするパラメーターを指定するには、次に示すように、拡張プロパティ OS 機能記述子を使用して指定する必要があります。

// Modifiers to the base configuration
static const uint8_t PROGMEM ms3dprint_properties_descriptor[] = {
    SIZE_TO_DW(MS3DPRINT_XPROP_SIZE),                   // dwLength
    0x00, 0x01,                                         // bcdVersion
    0x05, 0x00,                                         // wIndex
    0x01, 0x00,                                         // wCount

    SIZE_TO_DW(MS3DPRINT_OSP_SIZE),                     // dwSize
    0x07, 0x00, 0x00, 0x00,                             // dwPropertyDataType  (1=REG_SZ, 4=REG_DWORD, 7=REG_MULTI_SZ)

    0x20, 0x00,                                         // wPropertyNameLength
    'M', 0x0, 'S', 0x0, '3', 0x0, 'D', 0x0,             // bPropertyName
    'P', 0x0, 'r', 0x0, 'i', 0x0, 'n', 0x0,
    't', 0x0, 'C', 0x0, 'o', 0x0, 'n', 0x0,
    'f', 0x0, 'i', 0x0, 'g', 0x0, 0x0, 0x0,

    SIZE_TO_DW(MS3DPRINT_CONFIG_SIZE),                  // dwPropertyDataLength

    // Data
    0x42, 0x00, 0x61, 0x00, 0x73, 0x00, 0x65, 0x00, 0x3D, 0x00, 0x53, 0x00, 0x44, 0x00, 0x00, 0x00,  /* Base=SD  */  
    0x4A, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x33, 0x00, 0x44, 0x00, 0x4F, 0x00, 0x75, 0x00, 0x74, 0x00,  /* Job3DOut */  
    0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x41, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x57, 0x00,  /* putAreaW */  
    0x69, 0x00, 0x64, 0x00, 0x74, 0x00, 0x68, 0x00, 0x3D, 0x00, 0x32, 0x00, 0x35, 0x00, 0x30, 0x00,  /* idth=250 */  
    0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x33, 0x00,  /* 000 Job3 */  
    0x44, 0x00, 0x4F, 0x00, 0x75, 0x00, 0x74, 0x00, 0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x41, 0x00,  /* DOutputA */  
    0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x44, 0x00, 0x65, 0x00, 0x70, 0x00, 0x74, 0x00, 0x68, 0x00,  /* reaDepth */  
    0x3D, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00,  /* =260000  */  
    0x4A, 0x00, 0x6F, 0x00, 0x62, 0x00, 0x33, 0x00, 0x44, 0x00, 0x4F, 0x00, 0x75, 0x00, 0x74, 0x00,  /* Job3DOut */  
    0x70, 0x00, 0x75, 0x00, 0x74, 0x00, 0x41, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x48, 0x00,  /* putAreaH */  
    0x65, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x3D, 0x00, 0x32, 0x00, 0x37, 0x00,  /* eight=27 */  
    0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x66, 0x00, 0x69, 0x00, 0x6C, 0x00,  /* 0000 fil */  
    0x61, 0x00, 0x6D, 0x00, 0x65, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x64, 0x00, 0x69, 0x00, 0x61, 0x00,  /* amentdia */  
    0x6D, 0x00, 0x65, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x3D, 0x00, 0x32, 0x00, 0x38, 0x00,  /* meter=28 */  
    0x35, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00                                                   /* 50       */  
};

拡張プロパティ OS 機能記述子に関する情報は、OS_Desc_Ext_Prop.doc ファイルから確認できます。 詳細については、「Microsoft OS 記述子」を参照してください。

印刷機能の確認

デバイスがファームウェアをフラッシュ メモリに書き込むと、Windows 10 によってデバイスが自動的に検出され、印刷機能がレジストリに格納されます。

互換性のある 3D プリンターのインストール。

IHV がデバイスの VID/PID を独自に変更することが重要です。 別の既存デバイスのベンダー ID (VID) または製品 ID (PID) は使用しないでください。VID と PID は OS 記述子よりも優先されるため、オペレーティング システムがデバイスを正しく検出できなくなります。

デバイスが正しくインストールされていると、デバイスは [デバイスとプリンター] に表示されます。

デバイスとプリンター。

[デバイス マネージャー] では、対応するデバイス ID と互換性 ID を確認できます。

デバイス マネージャー。

デバイス マネージャーの詳細タブ - 対応するデバイス ID。

デバイス マネージャーの詳細タブ - 互換性のある ID。

USB ドライバーのプロパティは、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB のレジストリにアクセスすることで取得できます。

USB レジストリでの複数文字列値の編集。

3D プリント ドライバーのプロパティは、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers のレジストリにアクセスすることで取得できます。

レジストリで 3D 印刷ドライバーのプロパティを表示。

リソース

詳細については、次のドキュメントとリソースを参照してください。

3D Printing SDK (MSI ダウンロード)

Microsoft OS 記述子

USB 2.0 仕様

マイクロソフト 3D 印刷チーム (ask3dprint@microsoft.com) にもお問い合わせください。