Проверьте свой сгенерированный код с помощью косимуляции. Сгенерированный код и тестбенч выполняются на программном логическом контроллере 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.m
classdef 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. Симулируйте модель. Проверьте сгенерированный код путем сравнения результатов симуляции модели с результатами мягкой косимуляции ПЛК.