Я работаю над UART-RS485. Данные отправляются в байтах. Я тестировал жестко запрограммированный код, используя array
. Однако я хотел бы узнать, как использовать массив в динамическом вопросе, поскольку размер пакета данных может отличаться.
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, с которой я взаимодействую, передается побайтно. Могу я узнать, как это обойти?
Вторая проблема заключается в том, что в dataWriteObject.WriteBytes(data.ToArray());
it генерируется исключение, как показано ниже;
"Object reference not set to an instance of an object."
Я не уверен, что это значит и как с этим справиться.
eg.
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;
}