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

SimpleSubsystem блок содержит простую обратную связь.

Система MATLAB блок настраивается, чтобы запустить PLCCOSIM.m файл. Файл содержит код, чтобы настроить коммуникации UA OPC и получить cosimulated данные от мягкого PLC.
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 запускает сгенерированный код на мягком PLC. Если у вас есть Codesys V3.5. SP16 + IDE, используйте plc-cosim_v3sp16.project как проект файл. Если у вас есть Codesys V3.5. Закрашенная фигура SP16 1 + IDE, используйте plc-cosim_v3sp16patch1.project как проект файл.
В системном лотке Windows ® выберите CODESYS Control Win SysTray-x64, щелкните правой кнопкой и выберите Start PLC.
Откройте файл проекта на основе Целевой версии IDE Codesys.
Дважды кликните CODESYS_Control_Win_V3_x64 и выберите Scan Network.
Во вкладке Scan Network выберите свое устройство в Избранном Окне устройств. Нажать ОК.
Выберите Build> Build.

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

7. Выберите Debug> Start.

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