Страница 651 из 1040 ПерваяПервая ... 151551601641649650651652653661701751 ... ПоследняяПоследняя
Показано с 6,501 по 6,510 из 10399

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

  1. #6501
    Пользователь Аватар для A.Simonov
    Регистрация
    11.07.2017
    Адрес
    Москва
    Сообщений
    623

    По умолчанию

    Цитата Сообщение от rayman0v0 Посмотреть сообщение
    Здравствуйте!
    В общем, проблема такого характера: все задействованные дискретные входы ПЛК-110 в CoDeSys'е при подключении к ПЛК дают true, хотя кнопка не нажата и датчик не срабатывает (кнопка и датчик - входные устройства). В самом ПЛК всё отображается корректно, нажал кнопку - загорелась лампочка над соответствующим входом. Что с этим можно сделать?
    Добрый день.

    Такое происходит только с подключенными входами?
    Если ко входу ничего не подключено, то в программе все в порядке?
    Укажите полную модификацию ПЛК, версию прошивки (команда PLCInfo в ПЛК-Браузере)
    Приложите схему подключения.
    Приложите скрины из приложения, где видно что входы - TRUE, и фото, где видно что диоды не горят.
    Желательно приложить проект.
    Можно сюда, а можно и на почту a.simonov@owen.ru

    Александр Андреевич Симонов
    Инженер по продуктам «ПЛК, модули и OwenCloud»

    Не работаю в ОВЕН с 01.07.22
    По всем вопросам обращайтесь на почту: support@owen.ru

  2. #6502

    По умолчанию

    Помогите, не могу создать структуру из двух массивов! Есть два массива, [1..7] и [1..7,1..600]. Как их можно объединить в один массив [1..7,1..601]? Подскажите.

  3. #6503
    Пользователь Аватар для A.Simonov
    Регистрация
    11.07.2017
    Адрес
    Москва
    Сообщений
    623

    По умолчанию

    Цитата Сообщение от alexxx Посмотреть сообщение
    Помогите, не могу создать структуру из двух массивов! Есть два массива, [1..7] и [1..7,1..600]. Как их можно объединить в один массив [1..7,1..601]? Подскажите.
    Немного не понял что нужно сделать.
    Попробуйте объяснить еще раз, другими словами?

    Как Вашу задачу понял я:
    Есть два массива. Нужно создать третий массив и в него копировать элементы первых двух.
    Я вижу это так:
    Вложение 38822

    Александр Андреевич Симонов
    Инженер по продуктам «ПЛК, модули и OwenCloud»

    Не работаю в ОВЕН с 01.07.22
    По всем вопросам обращайтесь на почту: support@owen.ru

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

    По умолчанию

    Есть два массива, [1..7] и [1..7,1..600]. Как их можно объединить в один массив [1..7,1..601]? Подскажите.
    Нет решения - размерность строк у массивов разная
    у первого - 7 элементов
    у второго - 600
    Можно только два массива, [1..7] и [1..600,1..7] объединить в такой [1..601,1..7]

    Быстро и эффективно:
    Код:
    VAR
    	A: ARRAY [1..600,1..7] OF WORD;
    	B: ARRAY [1..7] OF WORD;
    	C: ARRAY [1..601,1..7] OF WORD;
    END_VAR
    
    SysMemCpy(ADR(C), ADR(A), SIZEOF(A)); (*Копируем весь массив A[1..600,1..7]  в начало массива С[1..601,1..7]*)
    SysMemCpy(ADR(C) + SIZEOF(A), ADR(B), SIZEOF(B)); (*теперь в последнюю строку(601) массива С[1..601,1..7] копируем строку из массива B:[1..7]*)
    Используется библиотека SysLibMem
    Вложение 38823

    ЗЫ.
    Функция SysMemCpy() в эмуляторе не работает. Только в ПЛК
    Для проверки можно использовать PLCWinNT
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  5. #6505

    По умолчанию

    Цитата Сообщение от A.Simonov Посмотреть сообщение
    Немного не понял что нужно сделать.
    Попробуйте объяснить еще раз, другими словами?

    Как Вашу задачу понял я:
    Есть два массива. Нужно создать третий массив и в него копировать элементы первых двух.
    Я вижу это так:
    Вложение 38822
    Массивы большие, на FOR много времени уходит
    Цитата Сообщение от petera Посмотреть сообщение
    Нет решения - размерность строк у массивов разная
    у первого - 7 элементов
    у второго - 600
    Можно только два массива, [1..7] и [1..600,1..7] объединить в такой [1..601,1..7]
    Вот спасибо, это уже похоже на то что мне нужно. Буду изучать.
    А из большого массива извлечь кусок в другой массив похожим способом возможно?
    У меня большой массив данных, 600 строк по 7 значений в каждой. Нужно быстро сдвигать все строки наверх, а вниз записывать новый ряд из 7ми значений. Вот и думаю как это попроще сделать.

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

    По умолчанию

    Цитата Сообщение от alexxx Посмотреть сообщение
    Массивы большие, на FOR много времени уходит

    Вот спасибо, это уже похоже на то что мне нужно. Буду изучать.
    А из большого массива извлечь кусок в другой массив похожим способом возможно?
    У меня большой массив данных, 600 строк по 7 значений в каждой. Нужно быстро сдвигать все строки наверх, а вниз записывать новый ряд из 7ми значений. Вот и думаю как это попроще сделать.
    Запросто!

    Нужно быстро сдвигать все строки наверх, а вниз записывать новый ряд из 7ми значений. Вот и думаю как это попроще сделать
    Использовать функцию SysMemMove
    копирует указанное число байт из одного блока памяти в другой.

    В отличие от SysMemCpy, позволяет копировать данные пересекающихся блоков
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

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

    По умолчанию

    По просьбе alexxx реализация сдвига строк массива вверх на одну строку
    Код:
    PROGRAM PLC_PRG
    VAR
    	A: ARRAY [1..600,1..7] OF WORD;
    	shift_up: BOOL;	(*команда на сдвиг массива*)
    	SIZE_LINE: DWORD;  (*Длина одной строки в байтах*)
    	RT1: R_TRIG;
    END_VAR
    
    SIZE_LINE:= SIZEOF(A[1,1]) * 7; (*в общем случае элементы массива могут быть не только WORD*)
    RT1(CLK:= shift_up); (*Ловим фронт команды на сдвиг массива*)
    IF RT1.Q THEN
    	SysMemMove(ADR(A), ADR(A) + SIZE_LINE, SIZEOF(A)- SIZE_LINE);
    (*следующая строка не обязательная. Это обнуление последней строки массива*)
    	SysMemSet(ADR(A) + SIZEOF(A)- SIZE_LINE, 0, SIZE_LINE);
    END_IF
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  8. #6508
    Пользователь Аватар для DIPHENHYDRAMINE
    Регистрация
    14.01.2018
    Адрес
    Воскресенск
    Сообщений
    38

    По умолчанию

    Ребята подскажите пж. как в ST это одной строкой записать?
    до этого дошел..... DIG_FLTR_01(IN_VAL:= , PB:=1000 , TI:=500 , OUT_VAL=> DAT_DD_001_R_0001);
    Вложение 38868

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

    По умолчанию

    Цитата Сообщение от DIPHENHYDRAMINE Посмотреть сообщение
    Ребята подскажите пж. как в ST это одной строкой записать?
    до этого дошел..... DIG_FLTR_01(IN_VAL:= , PB:=1000 , TI:=500 , OUT_VAL=> DAT_DD_001_R_0001);
    Вложение 38868
    одной не получится, второй строкой продублируйте в виде REAL_TO_WORD(DIG_FLTR_01.OUT_VAL)
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  10. #6510
    Пользователь Аватар для DIPHENHYDRAMINE
    Регистрация
    14.01.2018
    Адрес
    Воскресенск
    Сообщений
    38

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    одной не получится, второй строкой продублируйте в виде REAL_TO_WORD(DIG_FLTR_01.OUT_VAL)
    Спасибо! работает....

Страница 651 из 1040 ПерваяПервая ... 151551601641649650651652653661701751 ... ПоследняяПоследняя

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

Ваши права

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