Проверьте свой сгенерированный код с помощью косимуляции. Сгенерированный код и тестбенч выполняются на программном логическом контроллере Codesys (мягкий ПЛК). Модель ™ Simulink использует унифицированную архитектуру Open Platform Communication (OPC UA) для связи и извлечения косимулированных данных из мягкого ПЛК. Модель Simulink проверяет сгенерированный код, сравнивая результаты симуляции модели с косимулированными мягкими результатами ПЛК.
В вашей системе необходимо установить:
Codesys V3.5.SP16 + IDE или Codesys V3.5 SP16 Patch 1 + IDE
OPC Toolbox ™
Simulink PLC Coder ™
The simple_cosim модель состоит из SimpleSubsystem блок и система MATLAB (PLCCOSIM) блок. Во время симуляции модель сравнивает значения из SimpleSubsystem блок к значениям из мягкого ПЛК, которые извлекаются с помощью системы 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.
Откройте файл проекта на основе версии Codesys Target IDE.
Дважды кликните CODESYS_Control_Win_V3_x64 и выберите Скан Network.
На вкладке Scan Network выберите устройство в окне Select Device. Нажмите кнопку ОК.
Выберите «Сборка» > «Сборка».

6.Выбрать Online > Войти.

7. Выберите отладка > Start.

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