Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 40

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

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

    По умолчанию

    Выкладывайте проекты — будем смотреть в чём дело.

    По-хорошему закрывать подключение, конечно, надо. И обрабатывать отключение извне тоже.

  2. #12

    По умолчанию

    Я после внесения правок в код скорее всего загружал только изменения, а нужно "Загружать все" - ошибка из-за этого была (только таким образом у меня получилось повторить ошибку).

  3. #13

    По умолчанию

    Цитата Сообщение от greenwod Посмотреть сообщение
    Да, спасибо!

    master.WriteSingleRegister(1, 0, 96)
    1 - адрес слейва
    0 - адрес регистра
    96 - значение


    Продолжаю усложнять себе задачи
    Пытаюсь подать/считать сигнал с входа/выхода.
    Как я понимаю, для этого нужно использовать Writesinglecoil Readcoilstatus
    Но не могу найти адреса для входов/выходов - в инструкции не нашел (у меня ПЛК110-24.60.Р.М).
    Не подскажете как обращатся к входу/выходу ПЛК. Я так понимаю должны быть какая-то таблица "Вход/выход ПЛК" соответствует "Номер бита"?
    greenwod
    можешь выложить проект , интересно как ты справился с задачей
    "Пытаюсь подать/считать сигнал с входа/выхода."
    спасибо
    и еще вопрос: не возникают ли у тебя проблемы как тут http://www.cyberforum.ru/csharp-net/thread388326.html
    , т.е опрос идет исправно, а вот ответы на запросы, происходят только первые 35

  4. #14

    По умолчанию

    Цитата Сообщение от greenwod Посмотреть сообщение
    Да, спасибо!

    master.WriteSingleRegister(1, 0, 96)
    1 - адрес слейва
    0 - адрес регистра
    96 - значение


    Продолжаю усложнять себе задачи
    Пытаюсь подать/считать сигнал с входа/выхода.
    Как я понимаю, для этого нужно использовать Writesinglecoil Readcoilstatus
    Но не могу найти адреса для входов/выходов - в инструкции не нашел (у меня ПЛК110-24.60.Р.М).
    Не подскажете как обращатся к входу/выходу ПЛК. Я так понимаю должны быть какая-то таблица "Вход/выход ПЛК" соответствует "Номер бита"?
    greenwod
    можешь выложить проект , интересно как ты справился с задачей
    "Пытаюсь подать/считать сигнал с входа/выхода."
    спасибо
    и еще вопрос: не возникают ли у тебя проблемы как тут http://www.cyberforum.ru/csharp-net/thread388326.html
    , т.е опрос идет исправно, а вот ответы на запросы, происходят только первые 35

  5. #15

    По умолчанию

    Цитата Сообщение от greenwod Посмотреть сообщение
    Да, спасибо!

    master.WriteSingleRegister(1, 0, 96)
    1 - адрес слейва
    0 - адрес регистра
    96 - значение


    Продолжаю усложнять себе задачи
    Пытаюсь подать/считать сигнал с входа/выхода.
    Как я понимаю, для этого нужно использовать Writesinglecoil Readcoilstatus
    Но не могу найти адреса для входов/выходов - в инструкции не нашел (у меня ПЛК110-24.60.Р.М).
    Не подскажете как обращатся к входу/выходу ПЛК. Я так понимаю должны быть какая-то таблица "Вход/выход ПЛК" соответствует "Номер бита"?
    greenwod
    можешь выложить проект , интересно как ты справился с задачей
    "Пытаюсь подать/считать сигнал с входа/выхода."
    спасибо
    и еще вопрос: не возникают ли у тебя проблемы как тут http://www.cyberforum.ru/csharp-net/thread388326.html
    , т.е опрос идет исправно, а вот ответы на запросы, происходят только первые 35

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

    По умолчанию

    Там неправильно организован приём ответа. Вообще прежде чем писать низкоуровневый обмен, надо запомнить:

    1. что ответ может прийти не сначала;
    2. что ответ может прийти не до конца;
    3. что ответ может разбиться на несколько частей;
    4. что несколько ответов могут прийти разом;
    5. что может прийти вообще не ответ;
    6. что ответ может не прийти;
    7. что ответ может прийти через запрос;
    8. что вместо ответа или вместе с ответом может прийти что угодно даже без запроса.


    Если неохота всё это контролировать и вообще страшно покидать зону комфорта «запрос-ответ», то лучше пользоваться высокоуровневыми проверенными библиотеками а ля NModbus.

  7. #17

    По умолчанию

    Yegor, вы не могли бы подсказать, как мне решить следующую проблему?
    Есть сеть ПЛК63, подключенная к gprs модему Невод. Сам модем настроен на передачу данных на белый айпи у меня дома. Раньше я использовал программное обеспечение геолинка(прозводитель модема), которое эмулировало com-порт из соединения с модемом, и я мог его опрашивать вот таким образом:
    var r = new ModbusSerialMaster(myPort);
    r.ReadHoldingRegisters(10, 4098, 1);
    Теперь же мне нужно осуществлять связь с сетью плк НЕ используя стороннее ПО. Отсюда вопрос - как мне из кода c# в Visual Studio (.NET) связаться со своими ПЛК?
    Последний раз редактировалось fillpackart; 13.05.2016 в 15:02.

  8. #18

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Такой таблицы нет. Вообще говоря слейв, который вы создаёте в ПЛК для связи с ПК, не имеет связей со входами и выходами. Эти связи вам нужно создать самому. По-простому можно в программе ПЛК самому разметить выходы через присваивание типа di10 := slaveRegA.9.

    В боевых проектах мне приходится делать сложнее. Нулевой регистр отвожу на код команды, ещё несколько — на аргументы. Дальше в программе ПЛК пишу интерпретатор вроде[CODE]TYPE CMD: (NOP, ON, OFF); END_TYPE
    подскажите плиз
    slaveRegA.9 откуда берется?
    и нулевой регистр на код команды это как будет?

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

    По умолчанию

    Отсюда вопрос - как мне из кода c# в Visual Studio (.NET) связаться со своими ПЛК?
    Попробуйте создавать мастера через ModbusSerialMaster.CreateRtu(TcpClient client) (либо CreateAscii по ситуации). Тогда обмен будет в формате последовательного порта, но канал останется TCP. Это вместо традиционного ModbusIpMaster.CreateIp, где формат сообщений иной.
    подскажите плиз
    slaveRegA.9 откуда берется?
    и нулевой регистр на код команды это как будет?
    Всё это вы задаёте сами в конфигурации ПЛК. То есть добавляете туда модбас-слейв, добавляете в него регистры, именуете их подходящим образом.

  10. #20

    По умолчанию

    Коллеги, при использовании NModbus4 из NuGet столкнулся с проблемой, когда при пропадании связи (банально выдернут шнур) программа надолго зависала. Как оказалось, необходимо установить свойство ModbusIPMaster.Transport.ReadTimeout в какое-то разумное значение (в мс). По умолчанию там -1. Поставил 500 - работает, при выдергивании шнура исправно выкидывает исключение. Там ещё есть свойство WriteTimeout, тоже его надо установить во что-то приемлемое.
    Проблема не ОВЕН-ориентированная, а NModbus4, но вдруг кому пригодится.

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Похожие темы

  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

Ваши права

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