Страница 405 из 1042 ПерваяПервая ... 305355395403404405406407415455505905 ... ПоследняяПоследняя
Показано с 4,041 по 4,050 из 10414

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

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

    По умолчанию

    Цитата Сообщение от energvk Посмотреть сообщение
    Организовал управление ПЧ с ПЛК160 по RS-485. Обратил внимание, что набор частоты (уставка с ПИД-регулятора) на ПЧ идёт заметными рывками. При этом скорость опроса стояла по умолчанию - 100 мс. Увеличение скорости с 9600 на 19200 эффекта не дало. Снизил время опроса ПЧ до 10 мс стало всё ровно. В связи с этим возник вопрос, это нормально или нет? Мне казалось что 10 раз в секунду более чем адекватная скорость.
    Это не нормально, но это ожидаемо в случае со стандартным опрашивателем. Подробнее — экспортируйте конфигурацию и выкладывайте её сюда.

  2. #4042

    По умолчанию

    Как вариант проверить через библиотеку можно? Экспорт конфигурации в приложении
    Вложение 18582

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

    По умолчанию

    Вооот... На каждый register input (output) module отводится свой 100-миллисекундный интервал (который вы потом поставили на 10). Соответственно, каждый отдельный регистр у вас записывался/считывался не чаще, чем каждые 100 × 6 = 600 мс. И нет, запросы даже по смежным регистрам не группируются — всё отдельными запросами. Это вы ещё легко отделались, т.к. у вас лишь одно устройство на порту. Когда их несколько, то начинается битва за порт. Такова стратегия опроса по умолчанию.

    Что можно сделать помимо библиотеки... Ну, частоту вы уже попробовали повысить. В более сложных сценариях можно воспользоваться модулями ввода/вывода строк, а строки рассматривать как буферы приёма и отправки регистров. Ещё там есть активируемые вручную модули (которые state) — ими тоже можно спланировать опрос по-своему.

  4. #4044

    По умолчанию

    Всё понятно, спасибо большое за разъяснение.

    В более сложных сценариях можно воспользоваться модулями ввода/вывода строк, а строки рассматривать как буферы приёма и отправки регистров.
    Не подскажите чуть подробнее?

  5. #4045
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,838

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Вооот... На каждый register input (output) module отводится свой 100-миллисекундный интервал (который вы потом поставили на 10). Соответственно, каждый отдельный регистр у вас записывался/считывался не чаще, чем каждые 100 × 6 = 600 мс. И нет, запросы даже по смежным регистрам не группируются — всё отдельными запросами. Это вы ещё легко отделались, т.к. у вас лишь одно устройство на порту. Когда их несколько, то начинается битва за порт. Такова стратегия опроса по умолчанию.

    Что можно сделать помимо библиотеки... Ну, частоту вы уже попробовали повысить. В более сложных сценариях можно воспользоваться модулями ввода/вывода строк, а строки рассматривать как буферы приёма и отправки регистров. Ещё там есть активируемые вручную модули (которые state) — ими тоже можно спланировать опрос по-своему.
    Цитата Сообщение от energvk Посмотреть сообщение
    Всё понятно, спасибо большое за разъяснение.
    Не подскажите чуть подробнее?
    Фишка с "можно воспользоваться модулями ввода/вывода строк, а строки рассматривать как буферы приёма и отправки регистров" применима если ареса для регистров идут по порядку. А это не наш случай.
    Самый простой способ
    1. поместить регистры "управляющая команда на ПЧ" и "задание частоты" в отдельные UMD с WorkMode - By value change, т.е. запись в ПЧ будет только при изменении значения регистров в программе.
    2. Все остальные input регистры оставить в третьем UMD для которого оставить WorkMode - By poll time
    Вложение 18584
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

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

    По умолчанию

    Модбас предусматривает групповое чтение регистров, но в Овено-Кодесисе оно реализуется только для чтения в строковый тип.

    Например, надо читать сразу 20 смежных регистров, и часто. Добавляем String input module, в параметрах указываем подходящую функцию (Read Holding Registers), номер первого регистра и сколько надо прочитать в байтах (один регистр — два байта, то есть ставим 40). Подписываем эту строку как-нибудь типа ModbusRawInput. Дальше пользуемся функцией SysMemCpy из библиотеки SysLibMem, чтобы раздербанивать байты этой строки в переменные программы:
    Код:
    SysMemCpy(ADR(T0_Setpoint), ADR(ModbusRawInput) + 0, SIZEOF(T0_Setpoint));
    SysMemCpy(ADR(T1_Setpoint), ADR(ModbusRawInput) + 2, SIZEOF(T1_Setpoint));
    ... и так далее по карте регистров. То есть смысл в том, чтобы взять все регистры одной охапкой с устройства, а уже потом их разобрать.

  7. #4047

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Фишка с "можно воспользоваться модулями ввода/вывода строк, а строки рассматривать как буферы приёма и отправки регистров" применима если ареса для регистров идут по порядку. А это не наш случай.
    Самый простой способ
    1. поместить регистры "управляющая команда на ПЧ" и "задание частоты" в отдельные UMD с WorkMode - By value change, т.е. запись в ПЧ будет только при изменении значения регистров в программе.
    2. Все остальные input регистры оставить в третьем UMD для которого оставить WorkMode - By poll time
    Вложение 18584

    Да, спасибо petera, я так уже и сделал. Единственно в чём сомнения, "текущее частота ПЧ" и "текущий ток ПЧ", мне не требуется получать так часто, вполне устроит и раз в секунду, поэтому я думаю эти два параметра выделить в 4-й блок. Это же правильно? Или будет пересекаться с 3-м блоком?

    И по
    "можно воспользоваться модулями ввода/вывода строк, а строки рассматривать как буферы приёма и отправки регистров" применима если ареса для регистров идут по порядку.
    Это же всё равно через библиотеку только решается, правильно?

  8. #4048
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,838

    По умолчанию

    Цитата Сообщение от energvk Посмотреть сообщение
    Да, спасибо petera, я так уже и сделал. Единственно в чём сомнения, "текущее частота ПЧ" и "текущий ток ПЧ", мне не требуется получать так часто, вполне устроит и раз в секунду, поэтому я думаю эти два параметра выделить в 4-й блок. Это же правильно? Или будет пересекаться с 3-м блоком?
    Пересекаться? Каким образом? Делайте столько UMD, сколько пожелаете и для каждого могут быть свои настройки WorkMode.
    И по
    Это же всё равно через библиотеку только решается, правильно?
    Это делается без библиотек, на стандартной конфигурации, например http://www.owen.ru/forum/showthread....l=1#post141316
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  9. #4049

    По умолчанию

    petera

    Цитата Сообщение от energvk Посмотреть сообщение
    Да, спасибо petera, я так уже и сделал. Единственно в чём сомнения, "текущее частота ПЧ" и "текущий ток ПЧ", мне не требуется получать так часто, вполне устроит и раз в секунду, поэтому я думаю эти два параметра выделить в 4-й блок. Это же правильно? Или будет пересекаться с 3-м блоком?
    Пересекаться? Каким образом? Делайте столько UMD, сколько пожелаете и для каждого могут быть свои настройки WorkMode.
    И по
    Это же всё равно через библиотеку только решается, правильно?
    Это делается без библиотек, на стандартной конфигурации, например http://www.owen.ru/forum/showthread....l=1#post141316

    Сегодня, 10:19
    energvk

    Цитата Сообщение от petera Посмотреть сообщение
    Фишка с "можно воспользоваться модулями ввода/вывода строк, а строки рассматривать как буферы приёма и отправки регистров" применима если ареса для регистров идут по порядку. А это не наш случай.
    Самый простой способ
    1. поместить регистры "управляющая команда на ПЧ" и "задание частоты" в отдельные UMD с WorkMode - By value change, т.е. запись в ПЧ будет только при изменении значения регистров в программе.
    2. Все остальные input регистры оставить в третьем UMD для которого оставить WorkMode - By poll time
    Вложение 18584

    Да, спасибо petera, я так уже и сделал. Единственно в чём сомнения, "текущее частота ПЧ" и "текущий ток ПЧ", мне не требуется получать так часто, вполне устроит и раз в секунду, поэтому я думаю эти два параметра выделить в 4-й блок. Это же правильно? Или будет пересекаться с 3-м блоком?

    И по
    "можно воспользоваться модулями ввода/вывода строк, а строки рассматривать как буферы приёма и отправки регистров" применима если ареса для регистров идут по порядку.
    Это же всё равно через библиотеку только решается, правильно?

    Сегодня, 10:14
    Yegor

    Модбас предусматривает групповое чтение регистров, но в Овено-Кодесисе оно реализуется только для чтения в строковый тип.

    Например, надо читать сразу 20 смежных регистров, и часто. Добавляем String input module, в параметрах указываем подходящую функцию (Read Holding Registers), номер первого регистра и сколько надо прочитать в байтах (один регистр — два байта, то есть ставим 40). Подписываем эту строку как-нибудь типа ModbusRawInput. Дальше пользуемся функцией SysMemCpy из библиотеки SysLibMem, чтобы раздербанивать байты этой строки в переменные программы:
    Код:

    SysMemCpy(ADR(T0_Setpoint), ADR(ModbusRawInput) + 0, SIZEOF(T0_Setpoint));
    SysMemCpy(ADR(T1_Setpoint), ADR(ModbusRawInput) + 2, SIZEOF(T1_Setpoint));

    ... и так далее по карте регистров. То есть смысл в том, чтобы взять все регистры одной охапкой с устройства, а уже потом их разобрать.
    Yegor и petera большое спасибо за подробные и понятные разъяснения.

  10. #4050

    По умолчанию

    Всем привет! Учу по книжке) Подскажите пожалуйста куда вписывать это выражение что ниже, чтобы вызвать ресет для функционального блока????? ЗАРАНЕЕ БЛАГОДАРЕН!
    Выражение:
    Inst.Reset(in:= FALSE);
    Erg:= Inst.out;

    Ф-ний блок:
    FUNCTION_BLOCK Counter
    VAR_INPUT
    in:BOOL;
    END_VAR
    VAR_OUTPUT
    out:INT;
    END_VAR
    --------------------------
    IF in THEN
    out:=out+1;
    ELSE
    out:=out-1;
    END_IF

Страница 405 из 1042 ПерваяПервая ... 305355395403404405406407415455505905 ... ПоследняяПоследняя

Метки этой темы

Ваши права

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