Сборка ScadaServer 4.5.7 (Mono)

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Автор
    Записи
  • #2449
    Vyacheslav
    Участник

    В данной теме опишу нюансы, которые необходимо учитывать для успешной сборки проекта ScadaServer версии 4.5.7 и его последующего запуска на Raspberry PI.

    Исходные данные:
    1. Операционная система Ubuntu
    2. Установленный mono и monodevelop
    3. Либо клонированный через гит либо скачанный архив проекта с исходным кодом ScadaServer версии 4.5.7

    Особенности сборки и запуска сервера:

    1. После открытия проекта в среде monodevelop необходимо разрешить все зависимости необходимых для успешной компиляции референсов на библиотеки. Также можно создать в папке Debug проекта необходимую структуру каталогов и конфигурационных файлов, для тестового запуска и проверки работоспособности.
    2. После разрешения всех зависимостей обычно компиляция проекта ScadaServer проходит без ошибок, но с предупреждениями о некоторых неиспользуемых в проекте переменных.
    3. Далее прямо в среде можно произвести запуск сервера в режиме отладки. Состояние и информация о работе сервера записывается в лог-файлы находящиеся в папке Log. Если структура конфигурации сервера выстроена правильно и все файлы базы конфигурации на месте и не побиты, то в логах наблюдаем следующую из проблем: «Ошибка при компилировании исходного кода формул:…»
    Ошибка возникает в файле Calculator.cs строка 173в методе получающем поток using (Stream stream = Assembly.GetExecutingAssembly().
    GetManifestResourceStream(«Scada.Server.Svc.CalcEngine.cs»)). По умолчанию в собранном проекте он возвращает Null. Для решения этой ошибки необходимо в проекте IDE MonoDevelop проверить свойство BuildAction для файла CalcEngine.cs. Почему то он по умолчанию Compile, а должно быть EmbeddedResource. Исправив это свойство необходимо повторно произвести компиляцию проекта. При повторном запуске сервера данная ошибка исчезает. При сборке на Ubuntu других ошибок при запуске после сборки не возникало.
    4. Переносим структуру скомпилированного проекта под Mono на Raspberry PI (OS Raspbian) с установленным mono-runtime. Описываю для случая без использования графической подсистемы. При первом запуске в логах будет ошибка связанная со считывание формул. Данная ошибка возникает если после заливки образа и начальной конфигурации в меню выбора Locales не выбрана локаль по умолчанию как en_US.UTF-8. Для исправления необходимо произвести повторную конфигурацию с помощью команды dpkg-reconfigure locales и выбрать локаль по умолчанию en_US.UTF-8. Далее произвести перезагрузку raspberry pi. (Это информация от Михаила)
    5. На этом этапе Scada Server должен запускаться без ошибок. Но для сокращения количества операций записи на флеш карту необходимо создать временное файловое хранилище типа tempfs и осуществить его автоматическое монтирование при загрузке путем размещения в файле /etc/fstab, следующей строки конфигурации
    tmpfs /home/pi/RunRS/Log tmpfs defaults,noatime,size=50m 0 0
    tmpfs /home/pi/RunRSComm/Log tmpfs defaults,noatime,size=50m 0 0
    Где /home/pi/RunRS/Log путь до директории, которую необходимо разместить во временном хранилище. В нашем случае размещаем там папки Log ScadaServer и Scada коммуникатора.
    При необходимости можно размещать любые директории в которых предполагается хранить временную информацию. То есть после перезагрузки информация из указанных директорий исчезнет. (Это информация от Михаила)

    На текущий момент на своей практике и исходных условиях сборки с другими проблемами не сталкивался.

    • Тема изменена 10 лет, 1 месяц назад пользователем Vyacheslav.
    • Тема изменена 10 лет, 1 месяц назад пользователем Vyacheslav.
    #2454
    Mikhail
    Модератор

    Очень интересно, спасибо. Не ожидал, что проект можно собрать в MonoDevelop 🙂

    Настройки RAM дисков надо будет добавить в документацию, т.к. это важно.
    Рекомендую отключить запись копий срезов для РПи (лучше делать бекап другими способами, например, выкладывать на FTP) и добавить в RAM-диск директорию текущего среза.

    #2455
    Mikhail
    Модератор

    Если есть опыт работы с различными веб-серверами на Linux для ASP.NET, напишите, пожалуйста. Сейчас в документации приводятся настройки для XSP4

    #2457
    Vyacheslav
    Участник

    Информацию по другим серверам с поддержкой ASP .NET не искал. Но думаю XSP4 это самое оптимальное решение для этой технологии проектирования в среде Linux. XSP4 хорошь тем что в нем все по честному по сравнению с IIS на винде. Но сравнивать их не корректно.
    Если разворачивать проект на малине то лучше использовать XSP4 фронтендом, если на более мощном железе то бекендом, фронтендом выставлять Nginx. При такой конфигурации если потребуется отказоустойчивость и балансировка нагрузки для каких либо сервисов то можно поднять множество бекэндовых XSP4, а в Nginx настроить модуль отвечающий за балансировку.

    Сам же я стараюсь использовать технологию ASP .NET как можно ближе к низовым ее возможностям, это разработка хендлеров, роутинг и мапинг необходимых хендров на уровне файла глобал.асакс. При проектировании, архитектуру веб приложения выстраиваю путем жесткого разделения клиентской части и серверной части. То есть на стороне клиента это использование нативных стандартов с помощью библиотек javascript. На стороне сервера это вебсервисы.

    Кстате для распбери можно было бы переписать класс program.cs чтобы это было WCF приложение с поддержкой вебсервисов типа REST. Тогда большинство методов класса manager можно будет обернуть в вызовы вебсервиса тем самым повысив гибкость управления сервером и коммуникатором. Для разработчиков фронтенда это огромный плюс потому что они жестко не привязаны к ASP и разработку admin интерфейсов управления чем либо могут производить в отрыве от сервера зная просто его API. Ну это мое личное видение архитектуры такого типа приложений.

    #2460
    Mikhail
    Модератор

    Новое веб-приложение использует такой подход. Отображение в значительной мере вынесено на JavaScript, данные клиенту предоставляются с помощью веб-сервисов. Применительно к Серверу и Коммуникатору пока такого нет, но идеи использования WCF для сервисных функций имеются. Идеи генерируются быстрее их воплощения 🙂

    #2543
    Mikhail
    Модератор
Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Для ответа в этой теме необходимо авторизоваться.