1. А каким образом это сделать?
2. Попробую.
3. Не проверял. Попробую.
У меня такая проблема тоже была при использовании SysLibFile на М02, пришел на OwenLibFileAsync.
Для форматирование есть команда в ПЛК-Браузер formatFFS.
И не забудьте, что OwenFileOpenAsync, stMode = 'a', 'w+', 'r'
Последний раз редактировалось monteg; 15.04.2017 в 14:22.
Да это вроде помню)
Уважаемый Владислав!
Помогите разобраться с асинхронным выводом в файл с помощью библиотеки OwenAsyncLibFile. На основе Вашего примера пытаюсь организовать запись в файл непрерывного ряда значений переменной, которая получает приращение в рабочем цикле:
b:=b+1;
Запись в файл производится функцией:
res:=OwenFileWriteAsync(handle,ADR(bufout),14,ADR( result));
В примере обращает на себя внимание то, что запись происходит дважды: первый раз в цикле с CASE 2: и второй в цикле с CASE 3:. Получается, мы в разных циклах даем задание на передачу строковой переменной для записи. В программе одной переменной в циклах могут могут соответствовать разные строки. Методом проб и ошибок я добился нужного результата. Но вопросы остались:
В какую из попыток происходит действительно передача строки?
Как проконтролировать в программе какая из строк передана?
Хотелось бы получить более подробную информацию о работе функций библиотеки OwenAsyncLibFile от первоисточника. Или дайте ссылки на документацию, где описан порядок их работы.
в case 2 Вы задаёте библиотеке следующую команду, в Вашем случае на запись.
а в case 3 вы периодически опрашиваете библиотеку: "Не выполнила ли ты мою команду"
Собственно запись в файл происходит асинхронно в промежутке между case2 и ответом ASYNC_DONE в case3.
И подавать на вход функции записи строку надо всегда одну и ту же и не менять её значение до ASYNC_DONE! Стековые переменные для данных записи не использовать, только статические или глобальные переменные.
Тролль-наседка, добрый, нежный и ласковый
Спасибо.
Следовать этому совету - возражений нет. Однако, хотелось бы уточнить понятия: стековые, статические переменные. В РЭ ПЛК (в.1.9) в "Руководстве пользователя по программированию ПЛК в CoDeSys 2.3" упоминаются "стек ранее введенных команд", "стек вызовов". Стековые переменные не упоминаются. Статические переменные тоже.
Прошу уточнить Ваш совет.
в "Руководстве пользователя по программированию ПЛК в CoDeSys 2.3" нет основ программирования, подразумевается, что они уже изучены
Если Вы получили строку/массив через входные параметры функции/ФБ - это 95% стековая переменная.
Если Вы получили переменную по указателю - её содержимое внезапно может поменяться где-то там и Вы получите трудноотлаживаемую ошибку.
Если Вы объявили переменную в блоке VAR - она статическая
Если Вы объявили переменную в блоке VAR_GLOBAL - она глобальная
Тролль-наседка, добрый, нежный и ласковый