Здравствуйте!
Ситуация такая - есть у меня стенд с множеством различных контроллеров, модулей, и моя задача - написать программу на C#, которая будет брать со всех железок информацию для составления оценки безопасности. И вот есть моменты, которые хотелось бы уточнить:
1. Опрос стенда. Мой ноутбук соединяется с коммутатором стенда через порт Ethernet, и первая задача после установки физического подключения - опросить все устройства. Нужно это сделать для того, чтобы было видно наглядно, с какими устройствами можно работать. Порывшись и поискав информацию я сделал вывод, что самым лучшим вариантом будет ARP-запрос, вот только примеров реализации его нет, если я правильно понял то там должен генерироваться пакет специальным образом и наверное в таком случае должна быть какая-то библиотека на C#. Будет ли ARP-запрос в моём случае правильным решением данной задачи? Если да, то могу ли я попросить образец этого запроса или хотя бы где его можно посмотреть?
2. Чтение регистров. У меня есть пример кода, который на стенде сработал и я получил некоторые данные с него:
private void timerpoll_Tick(object sender, EventArgs e)
{
if (modClient.Connected == true)
{
//читаем 1ый узел
modClient.UnitIdentifier = 1;
int[] vals = modClient.ReadHoldingRegisters(0, 3);
tReg1_1.Text = vals[0].ToString();
tReg1_2.Text = vals[1].ToString();
tReg1_3.Text = vals[2].ToString();
//читаем 2ой узел
modClient.UnitIdentifier = 2;
vals = modClient.ReadHoldingRegisters(1, 3);
tReg2_1.Text = vals[0].ToString();
tReg2_2.Text = vals[1].ToString();
tReg2_3.Text = vals[2].ToString();
}
}
Но сейчас этот код нуждается в модификации, и меня интересует вот такой момент: в картах регистров Modbus адреса с некоторыми значениями, которые там хранятся, пишутся в 16-ричной системе счисления, а вот как тогда изменить его, чтобы он считывал конкретный диапазон?
Заранее спасибо.