Страница 3 из 7 ПерваяПервая 12345 ... ПоследняяПоследняя
Показано с 21 по 30 из 62

Тема: Modbus-мастер в Visual Studio (.NET)

  1. #21
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    А я вот узнал, что NModbus не умеет делать несколько слейвов на одном TCP-канале. Печаль-беда.

  2. #22

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    А я вот узнал, что NModbus не умеет делать несколько слейвов на одном TCP-канале. Печаль-беда.
    А ещё по ModbusIPMaster нельзя сказать, в каком состоянии соединение, нет никаких свойств, можно только попробовать сделать запрос и поймать исключение.

  3. #23
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Что именно вы подразумеваете? Как такие свойства по-вашему должны выглядеть и работать?

  4. #24

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Что именно вы подразумеваете? Как такие свойства по-вашему должны выглядеть и работать?
    Ну хотя бы на чтение TcpClient. Конечно, его можно сначала создать и передать в конструктор его переменную. Но логичнее было бы получать из ModbusIPMaster. Зачем нужно? Чтобы без исключительной ситуации отлавливать отвалившееся соединение хотя бы.

  5. #25
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Есть подозрение, что вы что-то не так делаете. Tell, don't ask. По принципу инкапсуляции, вас не должно беспокоить состояние мастера и уж тем более свойства его транспорта. Вы просто должны быть готовы к тому, что мастер выдаст исключение. Отлавливать исключения проще, чем поддерживать чужое состояние (stateful vs stateless).

  6. #26

    По умолчанию

    Цитата Сообщение от voale Посмотреть сообщение
    greenwod
    можешь выложить проект , интересно как ты справился с задачей
    "Пытаюсь подать/считать сигнал с входа/выхода."
    спасибо
    и еще вопрос: не возникают ли у тебя проблемы как тут http://www.cyberforum.ru/csharp-net/thread388326.html
    , т.е опрос идет исправно, а вот ответы на запросы, происходят только первые 35
    Здравствуйте!
    Я еще не успел написать что-то, что не стыдно выложить на форум

    Вы присваиваете имя входу ПЛК (например in1).
    Создаете в MODBUS (slave) регистр (например reg0).

    В коде ПЛК присваиваете в нужный бит регистра значение своего входа:
    reg0.2:=in1; (где .2 номер бита регистра).
    Важно помнить, что сигнал может быть коротким и Ваша программа может не успеть его считать - я делал дополнительный регистр в котором контролировал сигнал.

    В коде программы считываете значение регистра:
    bool[] coilstatus = master.ReadCoils(1 , Bit , 1) [0]
    Где Bit – адрес бита (в нашем случае будет 2).

    Насчет проблем с первыми 35 запросами не стыкался. Используйте Nmodbus как описано вначале данной темы и проблем быть не должно.
    Последний раз редактировалось Kish; 24.05.2019 в 14:29.

  7. #27

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    А я вот узнал, что NModbus не умеет делать несколько слейвов на одном TCP-канале. Печаль-беда.
    Странно, мне казалось достаточно изменить адрес слейва в параметрах и в запросе в коде просто указывать нужный слейв (При обращении к слейву первый параметр в команде вроде-как отвечает за адрес слейва).
    Но я на практике не проверял (сейчас нет под рукой ПЛК).
    Кстати, а подключатся из кода к эмулятору ПЛК запущенному в Codesys нет возможности?
    Последний раз редактировалось greenwod; 30.05.2016 в 19:18.

  8. #28

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Есть подозрение, что вы что-то не так делаете. Tell, don't ask. По принципу инкапсуляции, вас не должно беспокоить состояние мастера и уж тем более свойства его транспорта. Вы просто должны быть готовы к тому, что мастер выдаст исключение. Отлавливать исключения проще, чем поддерживать чужое состояние (stateful vs stateless).
    Да я то всё делаю так, ловлю исключения. Но ох уж эти мне принципы... На мой взгляд, гораздо проще и безопаснее перед действием проверить, а имеет смысл его совершать? Люди вот под кирпич не ездют, не желая опытным путем проверять, стена там есть или всё-таки нет

  9. #29

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Попробуйте создавать мастера через ModbusSerialMaster.CreateRtu(TcpClient client) (либо CreateAscii по ситуации). Тогда обмен будет в формате последовательного порта, но канал останется TCP. Это вместо традиционного ModbusIpMaster.CreateIp, где формат сообщений иной.
    А как настроить TcpClient? Модем передает данные на фиксированный айпи, сам модем имеет айди, так каким образом я из кода указываю, с каким модемом я соединяюсь?

  10. #30
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Если данные передаются по инициативе стороны модема и белый айпишник тут, а не там, то о каком мастере на принимающей стороне может идти речь? Делайте наоборот слейв тогда.

Страница 3 из 7 ПерваяПервая 12345 ... ПоследняяПоследняя

Похожие темы

  1. Помогите с ActiveX в Microsoft Visual Studio 2005
    от Alex_31 в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 06.10.2013, 09:55
  2. ModBUS TCP ПЛК100(мастер) и Lectus(слейв)
    от GSK в разделе Сетевые технологии
    Ответов: 4
    Последнее сообщение: 14.09.2012, 11:35
  3. Modbus Universal MasterOPC Server и ПЛК мастер
    от smk1635 в разделе Master SCADA 3
    Ответов: 7
    Последнее сообщение: 13.09.2011, 22:22
  4. СМИ1, modbus-rtu, мастер. Команда 4. КАК?
    от Matysik в разделе Панели оператора (HMI)
    Ответов: 2
    Последнее сообщение: 26.05.2011, 15:32

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •