#c# #types #ref #modbus
#c# #типы #ссылка #modbus
Вопрос:
Я изо всех сил пытаюсь что-то понять, чтобы использовать определенный метод в библиотеке, который был отправлен мне для управления устройством на Modbus RTU.
Однако мой вопрос не имеет ничего общего с фактическим Modbus. Я почти уверен, что мне просто не хватает некоторой базовой информации о C#.NET поскольку у меня не так уж много опыта. Я тоже не знаю, что искать.
Библиотека взята из Orientalmotor и называется omrlib. Он включает в себя некоторые специфические функции для их двигателей. Некоторые из них я могу использовать без каких-либо проблем, например, я могу получить скорость шагового двигателя следующим образом:
modbus.ReadParameter(1, 0x480, out operatingSpeed);
В этом конкретном примере я считываю с идентификатора драйвера 1, а скорость находится в регистре 0x480.
Проблема, с которой я сталкиваюсь, возникает, когда я ожидаю возврата некоторых (пользовательских) данных, например, с помощью метода SendDiagnosis вернет 2 байта, которые мне нужно прочитать. Синтаксис для этого
modbus.SendDiagnosis(response, slvadd, data)
slvadd — это байт, который соответствует идентификатору драйвера. данные — это ushort, куда я должен был бы отправить 0x1234, но я не могу понять, что использовать для ответа. Intellisense перечисляет тип как ref Omrlib.Информационные материалы.ModbusInfo.Отправить полученные данные
Я полагаю, что мне нужно объявить переменную с этим типом, но я ни за что на свете не могу понять, как я должен это сделать, и как я могу прочитать ответ, который будет сохранен в этом ответе (драйвер должен ответить тем же сообщением 0x1234).
Не мог бы кто-нибудь дать некоторое представление, пожалуйста?
Спасибо! Йенс
Комментарии:
1. Я не знаю эту библиотеку, но вы должны создать объект этого типа
var resp = new SendReceiveData();
, а затем передать его по ссылке на методmodbus.SendDiagnosis(ref resp, slvadd, data);
2. После того, как вы сделаете звонок
resp
, появится «ответ», означающий, что вызываемый абонент установит свои свойства и поля. По крайней мере, по соглашению, это то, что он должен делать. Однако не думайте, что это означает, что вы должныref
сами использовать параметры. Для этого существуют очень ограниченные варианты использования.3. хорошо, спасибо! Теперь код компилируется правильно. Я не уверен, как я могу получить байты, которые теперь должны быть сохранены
resp
. Я попытался показать их с помощьюMessageBox.Show(Convert.ToString(resp);
, но это буквально отображает «Omrlib. Информационные материалы. ModbusInfo.SendReceiveData», что, вероятно, является следствием . Функция toString.4. Поставьте точку останова после получения ответа и используйте debbuger, чтобы просмотреть его свойства и узнать, в каком из них есть нужные вам данные
5. Или пусть intellisense сделает эту работу)