2022-08-03 17:01:01 +03:00
|
|
|
|
#include "app.hpp"
|
|
|
|
|
|
#include "program_config.hpp"
|
|
|
|
|
|
|
|
|
|
|
|
bool App::Init(std::string profinet_config_file)
|
|
|
|
|
|
{
|
|
|
|
|
|
ProfinetSettings profinet_settings;
|
|
|
|
|
|
ProfinetDeviceSettings profinet_dev_settings;
|
2022-08-11 09:10:48 +03:00
|
|
|
|
ProfinetPipesSettings profinet_pipe_settings;
|
2022-08-03 17:01:01 +03:00
|
|
|
|
|
|
|
|
|
|
/// Читаем настройки из файла
|
2022-12-09 12:54:37 +03:00
|
|
|
|
if (!programconf_getProfinetSettings(profinet_config_file, profinet_settings, profinet_pipe_settings))
|
2022-08-03 17:01:01 +03:00
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
///Создаем структуру в разделяемой памяти
|
|
|
|
|
|
ProfinetData_Map * p_profinetMap = shared_data_.Create("profinet_shared_data");
|
|
|
|
|
|
|
|
|
|
|
|
/// Читаем настройки из файла, выделяем память под структуру модулей и подмодулей
|
2022-08-26 14:43:30 +03:00
|
|
|
|
if (!programconf_getProfinetDeviceSettings(profinet_settings.profinet_device_config,
|
|
|
|
|
|
profinet_dev_settings,
|
|
|
|
|
|
p_profinetMap,
|
|
|
|
|
|
shared_data_,
|
|
|
|
|
|
user_data_map_))
|
2022-08-03 17:01:01 +03:00
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// Настройка Profinet: Инициализация pnet, добавление DAP слотов и подслотов и подключение к ним модулей и подмодулей,
|
|
|
|
|
|
if (!profinet_.Config(profinet_settings, profinet_dev_settings, p_profinetMap))
|
|
|
|
|
|
{
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-08-11 09:10:48 +03:00
|
|
|
|
/// Создаем именованые каналы
|
|
|
|
|
|
pipes_.Init(profinet_pipe_settings);
|
|
|
|
|
|
|
2022-08-03 17:01:01 +03:00
|
|
|
|
/**
|
|
|
|
|
|
* Циклические данные устройства передаются с определенным периодом, сообщения от контроллера при этом не требуются.
|
|
|
|
|
|
*/
|
|
|
|
|
|
/// Запуск потока Profinet
|
|
|
|
|
|
profinet_.Start();
|
2022-08-11 09:10:48 +03:00
|
|
|
|
/// Запуск потока чтения запросов по pipe
|
2022-08-26 14:43:30 +03:00
|
|
|
|
pipes_.Start(&profinet_, &user_data_map_);
|
2022-08-03 17:01:01 +03:00
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void App::Run()
|
|
|
|
|
|
{
|
|
|
|
|
|
for (;;)
|
|
|
|
|
|
{
|
2022-08-04 14:21:05 +03:00
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
|
2022-08-03 17:01:01 +03:00
|
|
|
|
}
|
|
|
|
|
|
}
|