QtSerialPort を使用して、シリアル メッセージを COM ポート経由で INSTEON PowerLinc 2413U モデムに送信しています。ハードコーディングしてメッセージを送信することはできますが、可変デバイス ID を使用して同じメッセージを送信する必要があります。以下は、静的メッセージを送信するために使用した構造です。
QByteArray msg;
bool msgStatus;
msg.resize(8);
msg[0] = 0x02;
msg[1] = 0x62;
msg[2] = 0x1B;
msg[3] = 0xE9;
msg[4] = 0x4B;
msg[5] = 0x11;
msg[6] = 0x05;
msg[7] = 0x00;
send(msg,&msgStatus);
インデックス位置 2、3、および 4 は、デバイス ID を表します。この例では「1BE94B」です。私の関数は、QString を介してアクションを実行する必要があるデバイス ID を受け入れます。
必要な 3 つのインデックスの構造に合わせて QString を変換するにはどうすればよいですか。次を使用して、3バイトアドレスの各バイトを正常に取得します。
devID.mid(0,2)
devID.mid(2,2)
devID.mid(4,2)
私の Target 実装は、QByteArray が次のようになるためのものです。
QByteArray msg;
bool msgStatus;
msg.resize(8);
msg[0] = 0x02;
msg[1] = 0x62;
msg[2] = devID.mid(0,2)
msg[3] = devID.mid(2,2)
msg[4] = devID.mid(4,2)
msg[5] = 0x11;
msg[6] = 0x05;
msg[7] = 0x00;
send(msg,&msgStatus);
さまざまな変換スキームを試しましたが、必要なものを解決できませんでした。最終的には、次のmsg
ように構成する必要があります。
02621DE94B151300
意図したデバイス アクションを正常に確認できた唯一の方法は、QByteArray 内の各バイトを個別に割り当てることmsg.append()
です。
ご提案ありがとうございます。