Bagikan melalui


Mengaktifkan antarmuka USB kustom untuk printer 3D

Arsitektur yang dijelaskan dalam topik ini memungkinkan dukungan untuk printer 3D antarmuka USB kustom di ekosistem cetak v3 dan v4. Monitor port standar, 3dmon.dll, meneruskan perintah pekerjaan cetak 3D ke Windows 3DPrintService yang berjalan dengan kredensial layanan lokal. Layanan memuat dan berkomunikasi dengan DLL mitra untuk menjalankan perintah kustom yang diperlukan untuk pekerjaan cetak 3D. DLL mitra, serta 3dmon.dll dan 3dprintservice.exe dapat didistribusikan ulang, diinstal oleh paket driver USB perangkat. DLL mitra harus menerapkan dan mengekspor serangkaian fungsi untuk berkomunikasi dengan 3DPrintService. Sisa fungsionalitas yang diperlukan untuk berinteraksi dengan layanan penampung cetak diimplementasikan di 3dmon.dll.

Catatan

Arsitektur ini mengharuskan DLL mitra untuk multi-instans, utas aman.

Keputusan Arsitektur

Layanan windows 3DPrintService digunakan untuk memuat dan memanggil API tertentu yang ditentukan dalam DLL yang disediakan mitra selama alur kerja cetak. API ini akan memungkinkan komunikasi dengan printer.

Paket driver KMDF USB Filter diterbitkan pada Windows Update untuk diinstal melalui PnP untuk printer 3D yang didukung. Driver KMDF menginstal perangkat lunak mitra dan membuat simpul perangkat printer 3D. Simpul perangkat printer 3D diinstal menggunakan driver cetak v4 yang diterbitkan mitra dari Windows Update.

Keputusan Pengemasan

Biner dan Dependensi Biner

Arsitektur ini menggunakan driver yang diterbitkan oleh produsen perangkat keras pada Windows Update. Driver ini mencakup biner yang dapat didistribusikan ulang yang disediakan Microsoft berikut dan dependensinya:

  • 3dmon.dll

  • 3dprintservice.exe

  • ms3dprintusb.sys

Driver filter USB mode kernel

Driver KMDF diterbitkan oleh mitra dan terdiri dari komponen yang ditunjukkan pada diagram di bawah ini. Ini cocok dengan perangkat dengan ID perangkat keras (biasanya, VID & PID). Pengandar membuat simpul perangkat printer 3D pada penginstalan yang memicu pemasangan antrean cetak dan pengandar pemotong. Mitra menyediakan driver printer v4 untuk simpul perangkat printer 3D yang dibuat.

kmdf usb filter driver.

MS3DPrintUSB.sys

Driver perangkat mode kernel yang membuat simpul pengembangan printer 3D di bawah Enum\3DPrint. Ini dipanggil oleh subsistem PnP melalui kecocokan langsung VID & PID berdasarkan simpul perangkat yang dibuat oleh Winusb.sys. File .inf driver menyiapkan DLL kustom yang digunakan untuk mengatur 3DPrintService (jika belum diinstal pada sistem).

3dmon.dll

3DMon.dll adalah biner yang dapat didistribusikan ulang monitor port yang diterbitkan Microsoft yang dipanggil oleh penampung untuk berkomunikasi dengan printer 3D.

3dprintservice.exe

3DPrintService.exe adalah biner yang diterbitkan Microsoft yang diinstal sebagai layanan Windows selama penyetelan driver. 3DMon berkomunikasi dengan layanan ini untuk melakukan operasi seperti pencetakan, bidi, dan sebagainya dengan printer 3D.

Partnerimpl.dll

Partnerimp.dll adalah implementasi mitra dari antarmuka Microsoft yang diterbitkan. DLL berkomunikasi dengan perangkat mitra menggunakan protokol mereka. 3DPrintService.exe memuat DLL ini pada waktu proses untuk menggerakkan operasi perangkat printer 3D.

Diagram yang menunjukkan alur komunikasi perangkat untuk operasi perangkat printer 3 D.

Urutan penggunaan printer

  • Penampung berkomunikasi dengan 3dmon.dll yang mengirim perintah ke layanan jendela 3DPrintService

  • 3DPrintService.exe berjalan dengan kredensial akun NetworkService

  • Penampung, melalui 3dmon.dll, mengirim perintah ke 3DPrintService kapan saja printer 3D digunakan

  • 3DPrintService memproses perintah dan memanggil API saat runtime pada DLL implementasi yang disediakan mitra

  • 3DPrintService menyerahkan respons dari DLL yang disediakan mitra kembali ke penampung

Antarmuka dan Interaksi

DLL mitra harus mengekspor fungsi API berikut:

HRESULT Install([in] LPCWSTR args)

API ini bersifat opsional dan dapat digunakan oleh produsen untuk menginstal perangkat lunak kustom atau pendaftaran untuk perangkat mereka. Misalnya, penginstalan pemodelan yang disertakan dengan paket driver untuk perangkat. API ini dipanggil dengan kredensial SYSTEM untuk mengaktifkan penginstalan.

DWORD PrintApiSupported()

API ini digunakan oleh produsen pihak ketiga untuk menunjukkan versi API layanan cetak 3D yang didukung. API di bawah ini kompatibel dengan versi 1 dari 3DPrintService.

HRESULT InitializePrint(LPCWSTR pPrinterName, LPCWSTR pPortName, DWORD dwJobId, LPVOID* ppPartnerData)

API ini dipanggil sebelum peristiwa cetak mulai menginisialisasi printer. Printer dapat menyimpan status spesifik pekerjaan dalam parameter ppPartnerData. Panggilan ini dianalogikan dengan pemanggilan StartDocPort.

  • jobId - id pekerjaan yang digunakan untuk melacak pekerjaan

  • portName - nama port untuk printer 3D

  • printerName - nama pencetak yang sedang dikirimi tugas cetak ini

  • ppPartnerData - pointer ke pointer yang dapat digunakan untuk menyimpan data spesifik pekerjaan apa pun

HRESULT PrintFile([in] DWORD jobId, [in] LPWSTR portName, [in] LPWSTR printerName, [in] LPWSTR pathToRenderedFile,[in]LPVOID* ppPartnerData)

API ini digunakan oleh produsen pihak ketiga untuk mencetak dokumen pada printer mereka.

  • jobId - id pekerjaan yang digunakan untuk melacak pekerjaan

  • portName - nama port untuk printer 3D

  • printerName - nama printer yang sedang dikirimi tugas cetak

  • pathToRenderedFile - Jalur UNC ke lokasi file yang ditampung setelah penyajian dilakukan. Produsen pihak ketiga memproses file dari lokasi ini dan mencetak dokumen pada perangkat mereka

  • ppPartnerData - pointer ke pointer yang dikeluarkan untuk menyimpan penyiapan data tertentu mitra selama panggilan INITIALIZEPrint API.

  • printerName dapat diperoleh dari registri menggunakan nama port. Produsen pihak ketiga mungkin tidak dapat menggunakan nama port untuk berkomunikasi dengan perangkat mereka. Nama printer unik pada komputer Windows dan perangkat lunaknya akan mampu mengidentifikasi pencetak mana yang akan dicetak. Semua printer yang aktif pada komputer dapat ditemukan di kunci registri berikut:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers

Registri printer 3d.

Perintah HRESULT Query(_In_ LPCWSTR, _In_ LPCWSTR commandData, _Out_ LPWSTR resultBuffer, _Out_ resultBufferSize, , _In_ LPVOID* ppPartnerData)

  • command - perintah string dikirim sebagai kueri

  • commandData - argumen perintah (opsional)

  • resultBuffer - hasil pemanggilan argumen kueri>

  • resultBufferSize - ukuran string buffer hasil

  • ppPartnerData - pointer ke pointer untuk instans DLL mitra saat ini

Layanan 3Dprint memanggil DLL mitra untuk mendapatkan ukuran buffer yang akan dialokasikan untuk perintah.

Setelah mengalokasikan memori untuk menahan string respons, DLL akan dipanggil lagi untuk mendapatkan hasil aktual.

DLL dapat menggunakan data instans dari panggilan IntializePrint() sebelumnya untuk berkomunikasi dengan perangkat tanpa membuka saluran komunikasi baru setiap kali fungsi Query() dipanggil.

API ini digunakan untuk berkomunikasi dengan printer untuk mendapatkan informasi tentang konfigurasi perangkat, kemajuan cetak, atau untuk memberi tahu DLL mitra tentang peristiwa cabut perangkat.

Perintah di bawah ini harus didukung oleh produsen:

Perintah CommandData Output Komentar
\\Printer.3DPrint:JobStatus Pekerjaan Dimulai = {"Status": "ok"}, Status yang akan digunakan pada Penyelesaian {"Status": "Selesai"} Penampung akan menampilkan nilai yang dikembalikan dalam UI antrean cetak. Ini memungkinkan perangkat menampilkan informasi yang relevan selama cetak pada UI antrean cetak. Perangkat dapat mengembalikan string arbitrer di sini (misalnya "Sibuk" atau "33% selesai") dan ini akan ditampilkan verbatim dalam status pekerjaan antrean cetak.
\\Printer.3DPrint:JobCancel {"Status": "Selesai"} Penampung akan memanggil perintah ini ketika pengguna membatalkan cetak. DLL mitra mengembalikan nilai ini ketika pembatalan berhasil dan handel dan utas telah ditutup.
\\Printer.Capabilities:Data String XML sesuai dengan skema PrintDeviceCapabilites (PDC). Kueri PDC dipanggil oleh aplikasi yang ingin mendapatkan informasi lebih lanjut tentang printer. Data digunakan untuk menjelaskan kemampuan perangkat dan dapat menyertakan pengaturan pemotong jika driver bergantung pada pemotong Microsoft. Lihat di bawah ini untuk sampel PDC.
\\Printer.3DPrint:Putuskan sambungan {"Status": "OK"} Kueri ini dipicu setiap kali ada pemutusan PnP perangkat printer. Mitra dapat melakukan tindakan yang diperlukan, misalnya menutup handel yang terbuka untuk memungkinkan koneksi ulang yang tepat.
\\Printer.3DPrint:Connect {"Status":"OK"} Kueri ini dipicu setiap kali ada koneksi PnP dari perangkat printer. Mitra dapat melakukan tindakan yang diperlukan.

XML kemampuan perangkat cetak berikut dapat digunakan sebagai contoh:

<?xml version="1.0"?>
<PrintDeviceCapabilities
    xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="https://www.w3.org/2001/XMLSchema"
    xmlns:xml="https://www.w3.org/XML/1998/namespace"
    xmlns:psk="https://schemas.microsoft.com/windows/2003/08/printing/printschemakeywords"
    xmlns:psk3d="https://schemas.microsoft.com/3dmanufacturing/2013/01/pskeywords3d"
    xmlns:psk3dx="https://schemas.microsoft.com/3dmanufacturing/2014/11/pskeywords3dextended"
    xmlns:pskv="https://schemas.microsoft.com/3dmanufacturing/2014/11/pskeywordsvendor"
    xmlns:psf="https://schemas.microsoft.com/windows/2003/08/printing/printschemaframework"
    xmlns:psf2="https://schemas.microsoft.com/windows/2013/12/printing/printschemaframework2"
    xmlns="https://schemas.microsoft.com/windows/2013/12/printing/printschemaframework2"
    version="2">
    <CapabilitiesChangeID xsi:type="xsd:string">{9F58AF07-DCB6-4865-8CA3-A52EA5DCB05F}</CapabilitiesChangeID>

  <psk3d:Job3DOutputArea psf2:psftype="Property">
    <psk3d:Job3DOutputAreaWidth>150001</psk3d:Job3DOutputAreaWidth>
    <psk3d:Job3DOutputAreaDepth>150001</psk3d:Job3DOutputAreaDepth>
    <psk3d:Job3DOutputAreaHeight>150001</psk3d:Job3DOutputAreaHeight>
  </psk3d:Job3DOutputArea>

  <psk3d:Job3DMaterials psf2:psftype="Property">

      <psk3dx:MaterialPLA>
         <psk:DisplayName>PLA</psk:DisplayName>
         <psk3d:Job3DMaterialType>psk3d:PLA</psk3d:Job3DMaterialType>
         <psk3d:MaterialColor>#FFFFFFFF</psk3d:MaterialColor>

         <psk3dx:platformtemperature>0</psk3dx:platformtemperature>
         <psk3dx:filamentdiameter>1750</psk3dx:filamentdiameter>
         <psk3dx:filamentcalibrationoverride>1.0</psk3dx:filamentcalibrationoverride>
         <psk3dx:extrudertemperature>207</psk3dx:extrudertemperature>

         <psk3dx:SpeedFactor>1.0</psk3dx:SpeedFactor>

         <psk3dx:SetupCommands>
            <!-- Executed during pre-commands: nozzle pre-heating, priming, etc -->
            <psk3dx:command>M104 S207 T1</psk3dx:command>
            <psk3dx:command>M140 S50</psk3dx:command>
         </psk3dx:SetupCommands>

         <psk3dx:SelectCommands>
            <!-- Executed during printing: T0/T1 selection, nozzle wiping sequence,turn fan on/off/gradual, retract the material, temperature, etc-->
            <psk3dx:command>; PLA on</psk3dx:command>
            <psk3dx:command>M108 T1</psk3dx:command>
         </psk3dx:SelectCommands>

         <psk3dx:DeselectCommands>
            <!-- Executed during printing: retract the material, park the nozzle, reduce temperature, etc -->
            <psk3dx:command>; PLA off</psk3dx:command>
         </psk3dx:DeselectCommands>


      </psk3dx:MaterialPLA>
  </psk3d:Job3DMaterials>

  <psk3dx:customStatus>Slicing</psk3dx:customStatus>
  <psk3dx:userprompt>Confirm the 3D printer is calibrated and ready for the next print</psk3dx:userprompt>

   <!— Additional Slicer settings follow (optional) -->

</PrintDeviceCapabilities>

Untuk printer 3D yang tidak memiliki tampilan dan tombol on-board untuk memungkinkan pengguna berinteraksi dengan perangkat di awal cetak, kami menganjurkan untuk mengembalikan xml PDC dengan kumpulan pesan permintaan pengguna yang sesuai seperti yang ditunjukkan di atas dalam psdk3dx:userPrompt. Ini untuk mencegah memulai cetak baru di atas cetakan yang sudah ada. Pesan <status kustom psk3dx:customStatus> digunakan untuk menampilkan pesan apa pun selama pemotongan.

HRESULT Cleanup(LPCWSTR pPrinterName, LPCWSTR pPortName, DWORD dwJobId, LPVOID* ppPartnerData)

  • dwJobId - id pekerjaan yang digunakan untuk melacak pekerjaan di penampung

  • pPortName - nama port untuk printer 3D

  • pPrinterName - nama printer tempat tugas cetak ini dikirim

  • ppPartnerData - pointer ke pointer yang menyimpan pengaturan data khusus pekerjaan selama pemanggilan InitializePrint API

Pembersihan dipanggil pada keberhasilan penyelesaian pekerjaan cetak, atau setelah menyelesaikan kueri pembatalan pada tugas cetak. Ini memberikan kesempatan bagi DLL mitra untuk membersihkan sumber daya yang diinisialisasi untuk cetak ini.

HRESULT UnInstall([in]LPCWSTR args)

API ini dipanggil ketika menghapus instalan perangkat printer 3D dan menyediakan mekanisme bagi produsen untuk menghapus instalan perangkat lunak yang mungkin telah diinstal.