Я работаю над UART-RS485. Данные отправляются в байтах. Я проверил с жестко закодированным кодом, используя array
. Тем не менее, я хотел бы узнать, как использовать массив в динамическом c вопрос, так как размер пакета данных может варьироваться.
Task<UInt32> storeAsyncTask;
byte[] data = { 0xF5, 0x81, 0x66, 0x0F, 0x00, 0x6B };
dataWriteObject.WriteBytes(data);
storeAsyncTask = dataWriteObject.StoreAsync().AsTask();
UInt32 bytesWritten = await storeAsyncTask;
Пожалуйста, помогите спасибо.
Обновлено: я недавно попытался использовать bitconverter
, но это не работает. Я не уверен, где я сделал не так.
Task<UInt32> storeAsyncTask;
BitConverter.GetBytes(F5).CopyTo(data, 0);
BitConverter.GetBytes(TxAddress).CopyTo(data, 1);
BitConverter.GetBytes(TxCommand).CopyTo(data, 2);
BitConverter.GetBytes(TxData).CopyTo(data, 3);
BitConverter.GetBytes(~TxData).CopyTo(data, 4);
TxChkSum = 0;
foreach (byte a in data)
{
TxChkSum += a;
}
BitConverter.GetBytes(TxChkSum).CopyTo(data, 5);
dataWriteObject.WriteBytes(data);
storeAsyncTask = dataWriteObject.StoreAsync().AsTask();
UInt32 bytesWritten = await storeAsyncTask;
Обновление 23-01-2020
Я пытался использовать метод list
, но addrange
данные добавляются в диапазоне 2 байтов (16 бит) вместо один байт (8 бит), в котором связь RS485, с которой я взаимодействую, передается в байтовом байте. Могу ли я узнать, как обойти это?
2-й вопрос заключается в том, что при dataWriteObject.WriteBytes(data.ToArray());
выдается исключение, как указано ниже;
"Object reference not set to an instance of an object."
Я не уверен, что это значит и как его преодолеть.
например.
byte F5 = 0xF5;
byte TxCommand= 0x66
byte TxData = 0x0F
try
{
List<byte> data = new List<byte>();
data.AddRange(BitConverter.GetBytes(F5));
data.AddRange(BitConverter.GetBytes(TxAdr));
data.AddRange(BitConverter.GetBytes(TxCommand));
data.AddRange(BitConverter.GetBytes(TxData));
data.AddRange(BitConverter.GetBytes(~TxData));
TxChkSum = 0;
foreach (byte a in data)
{
TxChkSum += a;
}
data.AddRange(BitConverter.GetBytes(TxChkSum));
dataWriteObject.WriteBytes(data.ToArray());
Task<UInt32> storeAsyncTask;
storeAsyncTask = dataWriteObject.StoreAsync().AsTask();
UInt32 bytesWritten = await storeAsyncTask;
}
catch (Exception ex)
{
MainStatusDisplay.Text = ex.Message;
}