Страница 506 из 856 ПерваяПервая ... 6406456496504505506507508516556606 ... ПоследняяПоследняя
Показано с 5,051 по 5,060 из 8555

Тема: CODESYS V3.5. Вопросы и ответы

  1. #5051

    По умолчанию

    Цитата Сообщение от fatlortroll Посмотреть сообщение
    > Какую практическую задачу из вашей предметной области вы пытаетесь сейчас решить?
    Запись в один файл из нескольких потоков. Журнал действий пользователей, и системы.
    А если сделать какой-то один объект (FB) с методом AddToLog()?
    Пусть внутри FB файл всегда будет открыт, а AddToLog туда будет писать?

    ...и ещё можно извратиться и сделать через штатные Тревоги. Дёргать их, а на их обработчик (активацию) повесить свю функцию записи в свой файл.
    Плюс этого решения ещё и в том, что все строки сообщений будут в одном месте находиться (в описании тревог), а не будут по коду раскиданы.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  2. #5052
    Пользователь
    Регистрация
    08.02.2020
    Адрес
    Ставрополь
    Сообщений
    230

    По умолчанию

    Если чтение I/O сложить в один поток с логикой, получатся неприличные задержки.

    А, там ещё вместе с I/O ещё обмен данными с шестью частотниками.

  3. #5053
    Пользователь
    Регистрация
    08.02.2020
    Адрес
    Ставрополь
    Сообщений
    230

    По умолчанию

    > А если сделать какой-то один объект (FB) с методом AddToLog()

    Так и сделано, но, похоже, там конкуренция среди них. И я криво реализовал синхронизацию.

  4. #5054

    По умолчанию

    Цитата Сообщение от fatlortroll Посмотреть сообщение
    > А если сделать какой-то один объект (FB) с методом AddToLog()
    Так и сделано, но, похоже, там конкуренция среди них. И я криво реализовал синхронизацию.
    А что ты называешь потоками? Разные задачи?

    А если сделать очередь? =) Типа при вызове AddToLog всё пишется в очередь (массив структур с данными), а потом он спокойно скидывается на диск. В одном, своём потоке (задаче)
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  5. #5055
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,619

    По умолчанию

    Шаман, как обычно, смотрит в корень - то, что события могут формироваться в разных потоках, не мешает обрабатывать их в каком-то одном потоке.

    Если чтение I/O сложить в один поток с логикой, получатся неприличные задержки.
    Использование SysFile и других библиотек с синхронными вызовами - действительно довольно простой способ получить "неприличные задержки".
    Для большинства библиотек есть асинхронные варианты - например, в случае файлов это библиотека CAA File.

  6. #5056
    Пользователь
    Регистрация
    08.02.2020
    Адрес
    Ставрополь
    Сообщений
    230

    По умолчанию

    > А что ты называешь потоками? Разные задачи?

    Ага.

    > А если сделать очередь?

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

  7. #5057
    Пользователь
    Регистрация
    08.02.2020
    Адрес
    Ставрополь
    Сообщений
    230

    По умолчанию

    > обрабатывать их в каком-то одном потоке

    Но от синхронизации записи никуда не деться, в любом случае.

  8. #5058
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,619

    По умолчанию

    Цитата Сообщение от fatlortroll Посмотреть сообщение
    > обрабатывать их в каком-то одном потоке

    Но от синхронизации записи никуда не деться, в любом случае.
    Если это один поток и всё же SysFile - о какой вообще синхронизации речь?
    Вызовы SysFileOpen, SysFileWrite и т.д. - блокирующие.

  9. #5059
    Пользователь
    Регистрация
    08.02.2020
    Адрес
    Ставрополь
    Сообщений
    230

    По умолчанию

    Возможно, я некорректно представляю модель исполнения CoDeSys, но разве при вызове метода ФБ из разных потоков (задач) не может случиться коллизия, даже если функции внутри этого метода блокирующие?

  10. #5060
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,619

    По умолчанию

    Цитата Сообщение от fatlortroll Посмотреть сообщение
    Возможно, я некорректно представляю модель исполнения CoDeSys, но разве при вызове метода ФБ из разных потоков (задач) не может случиться коллизия, даже если функции внутри этого метода блокирующие?
    А зачем вообще об этом думать?

    Пример реализации, совпадающий с озвученной выше Шаманом идеей ("простое лучше сложного"):
    - глобальный ARRAY [FIRST_EVENT...LAST_EVENT] OF BOOL
    - из разных потоков по событиям взводим нужные флаги массива (доступ к массиву по константным индексам - можно через красивый ENUM - все события заранее известны и определены)
    - в одном конкретном потоке: открываем файл, в цикле проходим по массиву - для каждого установленного флага вызываем SysFileWrite (и здесь же можно реализовать форматирование сообщения, если требуется) и сбрасываем флаг - после выхода из цикла закрываем файл

Страница 506 из 856 ПерваяПервая ... 6406456496504505506507508516556606 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 4041
    Последнее сообщение: Сегодня, 09:27
  2. Панели оператора ИП320. Вопросы и ответы
    от automat в разделе Панели оператора (HMI)
    Ответов: 849
    Последнее сообщение: 16.11.2025, 08:58
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 273
    Последнее сообщение: 08.09.2025, 13:21
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе Панели оператора (HMI)
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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