Страница 507 из 706 ПерваяПервая ... 7407457497505506507508509517557607 ... ПоследняяПоследняя
Показано с 5,061 по 5,070 из 7060

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

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

    По умолчанию

    Значит, у меня криво реализована синхронизация:

    // Mt_GVL
    VAR_GLOBAL
    DataDefender_ : CAA.BOLT; //
    END_VAR
    // Журнал сообщений
    FUNCTION_BLOCK FINAL LoggerActions
    VAR CONSTANT
    UnlockWaitTimeMax_ : TIME := T#20ms;
    END_VAR
    VAR
    FileHandle_ : SysTypes.RTS_IEC_HANDLE := SysTypes.RTS_INVALID_HANDLE;
    END_VAR
    // Добавить в лог сообщение об ошибке.
    METHOD MsgError : SysTypes.RTS_IEC_RESULT
    VAR
    CtValue : CAA.COUNT := 0;
    UnlockWaitTime : TIME := T#0ms;
    END_VAR

    UnlockWaitTime := TIME();
    WHILE ((UnlockWaitTime + UnlockWaitTimeMax_) > TIME()) AND_THEN
    (Mt_GVL.DataDefender_.Reserve(CtValue) = TRUE)
    DO
    // Здесь работа с файлом, запись в него форматированной строки и flush по завершении записи.
    CtValue := 0;
    UnlockWaitTime := T#0ms;
    Mt_GVL.DataDefender_.Free();
    END_WHILE
    Вот так сделано сейчас. Оставил только то, что относится к синхронизации. Если видны какие-либо ошибки -- покажите, пожалуйста.

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

    По умолчанию

    Похоже, весь код -- одна большая ошибка.

    А как правильно сделать -- пока не пойму.

  3. #5063
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,134

    По умолчанию

    Давайте лучше по нашему обычному сценарию?
    Какую практическую задачу из вашей предметной области вы пытаетесь сейчас решить? (без попытки пригвоздить себя к конкретной реализации)

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

    По умолчанию

    > Какую практическую задачу из вашей предметной области вы пытаетесь сейчас решить?

    Запись в один файл из нескольких потоков. Журнал действий пользователей, и системы.

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

    По умолчанию

    Цитата Сообщение от fatlortroll Посмотреть сообщение
    > Какую практическую задачу из вашей предметной области вы пытаетесь сейчас решить?

    Запись в один файл из нескольких потоков. Журнал действий пользователей, и системы.
    Ну ок, пойдём длинным путём.
    C чем связано требование про потоки?

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

    По умолчанию

    > Ну ок, пойдём длинным путём.

    :-D Ну не могу я выложить всё, не могу! :-D

    В одном потоке читаются по modbus входы/выходы, во втором -- логика приложения.

  7. #5067

    По умолчанию

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

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

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

    По умолчанию

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

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

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

    По умолчанию

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

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

  10. #5070

    По умолчанию

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

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

Страница 507 из 706 ПерваяПервая ... 7407457497505506507508509517557607 ... ПоследняяПоследняя

Похожие темы

  1. Панели оператора СП3xx. Вопросы и ответы
    от Мурат Ахриев в разделе Панели оператора (HMI)
    Ответов: 3193
    Последнее сообщение: Вчера, 12:51
  2. Панели оператора ИП320. Вопросы и ответы
    от automat в разделе Панели оператора (HMI)
    Ответов: 822
    Последнее сообщение: 20.11.2023, 17:48
  3. ИПП120. Вопросы и ответы
    от Р.Александр в разделе Программируемые реле
    Ответов: 245
    Последнее сообщение: 02.10.2022, 11:34
  4. Индикатор ИП120 , вопросы- ответы
    от rovki в разделе Программируемые реле
    Ответов: 56
    Последнее сообщение: 03.11.2017, 15:58
  5. Панели оператора СП270. Вопросы и ответы
    от Давидюк в разделе Панели оператора (HMI)
    Ответов: 930
    Последнее сообщение: 15.05.2017, 17:12

Ваши права

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