Стартовая страница › Форумы › Rapid SCADA на Linux-контроллерах и Raspberry Pi › Сохранение данных при перезагрузке Raspberry Pi
Помечено: retain
- В этой теме 34 ответа, 4 участника, последнее обновление 7 лет, 3 месяца назад сделано
Mikhail.
-
АвторЗаписи
-
04.08.2017 в 13:03 #6908
djbond07УчастникДобрый день! Вопрос такой. При установке мы в /etc/fstab пишем строчку
tmpfs /etc/scada/ArchiveDAT/Cur tmpfs defaults,noatime,size=10m 0 0
Это позволяет не насиловать флешку, и писать текущий срез в RAM. В итоге когда малина перезагружается, мы теряем текущий срез. Нет проблем, если во входных каналах у нас просто логика прописана, но есть такие вещи, как наработка, счётчики всякие, значение которых не хотелось бы терять. Кто-нибудь сталкивался с подобным или пытался решить данную проблему?04.08.2017 в 13:11 #6909
djbond07УчастникКак вариант сделать так, чтобы при отсутствии текущего среза при запуске системы, вместо него подставлялся бы последний минутный срез.
04.08.2017 в 21:04 #6911
MikhailМодераторЗдесь на форуме manjey73 решал такую проблему. Насколько я помню, он сохраняет в файлы и потом загружает нужные значения.
А вообще было бы полезно написать модуль для SCADA-Сервера, который будет дружелюбным для пользователей и позволит выбрать, какие каналы сохранять в момент перезапуска.04.08.2017 в 21:05 #6912
MikhailМодераторИдея с минутным срезом интересная.
04.08.2017 в 21:18 #6917
manjey73УчастникLinux и дружелюбие пока несовместимы 🙂 настраивать через конфиги будет не удобно до тех пор, пока и в Linux не появится GUI для ScadaComm и ScadaServer/
моя формула Retain для конфигурационных переменных. Пишет файл при каждом изменении указанных переменных как Retain.
Для счетчиков она несколько непригодна так как так же будет убивать флешку.
Ее надо доработать так, чтобы она писала в tmpfs и каждую минуту писала в обычный файл, при запуске чтобы читался файл.07.08.2017 в 11:46 #6933
djbond07УчастникДобрый день! Вопрос к manjey73 больше, по формуле Retain. Пытаюсь тестировать на Windows, в сервер пишет такие ошибки:
Строка 480, колонка 1: error CS0103: Имя «SetVal» отсутствует в текущем контексте
Строка 539, колонка 38: error CS0234: Имя типа или пространства имен «Linq» отсутствует в пространстве имен «System» (пропущена ссылка на сборку?)
SetVal Встречается в формуле Load_Retain
linq в формуле Save_Retain
Можете подсказать как пофиксить это?07.08.2017 в 11:55 #6935
manjey73УчастникКакая версия у вас SCADA ? Возможно с этим связаны ошибки ?
В формуле Retain необходимо правильно указать путь к файлу, в Windows он будет отличаться, это необходимо для работы всех формул. В примере я вроде это указывал.
Вероятно ошибки связаны с этим.Хотя странно, у меня на Windows записан путь для Linux ПК и ошибок не вызывает при перезапуске Сервера.
07.08.2017 в 12:22 #6945
djbond07УчастникЯ прописал путь так
string pathRet = @»e:\Retain\retain.txt»;
Не думаю, что дело в пути. В формуле C# явно ругань идёт на то, что переменную SetVal не объявили. Вот этак строчка из формулы LoadRetain:SetVal(Convert.ToInt32(RetLoad[i].Substring(RetLoad[i].IndexOf("[")+1, RetLoad[i].IndexOf(", ")-(RetLoad[i].IndexOf("[")+1)),10),Convert.ToDouble(RetLoad[i].Substring(RetLoad[i].IndexOf(", ")+2,RetLoad[i].IndexOf("]")-(RetLoad[i].IndexOf(", ")+2))));А в случае с Linq, вот строчка в формуле SaveRet:
RetSave[i] = Convert.ToString(System.Linq.Enumerable.ElementAt(DictRet, i));
В принципе я даже примерно понимаю, что делать. В 1 случае как-то объявить переменную, SetVal. Или вообще убрать эту строчку из формулы, так как она скорей всего относится только к каналу управления (Вам виднее).
Во 2-м случае прописать Using Sustem.Linq; или как-то так. Но где это прописать? И опять же, Вы писали код, и может дело вообще в другом?
Посмотрите, пожалуйста, пост #6686, может Вы что-то потом меняли в формулах?07.08.2017 в 12:38 #6949
manjey73УчастникSetVal — это функция RapidScada — ее не надо объявлять, в том то и дело.
Смотрите документацию Использование формулНа счет второй ошибки странно, пока в CalcEngine.cs нет явного указания
using System.Linq; — Михаил обещал добавить в следующих версиях, а так же добавить чуть больше символов на формулы, когда появится такая возможность.
Но можно вызывать напрямую, как и System.IO, однако на одно у вас ругается, а на второе нет…
Не могу сказать с чем это связано, возможно не установлены какие-то компоненты .NET ?Я выложил точную копию формул, которые на данный момент у меня работают на Raspberry
07.08.2017 в 12:43 #6953
manjey73УчастникПроверьте правильность написания SetVal — при такой ошибке возможно не тот символ в записи, так компилятор может ругаться, если не совпадают имена встроенных функций с записью, тогда он считает что это новая переменная и она не объявлена.
09.08.2017 в 10:57 #6975
MikhailМодераторSetVal можно увидеть в C:\SCADA\ScadaServer\Log\CalcEngine.cs
Linq скорее всего не получится вызвать, т.к. мало написать using System.Linq, нужно, чтобы была подключена соответствующая DLL.24.08.2017 в 12:30 #7107
djbond07УчастникДобрый день! Хотелось бы вернуться к вопросу. Посмотрел в файл
C:\SCADA\ScadaServer\Log\CalcEngine.cs
И не нашёл там функции SetVal(). Искал и с помощью поиска, и просто посмотрел в начале, где все они объявляются, её нет. Есть только Val(), Stat() и математические всякие. Смотрел на SCADA 5.0.2 и на SCADA 5.2.1. (На 5.2.1 просто вставил базу sdf в скаду 5.0.2 и запустил, чтобы сгенерировать файл CalcEngine).
Что с этим делать? Может просто добавить вручную в блок формул данную формулу? Тогда нужен её текст. А вообще странно всё это.24.08.2017 в 14:01 #7108
manjey73УчастникДанная формула в самой scada, а то, что вы видите в CalcEngine.cs просто в части предустановленных формул есть запись Val(), вот и все.
Просто в канале управления в формуле напишите SetVal(№ канала), поставьте галочку «Использовать формулу» и перезапустите сервер и вы таки найдете эту запись в CalcEngine.cs
SetVal() была доступна раньше, но появилась только на предыдущей версии scada для прямой записи в каналах управления. Раньше ее можно было использовать только внутри формул.
В документации на сайте смотрите Использование формул
24.08.2017 в 14:26 #7112
djbond07УчастникПроверил по Вашему способу, только добавил формулу не в канал управления, а во входной канал. Записи не появилось, появилась только ещё одна ошибка.
Строка 497, колонка 56: error CS0103: Имя «SetVal» отсутствует в текущем контексте.
Ругань идёт как раз на использование функции, которая не объявлена.
На какой версии скады у Вас работает данная схема?-
Ответ изменён 9 лет назад пользователем
djbond07.
24.08.2017 в 14:44 #7114
manjey73УчастникНа последней от 17.08 и предпоследней, которая была до нее.
Последняя лучше :), теперь email отправляются на русском.Прощу прощения, формула должна выглядеть так SetVal(int, double)
int — номер канала
double — значение
Например запись значения в нужный канал будет таким SetVal(105, Cmd) -
Ответ изменён 9 лет назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.