Внимание! Пример является учебным и не испытан в реальном производстве на реальном ПЛК. Пример 1. Задание. При команде (cmd_create=TRUE) произвести запись на карту памяти М340 значения 2-х переменных (Var1, Var2) за последние 10 сек с дискретностью 100 мс. Запись осуществить в формате CSV-файла (разделитель ";") с названием YYYY-MM-DD_HH_MI_SS.CSV. Формат каждой записи: YYYY-MM-DD;HH:MI:SS;+ZZZZZ;+XXX.XX;+YYY.YY где YYYY - год, MM - месяц, DD - день, HH - часы, MI- минуты, SS- секунды, ZZZZZ-миллисекунды для значения переменной XXX.XX - знаение Var1, YYY.YY - значение Var2 Решение. Один из вариантов решения может быть следующим. Организовывается кольцевой буфер в виде массива для хранения 100 записей формата STRING каждые 100 мс. Организация кольцевого буфера не требует операций по смещению значений к 1-й записи, однако при просмотре значений следует это учитывать. При срабатывании условия записи (в нашем случае при cmd_create=TRUE) осуществляется создание файла, записи массива (буфера) в файл и закрытие файла. Следует отметить, что буфер занимает значительную область памяти. Можно сократить расходы, ведя записи в двоичном формате. Однако для интерпретации и отображения двоичного формата нужно писать какой-то обработчик. 1) Переменные 2) Для формирования импульса используем системный бит %S5 (100 мс меандр) в паре с %M0 (нужен для отлова фронтов). Для проверки работы программы будем имитировать переменные Var1 (рампа 0...6.25) и Var2(синусоида): 3) Организовываем кольцевой буфер. Indx указывает на номер записи. Используются FFB для получения реального времени, преобразования в STRING, конкатенации, вставки символа в строку. 4) Формирование имени файла и запись в него. Если используется имитатор ПЛК, то файл будет находиться в папке для временных файлов на компьютере с имитатором. У меня это "C:\Users\san\AppData\Local\Temp". 5) Отображение в Excel записаного файла. У меня на компьютере в качестве разделительного знака используется ".", если нужна "," нужно поменять это в программе. |