Страница 12 из 13 ПерваяПервая ... 210111213 ПоследняяПоследняя
Показано с 111 по 120 из 130

Тема: Универсальный диспетчер для Modbus.lib

  1. #111

    По умолчанию

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    Т.е., предположительно, проблема в некорректном вызове функций из библиотеки Modbus.lib.
    Ошибки в коде программы нет, думаю есть проблема с функцией 04 в данной библиотеке в совокупности с ПЛК110 М02. Вот код получения данных этого модуля:

    IF Mdl.Step = 1 THEN
    Mdl.pDisp^.ReadInpRegs(Enable := NOT Mdl.pDisp^.ReadInpRegs.Read,
    Mode := MB_RTU,
    DevAddr := Mdl.Base.Adress,
    FirstAddr := StartRegister,
    Quantity:=RegisterCount, (*количество регистров*)
    ComHandle := Mdl.pDisp^.Settings.Port,
    TimeOut := Mdl.Base.TimeOut,
    Buffer:= Mdl.pDisp^.ReciveBuffer);
    IF Mdl.pDisp^.ReadInpRegs.Complete THEN
    tmpReadError :=Mdl.pDisp^.ReadInpRegs.Exception;
    IF tmpReadError =0 THEN
    Mdl.reAI:=Mdl.pDisp^.ReciveBuffer[1]+Mdl.pDisp^.ReciveBuffer[0]*256;
    Mdl.Step:=Mdl.Step +1;
    ELSE
    fcModuleAddAttempt(MdlBase := Mdl.Base);
    IF Mdl.Base.CurrentAttempt > Mdl.Base.MaxAttempts THEN
    Mdl.Step := CompleteStep;
    END_IF
    END_IF
    END_IF
    END_IF
    Жаль. табуляция не сохраняется в сообщении

  2. #112

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    В
    Если предположить существование этой дичи - то это не проблема диспетчера. И не проблема ПЛК. Это сами слейвы - полное гавно. Это стоп-кран у каждого кресла в самолете. Выкиньте эти слейвы в помойку.
    Это не новый проект, эти устройства работают в сети уже 7 лет. Причина того,что начались проблемы - это выход из строя ПЛК фирмы Insyte, после чего начались попытки пересадить сетку на ПЛК Овен. Почему я их должен выбрасывать? Отработав без проблем 7 лет с другим ПЛК, и заменив его на новый ПЛК Овен они начали глючить? Сомневаюсь. Больше похоже что глючит новый ПЛК и его надо, как Вы выражаетесь - "выбосить это полное гавно в помойку"

    Или Вы тоже напишите, что "у Всех не глючит, а у Вас глючит..." Да форум полный сообщений о той или иной проблеме Овна и решения этих проблем через различные костыли. Я надеялся, что подняв эту тему кто подскажет как решить данную проблему или в каком направлении копать, а выбросить "полное говно" я всегда успею. Кстати, в переходный период сеть ещё работала от Scada, установленной на компе и ничего не глючило и адреса не слетали. Так что делайте вывод про ПЛК Овен или Овно...
    Последний раз редактировалось Sergeba; 05.03.2020 в 01:26.

  3. #113
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Цитата Сообщение от Sergeba Посмотреть сообщение
    Это не новый проект, эти устройства работают в сети уже 7 лет. Причина того,что начались проблемы - это выход из строя ПЛК фирмы Insyte, после чего начались попытки пересадить сетку на ПЛК Овен. Почему я их должен выбрасывать? Отработав без проблем 7 лет с другим ПЛК, и заменив его на новый ПЛК Овен они начали глючить? Сомневаюсь. Больше похоже что глючит новый ПЛК и его надо, как Вы выражаетесь - "выбосить это полное гавно в помойку"

    Или Вы тоже напишите, что "у Всех не глючит, а у Вас глючит..." Да форум полный сообщений о той или иной проблеме Овна и решения этих проблем через различные костыли. Я надеялся, что подняв эту тему кто подскажет как решить данную проблему или в каком направлении копать, а выбросить "полное говно" я всегда успею. Кстати, в переходный период сеть ещё работала от Scada, установленной на компе и ничего не глючило и адреса не слетали. Так что делайте вывод про ПЛК Овен или Овно...
    Попробуйте, использовать функции из библиотеки Modbus не через диспетчер, а в лоб.
    Сохранится ли тогда проблема со сменой адресов?
    Нужно все же удалять все лишнее, чтобы найти проблему.

  4. #114

    По умолчанию

    Использовал диспетчер на ПЛК160[M02]. Понравилось. (Потому что.. см. nickname)


    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    Настройка порта происходит на шаге dispOpeningPort в диспетчере, на который (шаг) мы уже более не возвращаемся, побывав там однажды. Если опрашивать модули на разных скоростях, то соответственно нужно, повторно настраивать порт на другую скорость.
    Одним словом, такая возможность не предусмотрена в текущей реализации.
    Реализовал изменение свойств порта (скорость, стоп-биты, четность) в диспетчере и параметров опроса устройств (период опроса, таймаут).
    Свойства меняются с панели СП310, но это непринципиально.

    Изменения в коде несложные, если интересно, могу поделиться.

  5. #115

    По умолчанию

    Здравствуйте форумчане. есть у кого данная библиотека GCCommon.lib . "Гугл в помощь" не помог

  6. #116
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    980

    По умолчанию

    Цитата Сообщение от mega2411 Посмотреть сообщение
    Здравствуйте форумчане. есть у кого данная библиотека GCCommon.lib . "Гугл в помощь" не помог
    Она же есть в архиве GCModbus.rar в первом сообщении.

    * GC - GiproCement (Гипроцемент)

  7. #117

    По умолчанию

    Надеюсь, тема, не померла) Проект - великолепный! Не хватает немного воображения на "нестандартные пакеты". В частности, бывает двухбайтовый пакет, у которого может быть первый бит пустой, во втором бите лежать одни данные, другие данные могут лежать сразу во втором и третьем одновременно, потом опять пустота... и тд. Не вполне понимаю, как проще обрабатывать такие пакеты (простите тупого), причем, на каждое устройство может быть по 8-9 таких пакетов "вразнобой", то есть, каждый индивидуален. Я так понимаю, придется запрашивать все данные на каждое устройство по очереди или есть некий более простой способ обработки определенного бита (пары, тройки склеенных битов)?..
    В качестве примера, регистр из модуля управления кондиционерами дайкин

    Регистр номер 32001. Структура

    бит 15 - ---
    бит 12-14 - fan speed
    бит 11 - ---
    бит 8-10 - fan direction
    бит 7 - thermo status
    бит 6 - heater status
    бит 5 - fan status
    бит 4 - ---
    бит 3 - ---
    бит 2 - forced off status
    бит 1 - ---
    бит 0 - On/off status

    Немного пугает вот это вот) и это не шаблонный регистр, они почти все разные..
    Последний раз редактировалось Easy_Enemy; 03.10.2023 в 23:42. Причина: дополнение

  8. #118
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,586

    По умолчанию

    а напрямую к дайкину подключиться не?

    а что вам тут непонятно? старшим байтов вперед, читаете весь регистр, обозвав его СЛОВОМ (WORD) и дав ему имя BitDaikin, потом BitDaikin.0, BitDaikin.3 и так далее.

    Если надо сразу три бита, то делаете маску типа BitDaikin & 0x7000 (пример для 12-14 битов) сдвиг на сколько там 12 кажется вправо и получите число от 0 до 7 ваш фан спид.
    Собственно синтаксис смотрите, все операции присутствуют в CodeSys

  9. #119

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    а напрямую к дайкину подключиться не?
    Напрямую - не. Есть шлюз из системы дайкин (DIII-net) в модбас рту. Он в себя собирает все данные со всех кондеев и руляет ими. Сами кондеи не знают ничего, кроме д3-нет (старые модельки, хоть и промышленные).
    а что вам тут непонятно? старшим байтов вперед, читаете весь регистр, обозвав его СЛОВОМ (WORD) и дав ему имя BitDaikin, потом BitDaikin.0, BitDaikin.3 и так далее.
    Цитата Сообщение от melky Посмотреть сообщение
    Если надо сразу три бита, то делаете маску типа BitDaikin & 0x7000 (пример для 12-14 битов) сдвиг на сколько там 12 кажется вправо и получите число от 0 до 7 ваш фан спид.
    Собственно синтаксис смотрите, все операции присутствуют в CodeSys
    Вот это не вполне понятно было. То есть мы просто "клеим" (стыкуем) сколько нам нужно бит вместе? Надеялся, что, все же, есть некое средство "выемки" конкретного бита из пакета (на примере какого-нить MasterOPC). Я-то напишу все это ручками, да не всегда хочется изобретать колесо..

    Но спасибо за просвещение, уже голова не работает, много систем, много геморроя..

  10. #120

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    Если надо сразу три бита, то делаете маску типа BitDaikin & 0x7000 (пример для 12-14 битов) сдвиг на сколько там 12 кажется вправо и получите число от 0 до 7 ваш фан спид.
    Собственно синтаксис смотрите, все операции присутствуют в CodeSys
    Изучил тему с работой с битами, и, наконец, смогу правильно сформировать вопрос)

    Почему настолько целесообразно работать с масками и смещениями (поглядел в модули других участников, что, собственно и помогло в написании задач под себя, но, вижу, что маски время от времени мелькают), ведь есть такой, вполне себе симпатичный инструмент, как EXTRACT? Ведь после получения всех данных, в случае, когда регистр набит кучей разнокалиберной информации, и она нам нужна (пусть не вся, но более 1-2) мы же уже заранее знаем, к какому номеру бита нам обратиться и, если, данные хранятся в 2+ битах, то мы просто клеим их в некоторую переменную. Или это слишком ресурсоемко, в отличие от обработки масками? Возможно это будет еще кому-то полезно при написании своих модулей

Страница 12 из 13 ПерваяПервая ... 210111213 ПоследняяПоследняя

Похожие темы

  1. Универсальный блок питания ПР114
    от sea в разделе Программируемые реле
    Ответов: 12
    Последнее сообщение: 13.10.2013, 22:56
  2. PCLogger - универсальный логгер для CDS v3
    от Mikhail Shvetsov в разделе ПЛК3хх
    Ответов: 0
    Последнее сообщение: 23.11.2012, 14:39
  3. Универсальный Modbus Сервер Инсат и 200 контроллеров ПЛК-100
    от lomtik в разделе Сетевые технологии
    Ответов: 17
    Последнее сообщение: 08.11.2012, 23:42
  4. Универсальный конфигурируемый регулятор
    от ОООСА в разделе Разработки
    Ответов: 32
    Последнее сообщение: 09.12.2009, 22:12
  5. Ответов: 7
    Последнее сообщение: 04.05.2009, 10:42

Ваши права

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