1

USB 経由で一連の重量計から重量値を取得しようとしています。彼らのドキュメントによると、文字「W」と改行バイトの2バイトを送信する必要があるため、非常に単純なはずです。次に、デバイスの現在の重量を表す 16 バイトのデータで応答します。

このデバイスには、1 つのインターフェイス、2 つのエンドポイントがあり、最大パケット サイズは 64です。エンドポイント タイプが USB_ENDPOINT_XFER_BULK であるため、この関数を使用する必要があると思います。bulkTransfer

ここに画像の説明を入力

ドキュメントのグラフィックは次のとおりです。 ここに画像の説明を入力

このリクエストを送信してレスポンスを受け取るにはどうすればよいですか? 私の試みは以下であり、応答は単純に見出しの開始記号、次に逆引用符記号「`」、およびゼロのロードです。ポーリング ループまたは単一の要求でコードを実行しようとしましたが、同じ結果が得られました。

    val connection = usbManager.openDevice(scales)
    val intf: UsbInterface = scales.getInterface(0)
    connection.claimInterface(intf, true)

    val endpointReadIn = intf.getEndpoint(0)
    val endpointWriteOut = intf.getEndpoint(1)

    val bytes = byteArrayOf(0x57.toByte(), 0x0D.toByte())

    thread {
        val request = connection.bulkTransfer(endpointWriteOut, bytes, bytes.size, 0)
        Log.d(TAG, "Was request to write successful? $request")
        val buffer = ByteArray(16)
        val response = connection.bulkTransfer(endpointReadIn, buffer, buffer.size, 0)
        Log.d(TAG, "Was response from read successful? $response")
        val responseString = StringBuilder()
        for (i in 0..15) {
            responseString.append(buffer[i])
        }
        Log.d(TAG, "Response: $responseString")

        val hex = toHexString(buffer)
        Log.d(TAG, "Hex: $hex")

        connection.close()
    }


    fun fromHexString(hexString: String): ByteArray {
        val len = hexString.length / 2
        val bytes = ByteArray(len)
        for (i in 0 until len) bytes[i] = hexString.substring(2 * i, 2 * i + 2).toInt(16).toByte()
        return bytes
    }

出力:

Was request to write successful? 2
Was response from read successful? 2
Response: 19600000000000000
Hex:  01 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00
4

1 に答える 1

1

ここには欠けている部分がいくつかありました。大きな問題は、関数を介してすべて達成されるボーレート、データビット、ストップビット、およびパリティを指定していなかったと思いcontrolTransferます。

これらの設定中に成功した応答が得られたにもかかわらず、最終的には自分で動作させることができませんでした。その後、この RS232 デバイスと互換性のある素敵なライブラリを見つけ、うまく動作しました。FtdiSerialDriverクラスを使用してカスタムドライバーを取得するには、vid / pid を指定するだけです。

于 2020-03-06T13:41:40.380 に答える