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

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

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

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Sergey666 Опять высказывания в духе "у вас изо рта щами пахнет" © Алекс Экслер.
    В смысле, что в них звучит адский апломб, и унижение всех вокруг.
    Да вот ничего подобного...
    "Простите, Голубчик, я не хотел вас обидеть." к/ф "Собачье сердце.

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    А вот зачем мне библиотеки, если у меня в проекте шесть модулей дискретного IO, где надо читать только маску входов или маску выходов (один элемент в конфигурации ПЛК всего), и один модуль AI? Ради одного модуля тащить библиотеку?
    А если проект у меня совсем примитивный, которому библиотек не требуется ВООБЩЕ? Тогда у меня библиотека появится ради опроса модулей?
    Нет уж! Мести всех под одного и унижать - это плохая стратегия. Прежде чем всех судить, надо понять людей и то, почему и для чего они так делают.
    Да делайте что хотите. Только в чем унижение состоит? В том, что требуется использование мозга? Это сейчас унижение?
    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Про переклеивать строку. Вот тут я объясню, почему нельзя. Потому что конец строки для функций работы со строками типа LEN, CONCAT в CodeSys, как в СИ - определяется по первому нулевому байту. То есть "Sergey66616#00ляляляля" - конец строки будет на нулевом байте.
    Если этот нулевой байт окажется в начале строки, то строковые функции увидят пустую строку, даже если там есть данные.
    Да я понял свой косяк, согласен, ляпнул, не подумавши, т.к опыта мало в подобных извратах...ну да ладно, каждому свое.
    Последний раз редактировалось Алексеев Савр; 21.07.2021 в 16:17.

  2. #12

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    kondor3000 Пасибо!
    Да, я про DWORD не догадался. Сработала инерция мышления - что раз у нас массив байт, то работать будем с байтами.
    А регистры же DWORD, точно! =)
    Только один регистр это WORD, а не DWORD.
    Последний раз редактировалось kondor3000; 21.07.2021 в 11:55.

  3. #13

    По умолчанию

    Цитата Сообщение от Sergey666 Посмотреть сообщение
    Вот вместо того чтобы освоить работу с библиотеками, ради фейковых упрощений, люди идут на реальное усложнение проекта и непрозрачную его работу. Как это объяснить я не понимаю, те, кто на LD и СFC сидят это тоже не освоят
    Могу ответить только за себя. Начинал с CFC потому, что мне это ближе всего. Но первый же проект, написал уже с применением ST, так как требовалась разветвлённая структурная логика. И лепить её квадратиками на весь доступный лист, как некоторые, мне даже в голову не пришло). Позже начал осваивать библиотеки обмена. Три дня пытал Валенка как синхронизировать чтение и запись.
    В итоге библиотеки освоил, перевёл свой проект на библиотеки, но такого же быстродействия и хорошей синхронизации так и не добился. В проекте связь СП310 и ПЛК, порядка 150 переменных, половина из них REAL, битовые маски и реальное время пересчитывается в ПЛК и предаётся в виде таймера на СП. Таймер может запнуться, пропустить секунду и т. д.
    Так вот обмен через конфигурацию с применением String, работает быстрее и стабильнее. Нет даже намёка на пропуски, счёт идет плавно как обычные часы. И к чему я это всё пишу. Толковой помощи я практически не получил ни разу. Только Petera помогал, Валенок чутка помог, и то только намёками. А про примеры на форуме я вообще молчу, это что-то(((
    Последний раз редактировалось kondor3000; 21.07.2021 в 13:03.

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

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Могу ответить только за себя. Начинал с CFC потому, что мне это ближе всего. Но первый же проект, написал уже с применением ST, так как требовалась разветвлённая структурная логика. И лепить её квадратиками на весь доступный лист, как некоторые, мне даже в голову не пришло). Позже начал осваивать библиотеки обмена. Три дня пытал Валенка как синхронизировать чтение и запись.
    В итоге библиотеки освоил, перевёл свой проект на библиотеки, но такого же быстродействия и хорошей синхронизации так и не добился. В проекте связь СП310 и ПЛК, порядка 150 переменных, половина из них REAL, битовые маски и реальное время пересчитывается в ПЛК и предаётся в виде таймера на СП. Таймер может запнуться, пропустить секунду и т. д.
    Так вот обмен через конфигурацию с применением String, работает быстрее и стабильнее. Нет даже намёка на пропуски, счёт идет плавно как обычные часы. И к чемуя это всё пишу. Толковой помощи я практически не получил ни разу. Только Petera помогал, Валенок чутка помог, и то только намёками. А про примеры на форуме я вообще молчу, это что то(((
    Так примеры в описании библиотек Modbus.lib в документации на сайте!!!??? При чем форум?
    И я не вижу связи между таймером в ПЛК, опросом модбас устройств и обменом с СП310, что вы собрались синхронизировать, если сам протокол Модбас подразумевает асинхронность?

  5. #15

    По умолчанию

    Цитата Сообщение от Sergey666 Посмотреть сообщение
    Так примеры в описании библиотек Modbus.lib в документации на сайте!!!??? При чем форум?
    И я не вижу связи между таймером в ПЛК, опросом модбас устройств и обменом с СП310, что вы собрались синхронизировать, если сам протокол Модбас подразумевает асинхронность?
    Вот примеры с форума
    06. Пример реализации обмена через библиотеки Modbus.Lib и OwenNet.Lib. Скачать (151 Кб)
    https://owen.ru/forum/showthread.php?t=13588

    Вот с сайта
    10 Обмен через библиотеки Modbus и OwenNet Скачать
    https://owen.ru/product/codesys_v2/example_program

    Примеры одни и те же. Найдите, как говориться 10 отличий! И кстати, пример в описании тот же самый, только на чтение!!! Модбас.jpg
    Теперь дальше. Нужно сделать обмен через библиотеку Modbus.lib между СП310 и ПЛК. Допустим 2 Битовые маски, 10 WORD, 10 REAL. В примере есть отдельно чтение Модбас на ST и отдельно запись. Теперь их надо совместить в одном проекте. С этим я уже разобрался, но запись в панель работает не стабильно. Как это сделать, что бы не тормозила запись в панель?
    Вложения Вложения
    Последний раз редактировалось kondor3000; 21.07.2021 в 15:42.

  6. #16

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Вы сейчас загрузили архив того что и так на сайте есть? А какой в этом смысл? Почему не создали тему чтоб Вам помогли?
    Уже писал, что всё было в теме для новичков, которую удачно снесли. и восстановили только на половину. Я там три дня пытался получить не решение, а только подсказку. И так и не получил ничего, кроме пинка в нужную сторону)).
    Как обычно, разобрался сам с обменом через библиотеку Modbus.lib, но у меня через конфигурацию, всё равно работает лучше. А далее, читайте выше.

  7. #17

    По умолчанию

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

  8. #18

    По умолчанию

    Цитата Сообщение от 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А. Ваш вариант мне показался более простым в реализации, но пока не пойму как лучше мне сделать так, чтобы опрашивать все модули этим способом.

  9. #19

    По умолчанию

    Цитата Сообщение от 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.

  10. #20

    По умолчанию

    Цитата Сообщение от 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.

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

Похожие темы

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

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

Ваши права

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