Проверьте созданный код с помощью косимуляции. Сгенерированные код и средства тестирования выполняются на программно-программируемом логическом контроллере Codesys (программном ПЛК). Модель Simulink ™ использует единую архитектуру связи с открытой платформой (OPC UA) для связи и извлечения косимулированных данных из программного ПЛК. Модель Simulink проверяет сгенерированный код, сравнивая результаты моделирования модели с результатами косимулированного мягкого ПЛК.
В системе должны быть установлены:
Codesys V3.5.SP16 + IDE или Codesys V3.5 SP16 Исправление 1 + IDE
Панель инструментов OPC ™
Кодер Simulink PLC ™
В simple_cosim модель состоит из SimpleSubsystem блок и система MATLAB (PLCCOSIM) блок. Во время моделирования модель сравнивает значения из SimpleSubsystem блокировать значения из программного plc, которые извлекаются с помощью системы MATLAB (PLCCOSIM) блок.

SimpleSubsystem блок содержит простой цикл обратной связи.

Система MATLAB блок настроен на запуск PLCCOSIM.m файл. Файл содержит код для настройки связи OPC UA и извлечения косимулированных данных из программного ПЛК.
type PLCCOSIM.mclassdef PLCCOSIM < matlab.System
% PLCCOSIM Add summary here
%
% This template includes the minimum set of functions required
% to define a System object with discrete state.
% Public, tunable properties
properties
end
properties(DiscreteState)
CycleNum;
end
% Pre-computed constants
properties(Access = private)
UAObj;
DeviceNode;
Cycle_U;
Cycle_Y;
TestCycleNum;
PreviousCycleNum;
end
methods(Access = protected)
function setupImpl(obj)
% Perform one-time calculations, such as computing constants
% init opc UA server connection
obj.UAObj = opcua('opc.tcp://localhost:4840');
connect(obj.UAObj);
obj.DeviceNode = findNodeByName(obj.UAObj.Namespace,'DeviceSet','-once');
obj.Cycle_U = findNodeByName(obj.DeviceNode,'cycle_U');
obj.Cycle_Y = findNodeByName(obj.DeviceNode,'cycle_Y');
obj.TestCycleNum = findNodeByName(obj.DeviceNode,'testCycleNum');
obj.PreviousCycleNum = findNodeByName(obj.DeviceNode,'previousCycleNum');
end
function y = stepImpl(obj,u)
% Implement algorithm. Calculate y as a function of input u and
% discrete states.
obj.CycleNum = obj.CycleNum+1;
writeValue(obj.UAObj, obj.Cycle_U, u);
writeValue(obj.UAObj, obj.TestCycleNum, obj.CycleNum);
valueUpdated = false;
for rct = 1:100
previousCycleNumValue = readValue(obj.UAObj, obj.PreviousCycleNum);
if previousCycleNumValue == obj.CycleNum
valueUpdated = true;
y = readValue(obj.UAObj, obj.Cycle_Y);
break
end
pause(0.001)
end
if ~valueUpdated
error('not get the value for cycle number %d', obj.CycleNum);
end
end
function resetImpl(obj)
% Initialize / reset discrete-state properties
obj.CycleNum = 0;
writeValue(obj.UAObj, obj.TestCycleNum, obj.CycleNum);
writeValue(obj.UAObj, obj.PreviousCycleNum, obj.CycleNum);
end
function out = getOutputSizeImpl(obj)
out = propagatedInputSize(obj,1);
end
function out = getOutputDataTypeImpl(obj)
out = propagatedInputDataType(obj,1);
end
function c1 = isOutputComplexImpl(obj)
c1 = false;
end
function c1 = isOutputFixedSizeImpl(obj)
c1 = true;
end
function s = getDiscreteStateImpl(obj)
s = obj.CycleNum;
end
end
end
Файл проекта Codesys запускает созданный код на программном ПЛК. При наличии Codesys V3.5.SP16 + IDE используйте plc-cosim_v3sp16.project в качестве проекта файл. При наличии пакета Codesys V3.5.SP16 Patch 1 + IDE используйте plc-cosim_v3sp16patch1.project в качестве проекта файл.
На панели задач Windows ® выберите CODESYS Control Win SysTray -x64, щелкните правой кнопкой мыши и выберите Start PLC.
Откройте файл проекта на основе версии целевой среды IDE Codesys.
Двойной щелчок CODESYS_Control_Win_V3_x64 и выберите Сканировать сеть.
На вкладке Сканирование сети выберите устройство в окне Выбор устройства. Нажмите кнопку ОК.
Выберите «Сборка» > «Сборка».

6.Выберите «Online» > «Login».

7. Выберите Отладка > Пуск.

Теперь на программном ПЛК выполняется сгенерированный код.
Смоделировать модель Simulink ™ и проверить созданный код путем сравнения результатов модели моделирования с результатами мягкого ПЛК. Результаты программного ПЛК извлекаются с помощью соединения OPC UA.
Откройте окно simple_cosim.slx файл для Simulink модель.
% open_system('simple_cosim')2. Моделирование модели. Проверьте созданный код, сравнив результаты моделирования модели с результатами косимуляции мягкого ПЛК.