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

Тема: Пример: Убыстрение опроса модулей Мх110 в CodeSys v2.3 через модули STRING[]

  1. #21
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,224

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    но у меня через конфигурацию, всё равно работает лучше. А далее, читайте выше.
    но не видя кода подсказать не получится, почему конфигурация вдруг работает быстрее
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  2. #22

    По умолчанию

    Валенок, про бибку ты ПРАВ во всём!
    Но, чёрт побери, у меня пока специфика такая:
    а) Проект на ПЛК110 - там тупо светом пощёлкать, и всё. Поэтому там конфигурация пока удобнее.
    б) Проект на СПК (CodeSys v3) - вот таааам да! Там у меня всё через бибки работает, чтобы быстрее было и IO побитово удобно было разбирать.
    В дальнем проекте сделать себе тулзу, в которую можно будет набивать нужные каналы, устройства, переменные и их биты - а она будет генерировать код для их опроса и разбора данных.
    Пока интерфейс написал только, так... балуюсь. Это ОЧЕНЬ дальний проект. Возможно, сделаю шаблоны генерации кода, чтобы под разные либы было.
    PLC-IO-Tests.gif
    Последний раз редактировалось Cs-Cs; 21.07.2021 в 18:01.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  3. #23

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Как по мне, то код должен быть простым и понятным, даже для новичков. Как вариант, уже предлагал считывать все параметры МВ 8А не байтами, а массивом WORD, что для многих будет проще, так как почти все параметры и читаются в этом виде и не собирать их из байтов. Как известно все регистры занимают 96 байт, разбиваем их пополам, для удобства (не надо высчитывать номера всех регистров, а только половины). В конфигурацию добавляем два String и присваиваем им имена Str14 с 0 адреса, длиной 48 байт и Str58 с 24 адреса и тоже 48 байт.Вложение 56110
    А что бы уйти от ручной привязки, по команде AT %QB..., можно объявить указатель на массив WORD по 24 регистра (48 байт) и сделать это в глобальных, чтобы был доступ из любого ФБ. Ну и конечно, тут же объявим нужные нам переменные. Целочисленные без смещения точки, объявляем как INT, чтобы не потерять знак.
    Код:
    VAR_GLOBAL
    	w_1  : POINTER TO ARRAY [0..23] OF WORD;   (* Указатели на массив WORD   *)
    	w_2  : POINTER TO ARRAY [0..23] OF WORD;
    
    	w1,w2,w3,w4,w5,w6,w7,w8 : INT ;     (* Целочисленное значение без смещения  INT   *)
    	d1,d2,d3,d4,d5,d6,d7,d8 : WORD;     (* Смещение точки WORD   *)
    	r1,r2,r3,r4,r5,r6,r7,r8 : REAL;     (*Значения  REAL   *)
            r_1 : REAL;  
    END_VAR
    Далее создаём ФБ, например "Opros_MVA", в котором будет только присвоение начальных адресов массивов, ну и если понадобиться присвоение нужных нам переменных.
    Код:
    FUNCTION_BLOCK Opros_MVA
    VAR
    END_VAR
    ____________________________________________________________________________________________________________
    w_1:=ADR(Str14);     (*Начальный адрес  в массиве  WORD *)
    w_2:=ADR(Str58);
    Осталось только объявить в PLC_PRG и в его теле, наш функциональный блок (ФБ). Добавил ещё в примечании, все нужные нам регистры МВА8, для наглядности, пример вызова некоторых переменных из массивов и расчёт REAL из целочисленного значения.
    Код:
    PROGRAM PLC_PRG
    VAR
    (* Модули МВА_8А  нужны  регистры -  0,6,12,18,24,30,36,42 -  положение десятичной точки,  1,7,13,19,25,31,37,43  - измеренное целое значение без смещения, 
     2,8,14,20,26,32,38,44 - статус канала,           3,9,15,21,27,33,39,45 -   циклическое время,         4-5,  10-11 , 16-17,  22-23,  28-29,  34-35,   40-41,   46-47  -  значение REAL  *)
    
    	Opros_MVA:Opros_MVA;
    
    END_VAR
    _____________________________________________
    
    Opros_MVA();
    
    
     (* Смещение точки WORD   *)
    d1:=w_1^[0];
    
       (* Целочисленное значение без смещения  INT   *)
    w1:=w_1^[1];
    
    (* Расчёт REAL   из целочисленного значения   *)
    r_1:=w1/10.0;
    
    (* Склейка    2 _ WORD для получения REAL     *)
    TWO_WORD_TO_REAL(wIn1:=w_1^[5] , wIn2:=w_1^[4] , rOut=>r1 );
    Запускаем программу и видим такую простыню из значений в глобальных, далее каждый выберет, то что ему нужно. Вложение 56111
    Ниже выложил пример проекта. Если кому то будет мало одного знака после запятой, добавил ещё ФБ для склейки REAL из двух WORD и пример его использования. Кстати таким же образом можно считать и массивы из REAL, правда WORD будут перепутаны и остальные данные потеряем. Проект написан для ПЛК 154УМ, при желании можно поменять на любой ПЛК, достаточно добавить в конфиг. UMD с вашим адресом МВА и два String.
    Весь код без объявления переменных и примера вызова занял 4 строки!!! Это конечно, не такой красивый код, как у Валенка, но простой и понятный.
    Всем привет, я тут новенький и только познаю CDS2.3, столкнулся с проблемой медленного опроса АИшек. У меня по проекту на порту висит 24 АИшных модуля МВ-110-224-8А. Ваш вариант мне показался более простым в реализации, но пока не пойму как лучше мне сделать так, чтобы опрашивать все модули этим способом.

  4. #24

    По умолчанию

    Цитата Сообщение от Alekser91 Посмотреть сообщение
    Всем привет, я тут новенький и только познаю CDS2.3, столкнулся с проблемой медленного опроса АИшек. У меня по проекту на порту висит 24 АИшных модуля МВ-110-224-8А. Ваш вариант мне показался более простым в реализации, но пока не пойму как лучше мне сделать так, чтобы опрашивать все модули этим способом.
    Ну во первых, вам по любому придётся сделать 24 UMD, для каждого модуля МВ8А со своим адресом, и добавить в каждый по два String. Далее можно тупо размножить указатели и адреса.

    Лучше конечно сделать общий массив Mv8 : ARRAY[1..24] OF Opros_MVA; и использовать цикл FOR..... TO, для перебора модулей. Тогда адреса модулей должны быть с одинаковым шагом, например с 16 по 39 адрес (шаг 1).
    Но вам придётся подумать, как задавать начальные адреса для каждого String в цикле.
    Кстати какой ПЛК используете и какие конкретно вам нужны данные от модулей, целочисленные без смещения или REAL или ещё какие то ?
    Последний раз редактировалось kondor3000; 08.08.2021 в 19:19.

  5. #25

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Ну во первых, вам по любому придётся сделать 24 UMD, для каждого модуля МВ8А со своим адресом, и добавить в каждый по два String. Далее можно тупо размножить указатели и адреса.

    Лучше конечно сделать общий массив Mv8 : ARRAY[1..24] OF Opros_MVA; и использовать цикл FOR..... TO, для перебора модулей. Тогда адреса модулей должны быть с одинаковым шагом, например с 16 по 39 адрес (шаг 1).
    Но вам придётся подумать, как задавать начальные адреса для каждого String в цикле.
    Кстати какой ПЛК используете и какие конкретно вам нужны данные от модулей, целочисленные без смещения или REAL или ещё какие то ?
    24 UMD создал, стринги добавил и назначил им имена Str1_1, Str1_2 и т д. В пятницу я попробовал создать ФБ Opros_MVA1 (2,3 и т д) и далее к r1(2..8) или rOut привязать тэги датчиков, но стало понятно что так ничего не выйдет.
    ПЛК110-30(М2), забираю с модулей данные с датчиков 4..20мА в формате REAL.

  6. #26

    По умолчанию

    Цитата Сообщение от Alekser91 Посмотреть сообщение
    24 UMD создал, стринги добавил и назначил им имена Str1_1, Str1_2 и т д. В пятницу я попробовал создать ФБ Opros_MVA1 (2,3 и т д) и далее к r1(2..8) или rOut привязать тэги датчиков, но стало понятно что так ничего не выйдет.
    ПЛК110-30(М2), забираю с модулей данные с датчиков 4..20мА в формате REAL.
    Мне больше 2 модулей пока не приходилось подключать, они даже через конфигурацию нормально работают. С вашими 24 модулями идеально бы подошёл вариант Валенка.
    Просите его , чтобы выложил свой вариант.

  7. #27

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Мне больше 2 модулей пока не приходилось подключать, они даже через конфигурацию нормально работают. С вашими 24 модулями идеально бы подошёл вариант Валенка.
    Просите его , чтобы выложил свой вариант.
    Он ответил что стрингами не лучший способ опрашивать такое большое количество.
    Есть ли у кого-нибудь живой пример использования библиотек? То что выложено на сайте мне кажется непонятным.

  8. #28
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,656

    По умолчанию

    Цитата Сообщение от Alekser91 Посмотреть сообщение
    Он ответил что стрингами не лучший способ опрашивать такое большое количество.
    Есть ли у кого-нибудь живой пример использования библиотек? То что выложено на сайте мне кажется непонятным.
    Кажется непонятным что??? Вообще все, или что-то конкретно непонятно? Если что-то конкретно непонятно то создавайте тему отдельную и там непонятность предъявляйте конкретно, и вот тогдааа непонятность может быть рассосется.
    А то:- Страшно, очень страшно, мы не знаем, что это такое! Если бы мы знали что это такое, но мы не знаем, что это такое...

  9. #29

    По умолчанию

    Цитата Сообщение от Alekser91 Посмотреть сообщение
    Он ответил что стрингами не лучший способ опрашивать такое большое количество.
    Есть ли у кого-нибудь живой пример использования библиотек? То что выложено на сайте мне кажется непонятным.
    Вы вот 4 день писаниной занимаетесь, а я уже протестировал вариант через конфигурацию, добавил 24 UMD (адреса с 16 по 39), в каждый добавил по 8 RealInput с нужными адресами регистров. Правда у меня есть всего 2 модуля 8А, (адреса 16 и 32) их и подключил и вариант Валенка.
    Конечно 2 модуля это не 24, но запросы идут на все 24 блока. И результаты поражают.
    Для считывания только параметров REAL, конфигурации, в среднем требуется от 30 до 40 сек (жду пока считаются все 16 параметров моих модулей). Вариант Валенка считывает вообще всё, то есть 40*24=960 параметров за 1-2 сек.

    В обоих случаях добавлены все 24 блока в конфигурацию, в первом по 8 Real, во втором по 2 String, то есть запросы отправляются всем 24 модулям. При чём у меня старый ПЛК154 и что бы разгрузить процессор, пришлось увеличить время цикла ПЛК до 15 мс. Новый ПЛК 110-30 V2, думаю справится и за 5 мс.
    Последний раз редактировалось kondor3000; 29.11.2021 в 15:58.

  10. #30
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,656

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Не надо меня позорить, на 154-ом думаю уложусь в 0.6..0.7 сек на 24 модуля
    Ну запрос-ответ где-то 20ms*24:=480ms, плюс паузы между запросами 10ms*24=240ms, таки да в 720ms можно уложиться.

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

Похожие темы

  1. модули ввода/выводв Мх110 [М01]
    от yurya в разделе Мх110
    Ответов: 4
    Последнее сообщение: 06.07.2019, 14:03
  2. Модули МХ110 для CODESYS 3.5
    от Осинский Алексей в разделе СПК2хх
    Ответов: 429
    Последнее сообщение: 13.12.2017, 13:53
  3. Шаблоны модулей МХ110 для CODESYS 3.5
    от Александр Приходько в разделе СПК2хх
    Ответов: 91
    Последнее сообщение: 24.04.2015, 18:29
  4. Ответов: 4
    Последнее сообщение: 10.02.2015, 16:12
  5. Ответов: 7
    Последнее сообщение: 30.11.2010, 10:02

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

Ваши права

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