Compare commits

81 Commits

Author SHA1 Message Date
Matthias Heisig
2d65d0b3db Last changes before SAT 2025-10-14 16:19:19 +02:00
Matthias Heisig
eaaa2371e8 Change E-Stop so that it can also work with one string
- Also optimized CV charging
2025-10-07 16:23:37 +02:00
Matthias Heisig
8ea7fd74e2 Temporary deactivation e-stop for testing with 1 string 2025-10-06 15:54:56 +02:00
Matthias Heisig
51842388ea Fixed writing to new inverter modbus register 2025-10-06 14:44:15 +02:00
Matthias Heisig
14ec270259 Fixed modbus interface
- Changed registerdefinition in modbus server because or single register reading
2025-10-06 14:40:45 +02:00
Matthias Heisig
27848d6acc Repaired Project file
- Added controller back to project file. Got missing during last commit
2025-10-01 10:58:09 +02:00
Matthias Heisig
26d602eafc Added possibility to charge with cv 2025-10-01 10:45:51 +02:00
Matthias Heisig
698451cc1f Some bugfixes
- Config for max string power is now correctly calculated
- Adjusted timing for string and inverter timeout
2025-09-29 11:38:43 +02:00
Matthias Heisig
9cf02c1847 Fixed inverter not showing negative dc current 2025-09-24 10:24:15 +02:00
Matthias Heisig
dd82744356 Fixed some bugs and added inverter status to modbus register
- Safety now has a tof of 0,5s for Temp, Voltage and Pressure
- Doppelhöcker now switches powercommand during second phase
2025-09-24 10:10:37 +02:00
Matthias Heisig
d882effb35 Modified safety for better alarm messages and cleaned up 2025-09-12 16:07:02 +02:00
Matthias Heisig
269bdabebe Fixed release limits in string bug 2025-09-12 16:06:31 +02:00
Matthias Heisig
02dddfc41a Adjusted analog input limits and delays
- Adjusted analog input warnings and delays to match safety program levels
2025-09-12 11:11:50 +02:00
Matthias Heisig
8bd2e9a1ea Added inverter startup timeout to GVL_CONFIG and enabled inverter errors 2025-09-11 16:32:53 +02:00
Matthias Heisig
0d3369d54d Added error and waring messages and updated tower light inputs
- Added strings not ready in time error
- Added battery already full warning
- Added battery already empty warning
- Added battery in stop input to tower light
- Added warnings active to tower light
- Added BMS State Machine errors to tower light input
2025-09-10 12:13:40 +02:00
Matthias Heisig
d718c813c9 Minor refactoring
- Excluded union internal variable from static code analysis
- Excluded unused field in Suncpec struct from static code analysis for later use
2025-09-10 11:17:38 +02:00
Matthias Heisig
7c462c9cd4 Added Kaco cyclic data exchange change
- Power will now only be written if the requested power changed
2025-09-10 08:49:21 +02:00
Markus.Neukirch
39a206a1df Fixed startup time reset error in balancing mode 2025-09-09 12:28:22 +02:00
Markus.Neukirch
dffcfc9ebe Fixed automatic string restart after battery full or empty
- If battery was full or empty, the requested power has to be the opposite
- Copied power setpoint from auto remote to auto local field so that it shows up in grafana
2025-09-09 12:27:53 +02:00
Markus.Neukirch
d7cb895e29 Changed Kaco communication statemachine
- Added small delay after each modbus/tcp read
- Only write requested state when requested state has changed
2025-09-09 12:25:29 +02:00
Markus.Neukirch
755da644bc changed modbus communication
moved from all requests at the same time to one request after each other through state machine
2025-09-05 16:20:36 +02:00
Markus.Neukirch
f0e6143997 IBN changes
added sync units for cabinet temperature, changes in modbus interface to EMS (1.0.4 and 1.0.5), added error counter to modbus communication, lot of changes to kaco (faults, consecutive errors, bms error messages), isolation error ledge, allowed startbalancing when on shutdown, tower light integration
2025-09-05 14:24:37 +02:00
Markus.Neukirch
69749409a3 EStop Changes (added cage door estops) 2025-08-20 15:01:26 +02:00
Matthias Heisig
9c6e28b83d Added Kaco inverter implementation
- Added Kaco inverter implementation
- Small refactoring
- Added release inverter power signal for simultaneous start of the
  inverters
2025-08-11 23:26:40 +09:00
Markus Neukirch
6f97c1aa6b Safety EStop Changes
added SCS EStop to FSOE connection to main safety and it's evaluation
2025-08-05 17:16:25 +02:00
Markus Neukirch
6f357a3913 Merge branch 'develop' of gitlab.cmblu.net:sps-allgemein/uniblu into develop
# Conflicts:
#	PLC/PLC.tmc
#	Uniper.tsproj
2025-08-04 18:15:08 +02:00
Markus Neukirch
e2a44b0d37 Added cabinet temperature and modbus registers
added cabinet temperature to each module, scs and bms cabinet, added corresponding config, hmi interface, hardware & links. Added corresponding warning bits to modbus registers
2025-08-04 18:10:15 +02:00
Markus Neukirch
dacce53625 Balancing quick fixes
allowed operating mode to be change when balancing is started, added lock mechanism to not leave balancing state when not enabled
2025-07-31 14:04:30 +02:00
Markus Neukirch
ee3367eaec EMS-BMS heartbeat and modbus fixes
added ledge and error state when modbus communication is lost, seperated register 13004 (confirm) from registers 13000-13001 (BMS/String warning/error messages) for modbus mapping, added Heartbeat error message to bmsErrors
2025-07-14 18:02:33 +02:00
Matthias Heisig
e6802b87b4 Changes after BMS EMS connection test with uniper
- Added EMS heartbeat timeout
- Removed commented code
- Fixed BMS Error DC-Switch: Was true when switch was ok and vice versa
2025-06-19 19:10:26 +02:00
Matthias Heisig
b6791f7951 Small changes after FAT and EMS Test
- Changed Modbus server config for EMS connectivity
- Changed some default EWL Limits
2025-06-13 16:37:14 +02:00
Matthias Heisig
6fe10cc58c Added Doppelhoeckertest 2025-06-10 21:04:06 +02:00
Matthias Heisig
58f3c751d3 Some fixes before the FAT
- Refactored inverter Heartbeat check
- Added SafetyComError on EtherCAT checking
- Adjusted lower pressure value for safety plc from 200 mBar to 300mBar
2025-06-06 19:09:12 +02:00
Matthias Heisig
38f44128d1 Added precharge mode 2025-06-04 19:37:25 +02:00
Matthias Heisig
f12063e294 Added some fixed during pre safety check
- Fixed bug that SafetyIntlkTimeout could not be acknowledged
- Pumps now dont shut off during error in unit (except over- or underpressure), setpoint is now set to discharge power
- Fixed bug not able to restart safety-check when not all strings where off
- Adjusted Safetyparameters to match safetycheck protocol
2025-06-03 18:02:19 +02:00
Matthias Heisig
2f9f4df261 changes during start of safety check
- Refactoring of string fb
- Added pump safety interlocks for pressure segment inlet too low and too high
2025-06-02 19:51:57 +02:00
Matthias Heisig
ac0a8d160b Change in startup time for Doppelhöckertest
- Was 1 Minute, is now 5 seconds
2025-06-02 19:49:50 +02:00
Matthias Heisig
1677d34d9c Added Kaco inverter for sensor ripple testing
- Iso error in string will now only be active if the dc circuit breaker is not closed
- Added some delay between closing dc circuit breaker and enabling inverter so that the dc bus voltage can stabilize itself
2025-05-08 10:07:16 +02:00
Matthias Heisig
0d201a140a Added sphinx documentation 2025-04-28 17:15:57 +02:00
Matthias Heisig
94381dc704 Changed Safety program so that every group can be deactivated 2025-04-28 17:15:43 +02:00
Matthias Heisig
0db1fa523a Sunspec heartbeat timer incrementation slowed down 2025-04-28 17:14:43 +02:00
Matthias Heisig
70090f08d9 Single strings can now be activated or deactivated 2025-04-28 17:14:17 +02:00
Matthias Heisig
7b810b19d2 Implemented a better balancing algorith for string balancing
* Added error logging to inverter fb
* Changed HMI actual power feedback from dc to ac power
* Small config adjustments
2025-04-16 12:35:06 +02:00
Matthias Heisig
082c250543 Added possibility to change power through hmi during cycling mode 2025-04-15 13:23:23 +02:00
Matthias Heisig
bbf60864db Added inverter active signal to avoid triggering the isolation monitoring 2025-04-15 13:22:55 +02:00
Matthias Heisig
483fa83149 Switch voltage low and high sequence in modbus error and warning register for consistency 2025-04-15 13:21:56 +02:00
Matthias Heisig
a50ffaa00d Merge branch 'feature/modbusErrorMSG' into develop 2025-04-14 19:46:43 +02:00
Matthias Heisig
390b831286 Hardware reset button now triggers an alarm acknowledge signal 2025-04-14 19:46:02 +02:00
Matthias Heisig
f79cf27c0c Finished first implementation of modbus error registers 2025-04-14 19:38:17 +02:00
Matthias Heisig
4a00a4c414 Added Modbus registers 2025-04-08 07:24:55 +02:00
Matthias Heisig
e975d23694 Merge branch 'develop' of gitlab.cmblu.net:sps-allgemein/uniblu into develop 2025-04-06 10:23:25 +02:00
Matthias Heisig
2221f6bab3 Minor bugfixes and future addons 2025-04-06 10:21:01 +02:00
Philipp Schinacher
6a1ee45179 add liste alarme 2025-03-31 14:46:52 +02:00
Matthias Heisig
84e0e174a1 Fixed missing multistring handling in some modes 2025-02-14 16:14:07 +01:00
Matthias Heisig
4f0905d64a Fixed some bugs in cycling mode 2025-02-14 15:42:27 +01:00
Matthias Heisig
2ded890dd4 Added multi string handling and balancing 2025-02-13 21:26:50 +01:00
Matthias Heisig
f9df0a5180 Added precharging to SafetyCheck 2025-02-10 08:44:52 +01:00
Matthias Heisig
0345f57a3f Some refactoring 2025-01-17 08:08:37 +01:00
Matthias Heisig
39a02352f6 Iso and leackage error messages added 2024-09-10 16:54:17 +02:00
Matthias Heisig
d9f39953a0 Added shutdown when inverter error 2024-09-06 18:47:03 +02:00
Matthias Heisig
3d041c50c4 - Added new module status
- Added error messages for EtherCAT connection lost
2024-09-05 18:32:49 +02:00
Matthias Heisig
5e94ba4868 Merge branch 'feature/ManualModeSwitch' into develop
# Conflicts:
#	PLC/PLC.tmc
#	PLC/POUs/FB_String.TcPOU
#	PLC/POUs/MAIN.TcPOU
#	Uniper.tsproj
2024-08-30 14:32:11 +02:00
Matthias Heisig
08d2ffd136 Added string startup timeout 2024-08-30 13:12:42 +02:00
Matthias Heisig
112f7cb7d9 Added automatic manual mode change for all components if manual mode is selected, Added moving average filter to analog data 2024-08-26 22:19:29 +02:00
Matthias Heisig
58e511438e Umstellung auf TwinCAT 4026 2024-07-29 07:33:50 +02:00
Matthias Heisig
0d9a4d9c72 WIP: Aktueller stand für fehlersuche Sensorrauschen 2024-05-22 17:43:26 +02:00
Matthias Heisig
cf0d144987 Reordered Modbus registers for Energielenker 2024-05-07 18:02:07 +02:00
Matthias Heisig
5c42d4db0a Added ac phase currents to inverter data and copy it to modbus interface 2024-05-07 17:34:01 +02:00
Matthias Heisig
0ffff9be2a EMS communication and Voltage optimizations
- Added data for EMS communication
- Added highest segment voltage for charging check
- Added lowest segment voltage for discharging check
2024-05-07 17:10:29 +02:00
Matthias Heisig
327f324be8 Implemented fixes and improvements during comissioning
- New Balancing mode
- HMI Interface for Inverterdata implemented
- Adjusted GVL_CONFIG values
- Read inverter data even when inverter is off
- Added OPC UA settings to inverter data hmi interface
- Added multisettings to safety project for strings
2024-05-06 11:05:33 +02:00
Matthias Heisig
b95033a155 First string implemented 2024-04-18 08:32:21 +02:00
Matthias Heisig
9ce3522a70 WIP: Inbetriebnahme vorladen 2024-04-11 19:06:45 +02:00
Matthias Heisig
ef26159a4f Added safety program pre comissioning and started implementing different modes 2024-03-20 18:08:57 +01:00
Matthias Heisig
57987cb19f Fixed Modbus register access 2024-01-17 11:26:11 +01:00
Matthias Heisig
82826c258a Removed for development unnecessary temporary files from repository and updated .gitignore 2024-01-15 17:48:07 +01:00
Matthias Heisig
70647caee4 Added Modbus-server register mapping file 2024-01-15 17:36:37 +01:00
Matthias Heisig
4586e72a0e Added inverter implementation 2024-01-05 16:27:39 +01:00
Matthias Heisig
bd0bbd9c8b Added Simulation plc and removed unnecessary files from repository 2024-01-04 18:39:55 +01:00
Matthias Heisig
2bd41279b1 removed ~u file 2024-01-04 15:19:27 +01:00
Matthias Heisig
c2e3c2a5d7 .gitignore geändert 2024-01-04 15:18:26 +01:00
Matthias Heisig
faa33db290 Projektdateien hinzufügen. 2024-01-04 15:15:26 +01:00
296 changed files with 91706 additions and 258 deletions

312
.gitignore vendored
View File

@@ -1,261 +1,57 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
### TwinCAT3 ###
# website: https://www.beckhoff.com/twincat3/
# User-specific files
# TwinCAT PLC
*.plcproj.bak
*.plcproj.orig
*.tpy
*.tclrs
*.library
*.compiled-library
*.compileinfo
*.asm
*.core
LineIDs.dbg
LineIDs.dbg.bak
# TwinCAT C++ and shared types
# ignoring the TMC file is only useful for plain PLC programming
# as soon as shared data types (via tmc), C++ or in general TcCom-Module are used, the TMC file has to be part of the repository
*.tmc
*.tmcRefac
# TwinCAT project files
*.tsproj.bak
*.tspproj.bak
*.tsproj.b?k
*.tsproj.orig
*.xti.bak
*.xti.bk?
*.xti.orig
*.xtv
*.xtv.bak
*.xtv.bk?
*.tnzip
# Multiuser specific
**/.TcGit/
# exclude not required folders
**/_Boot/
**/_CompileInfo/
**/_Libraries/
**/_ModuleInstall/
**/_Deployment/
**/_Repository/
# VS Shell project specific files and folders
**/.vs/
*.~u
*.project.~u
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
project.fragment.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
#*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush
.cr/
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Own Ignores
commit.txt
*.txt
*.exe
*.xlsx

View File

@@ -0,0 +1,274 @@
<?xml version="1.0" encoding="utf-8"?>
<GlobalVariables Crc="3854622282" Id="12c44f92-6465-47ce-89f7-613cad033491" FileFormatVersion="1.0">
<Variable Id="b420cc6c-39c2-4c75-bb48-acf00ba7ef01">
<Name>xNotHaltSchaltschrankCh1</Name>
<SourceUsages>
<AliasDeviceIoUsage Id="8d308713-b99b-4774-be54-de09d587948f">
<SdsId>14</SdsId>
<ChannelId>1</ChannelId>
<FunctionId>1610678529</FunctionId>
</AliasDeviceIoUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="cc176bdf-a747-4aa0-9e98-25de2f5dfe9f">
<ModelElementId>721d8d36-06d8-4eee-8f44-0b05696e0b3d</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
<Variable Id="60346591-ba5c-4986-842f-7859b68bce4b">
<Name>xNotHaltSchaltschrankCh2</Name>
<SourceUsages>
<AliasDeviceIoUsage Id="9556462c-1b78-425b-b7c2-6de10649b0c8">
<SdsId>14</SdsId>
<ChannelId>3</ChannelId>
<FunctionId>1611727105</FunctionId>
</AliasDeviceIoUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="58acb495-5352-48a1-b18b-c065ac328978">
<ModelElementId>7398573d-9703-4b43-8c5f-0ae0846e19c6</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
<Variable Id="4415ae72-1484-4806-927e-79e9ab66fc0c">
<Name>xNotHaltTuerOstCh1</Name>
<SourceUsages>
<AliasDeviceIoUsage Id="e3d66cdb-49e5-4e92-9568-64785d1ace13">
<SdsId>14</SdsId>
<ChannelId>5</ChannelId>
<FunctionId>1612775681</FunctionId>
</AliasDeviceIoUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="d930d7ed-1d5a-4517-bce8-dd0ea5c3de3f">
<ModelElementId>46a8b85e-b9ec-445f-902a-1f8f4310f940</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
<Variable Id="0d8530ef-b4b6-4dd4-9fea-1c1df65b4868">
<Name>xNotHaltTuerOstCh2</Name>
<SourceUsages>
<AliasDeviceIoUsage Id="7399b956-db37-472c-a87b-1eff938fa459">
<SdsId>14</SdsId>
<ChannelId>7</ChannelId>
<FunctionId>1613824257</FunctionId>
</AliasDeviceIoUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="544adbda-9a16-4de7-87cd-76a7ef6d8077">
<ModelElementId>d66f2077-2967-4192-943b-96a1839793af</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
<Variable Id="fd13ec66-f132-4c16-8dda-cd20dd1a4844">
<Name>xNotHaltOk</Name>
<SourceUsages>
<FbPortUsage Id="97463df8-9f60-4c4f-b8a5-3fd87c06e4fc">
<ModelElementId>6cf93fc5-7ecb-422b-8cf8-4336135919fc</ModelElementId>
</FbPortUsage>
</SourceUsages>
<TargetUsages>
<AliasDeviceIoUsage Id="fc18538a-f56f-46ec-9ce2-17b0c70006be">
<SdsId>13</SdsId>
<ChannelId>1</ChannelId>
<FunctionId>1879113985</FunctionId>
</AliasDeviceIoUsage>
<AliasDeviceIoUsage Id="d908d190-b35a-4c1a-9497-d88f8b2879b0">
<SdsId>18</SdsId>
<ChannelId>1</ChannelId>
<FunctionId>1131179972</FunctionId>
</AliasDeviceIoUsage>
</TargetUsages>
</Variable>
<Variable Id="b61d0fc0-cc9f-462c-87a0-7ca3a2a7ddd0">
<Name>xNotHaltDelayOk</Name>
<SourceUsages>
<FbPortUsage Id="8416f12c-c78c-416e-ba49-8b10036d553d">
<ModelElementId>cb8ea492-a258-459b-a2c3-043a36bdf6db</ModelElementId>
</FbPortUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="71233037-fdaf-49ac-9517-eb44725603d3">
<ModelElementId>fe6d9c1e-be3a-4054-a12e-2d99ec66f013</ModelElementId>
</FbPortUsage>
<FbPortUsage Id="e2c7cdeb-b6eb-4dad-8d3c-87e10a772992">
<ModelElementId>c7fc83ba-0893-453e-abca-62c3026cd20b</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
<Variable Id="6d45e67f-50df-4b61-a9d0-03f285b6a1bf">
<Name>xRun</Name>
<SourceUsages>
<AliasDeviceIoUsage Id="0f77c6e7-fa09-4ddf-8737-e2c502cfc1d5">
<SdsId>22</SdsId>
<ChannelId>1</ChannelId>
<FunctionId>1131179973</FunctionId>
</AliasDeviceIoUsage>
</SourceUsages>
<TargetUsages>
<GroupPortUsage Id="f18a5e91-f203-4740-b068-f7f204159095">
<ModelElementId>9ed1be77-693c-4094-a86b-db09b880ab2a</ModelElementId>
</GroupPortUsage>
<GroupPortUsage Id="c5647103-bbbf-4051-b3ca-8334ecea45fd">
<ModelElementId>e41660f4-d22d-40b1-8509-7bd9c69b7766</ModelElementId>
</GroupPortUsage>
<GroupPortUsage Id="5a3f569f-5808-4be9-9b6f-a35ace560f48">
<ModelElementId>fe721ea0-ced8-4eef-9bca-ad67f4c1932f</ModelElementId>
</GroupPortUsage>
</TargetUsages>
</Variable>
<Variable Id="9f1c118d-b0f2-4f34-abb9-b4b05f111bfd">
<Name>xErrorAck</Name>
<SourceUsages>
<AliasDeviceIoUsage Id="c02109ba-3b28-41fe-95f5-bacb2d9034ae">
<SdsId>23</SdsId>
<ChannelId>1</ChannelId>
<FunctionId>1131179973</FunctionId>
</AliasDeviceIoUsage>
</SourceUsages>
<TargetUsages>
<GroupPortUsage Id="99bc5198-5e24-4b2e-b1b5-957e829eccbc">
<ModelElementId>277b38b0-bc98-441b-8265-96adb0e90c94</ModelElementId>
</GroupPortUsage>
<GroupPortUsage Id="4639e925-a2f5-4d94-893d-eef18966b590">
<ModelElementId>7e2ebab5-c2df-4469-a598-6fb5f2509ad0</ModelElementId>
</GroupPortUsage>
<GroupPortUsage Id="12e4adac-2b63-480a-beaf-90ff71f2dc18">
<ModelElementId>65f2e47b-7af5-4a83-8ef8-23221bf7e937</ModelElementId>
</GroupPortUsage>
</TargetUsages>
</Variable>
<Variable Id="3b4f283a-d376-4bbc-8717-cb4b3d88342e">
<Name>xNotHaltRestart</Name>
<SourceUsages>
<AliasDeviceIoUsage Id="52d8ae0e-25fa-465c-a970-62b009ed20d6">
<SdsId>28</SdsId>
<ChannelId>1</ChannelId>
<FunctionId>1131179973</FunctionId>
</AliasDeviceIoUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="346a3822-ed04-4fde-b077-52f1bf6c8a13">
<ModelElementId>f40fa17f-ee60-40e6-afd0-a4ff3f333ac1</ModelElementId>
</FbPortUsage>
<FbPortUsage Id="a31f1a6e-c6d7-4f76-84c0-593dc80c2942">
<ModelElementId>497dfd32-770c-4ea1-8d8b-42400c79a8b8</ModelElementId>
</FbPortUsage>
<FbPortUsage Id="81e8678c-cf7d-43d1-b14e-3c90fcb3e005">
<ModelElementId>336968a3-e5f5-4dd8-a188-11d2e30ce80e</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
<Variable Id="76c1a103-19fb-44e4-ab23-4ac096cb2fac">
<Name>xNotHaltTuerWestCh1</Name>
<SourceUsages>
<AliasDeviceIoUsage Id="5195b423-08a7-4944-9bed-128f4a94058d">
<SdsId>14</SdsId>
<ChannelId>9</ChannelId>
<FunctionId>1614872833</FunctionId>
</AliasDeviceIoUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="ea36c8b2-efd5-46f5-a835-eb3e35569f19">
<ModelElementId>64515727-5f9a-4ef4-974a-7ade4f8c0d7e</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
<Variable Id="302f2cc9-466b-4cb8-ac1f-a556b1dfd382">
<Name>xNotHaltTuerWestCh2</Name>
<SourceUsages>
<AliasDeviceIoUsage Id="469f99eb-7479-4d40-8d62-ffe3ab1a3997">
<SdsId>14</SdsId>
<ChannelId>11</ChannelId>
<FunctionId>1615921409</FunctionId>
</AliasDeviceIoUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="3919fcd7-33d4-490e-87e5-5ad3fff1d598">
<ModelElementId>5203a339-fdf3-49a3-949c-21580a00e54e</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
<Variable Id="36d412ed-4294-44b7-929d-f6cea8e5ef61">
<Name>xNotHaltTuerNordCh1</Name>
<SourceUsages>
<AliasDeviceIoUsage Id="eb5d07aa-5c6f-4c59-86ea-8eaa4df30ae6">
<SdsId>14</SdsId>
<ChannelId>13</ChannelId>
<FunctionId>1616969985</FunctionId>
</AliasDeviceIoUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="4bb95c2b-3b9f-4e73-9c4f-77a38bce53eb">
<ModelElementId>b0e41880-05c6-4369-96c8-e159ad9f71b9</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
<Variable Id="da993469-9e03-494e-b7ff-aaa36b4ef23b">
<Name>xNotHaltTuerNordCh2</Name>
<SourceUsages>
<AliasDeviceIoUsage Id="f06950e5-fe99-4510-9663-ce0fc0616cc0">
<SdsId>14</SdsId>
<ChannelId>15</ChannelId>
<FunctionId>1618018561</FunctionId>
</AliasDeviceIoUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="8205ccc3-0c2f-4d13-8036-b37d78d31ee5">
<ModelElementId>a84723e7-49ae-438e-a184-3cd0a05ad119</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
<Variable Id="470a26a4-f34a-41f5-9dc7-8b857cf4fdda">
<Name>xNotHaltRegalString1Ok</Name>
<SourceUsages>
<FbPortUsage Id="544b610d-0c8e-41b0-b22a-50781eaa3c73">
<ModelElementId>5257f24c-a541-4d7e-a17c-47c0eb1c0658</ModelElementId>
</FbPortUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="8f55662e-9514-4f80-adfc-74c7c488fc94">
<ModelElementId>34590447-ed64-453b-a1b9-a2c43b9ea301</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
<Variable Id="a206d633-4703-4d1d-b69b-7558aa4b78f1">
<Name>xNotHaltRegalString2Ok</Name>
<SourceUsages>
<FbPortUsage Id="276c6fe1-06ba-41a9-a7af-168bfadb8f51">
<ModelElementId>e592f68f-b4c4-4a31-9939-cfe184190178</ModelElementId>
</FbPortUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="ef267542-db9d-4032-acde-bc7a414a4659">
<ModelElementId>7d674340-ae8f-4834-bfc9-50845e6344e7</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
<Variable Id="34175068-eb12-4ad7-ac89-538b91b7f333">
<Name>xNotHaltRegalString1OkDelay</Name>
<SourceUsages>
<FbPortUsage Id="b1801235-cc04-43da-897d-e7aff47d4166">
<ModelElementId>3f849045-0b93-4743-8e4f-168a6bcf5af1</ModelElementId>
</FbPortUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="9415cf4c-d4cb-402b-a172-9418d845837c">
<ModelElementId>437b7852-b2f1-47fa-8d91-5eb8a49ea9f6</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
<Variable Id="00334237-19c0-45b1-a8f2-4c034ae45ee0">
<Name>xNotHaltRegalString2OkDelay</Name>
<SourceUsages>
<FbPortUsage Id="b629d26d-451b-4b4c-b564-74407792e735">
<ModelElementId>8f1f6df5-d9cf-4c65-8a05-70dcbe95667a</ModelElementId>
</FbPortUsage>
</SourceUsages>
<TargetUsages>
<FbPortUsage Id="a025a4b8-f286-4167-a489-48b95dd52e8c">
<ModelElementId>f12cd8e1-ce57-4e8d-bce8-837114286a11</ModelElementId>
</FbPortUsage>
</TargetUsages>
</Variable>
</GlobalVariables>

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Crc="176752349" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{2334894d-aaaf-4180-8968-1bd4b960b0f8}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>TwinCAT3SafePlcProject</RootNamespace>
<AssemblyName>TwinCAT3SafePlcProject</AssemblyName>
<FileUpgradeFlags />
<UpgradeBackupLocation />
<OldToolsVersion>2.0</OldToolsVersion>
<TargetSystem>EL6900</TargetSystem>
<ProgrammingLanguage>Graphical Editor</ProgrammingLanguage>
<Worker>M. Heisig</Worker>
<IntProjName>Haup-Not-Halt</IntProjName>
<IsNewCreated>false</IsNewCreated>
<SPlcProjVersion>1.8.0.0</SPlcProjVersion>
<NextSdsId>30</NextSdsId>
<Name>MainSafetyPLC</Name>
<SortMode>2</SortMode>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugSymbols>false</DebugSymbols>
<OutputPath>bin\Release\</OutputPath>
<EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<None Include="GVLs\GVL1.sgvl" />
<None Include="NotHaltString1\Alias Devices\NotHaltInterface.sds" />
<None Include="NotHaltString1\NotHaltString1.sal" />
<None Include="NotHaltString1\NotHaltString1.sal.diagram">
<Visible>false</Visible>
<DependentUpon>NotHaltString1\NotHaltString1.sal</DependentUpon>
</None>
<None Include="NotHaltString2\Alias Devices\NotHAltInterface.sds" />
<None Include="NotHaltString2\NotHaltString2.sal" />
<None Include="NotHaltString2\NotHaltString2.sal.diagram">
<Visible>false</Visible>
<DependentUpon>NotHaltString2\NotHaltString2.sal</DependentUpon>
</None>
<None Include="Not_Halt_Global\Alias Devices\-45K1 %28EL1918%29 - Module 1 %28FSOE%29.sds" />
<None Include="Not_Halt_Global\Alias Devices\-46K1 %28EL2904%29 - Module 1 %28FSOES%29.sds" />
<None Include="Not_Halt_Global\Alias Devices\ErrorAck.sds" />
<None Include="Not_Halt_Global\Alias Devices\EStopOk.sds" />
<None Include="Not_Halt_Global\Alias Devices\NotHaltRestart.sds" />
<None Include="Not_Halt_Global\Alias Devices\Run.sds" />
<None Include="Not_Halt_Global\Not_Halt_Global.sal" />
<None Include="Not_Halt_Global\Not_Halt_Global.sal.diagram">
<DependentUpon>Not_Halt_Global\Not_Halt_Global.sal</DependentUpon>
<Visible>false</Visible>
</None>
<None Include="TargetSystemConfig.xml">
<Visible>false</Visible>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="GVLs" />
<Folder Include="NotHaltString1" />
<Folder Include="NotHaltString1\Alias Devices" />
<Folder Include="NotHaltString2" />
<Folder Include="NotHaltString2\Alias Devices" />
<Folder Include="Not_Halt_Global" />
<Folder Include="Not_Halt_Global\Alias Devices" />
<Folder Include="User FBs" />
</ItemGroup>
<ProjectExtensions />
</Project>

View File

@@ -0,0 +1,224 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="3807308941" FileFormatVersion="1.9">
<AliasDeviceType>
<Type>16</Type>
<SubType>0</SubType>
<VendorId>0</VendorId>
</AliasDeviceType>
<SDSID>26</SDSID>
<SafetyAliasDevice>
<ObjectId>0</ObjectId>
<LinkingMode>Manual</LinkingMode>
<ConnectionId>26</ConnectionId>
<ConnectionMode>master</ConnectionMode>
<ConnectionType>FSoE</ConnectionType>
<MapDiag>false</MapDiag>
<MapInputs>false</MapInputs>
<MapOutputs>false</MapOutputs>
<MapState>false</MapState>
<ModuleFaultIsComErr>false</ModuleFaultIsComErr>
<SafeAddress>100</SafeAddress>
<Watchdog>100</Watchdog>
<ComErrAck Type="Unset" />
<Messages InputMessageSize="6" OutputMessageSize="6" Tc2ConnectionType="190853202" CustomFSoEConnectionId="abaabd0a-ce90-4f58-aa2b-1505f1e3352d">
<IO>
<Name>FSoE Cmd</Name>
<DataType>USINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[0]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[1]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>9</BitOffsMessage>
<BitOffsData>1</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[2]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>10</BitOffsMessage>
<BitOffsData>2</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[3]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>11</BitOffsMessage>
<BitOffsData>3</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[4]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>12</BitOffsMessage>
<BitOffsData>4</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[5]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>13</BitOffsMessage>
<BitOffsData>5</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[6]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>14</BitOffsMessage>
<BitOffsData>6</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[7]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>15</BitOffsMessage>
<BitOffsData>7</BitOffsData>
</IO>
<IO>
<Name>FSoE CRC_0</Name>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE ConnID</Name>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>32</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Cmd</Name>
<DataType>USINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[0]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[1]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>9</BitOffsMessage>
<BitOffsData>1</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[2]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>10</BitOffsMessage>
<BitOffsData>2</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[3]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>11</BitOffsMessage>
<BitOffsData>3</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[4]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>12</BitOffsMessage>
<BitOffsData>4</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[5]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>13</BitOffsMessage>
<BitOffsData>5</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[6]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>14</BitOffsMessage>
<BitOffsData>6</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[7]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>15</BitOffsMessage>
<BitOffsData>7</BitOffsData>
</IO>
<IO>
<Name>FSoE CRC_0</Name>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE ConnID</Name>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>32</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
</Messages>
</SafetyAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,297 @@
<?xml version="1.0" encoding="utf-8"?>
<safetyApplication Crc="3987103492" xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="1.5.0.0" Id="ee0f6780-d690-4a7b-bca6-dedf942a933e" name="" mapState="false" mapDiag="false" groupOrderId="0" passificationAllowed="false" temporaryDeactivationAllowed="true" permamentDeactivationAllowed="true" xmlid="0" analogFBOutputReplacementValues="Zero" verifyAnalogFBInputsIfStart="false" userFbId="00000000-0000-0000-0000-000000000000" xmlns="http://schemas.microsoft.com/dsltools/SafetyApplicationLanguage">
<networks>
<safetyApplicationHasNetworks Id="0128b245-705e-4f3e-bf21-12c6b95cf2f3">
<Network Id="8b3e94c9-8993-4028-8d2f-eefe0ea6472c" name="Network1" networkName="Network1" intId="1" networkOrderId="0">
<functionBlocks>
<networkHasFunctionBlocks Id="597364c8-80c4-4005-b908-f11e3f449c03">
<fBDecouple Id="28554a79-065c-4a03-8f1c-16e41bbcaec8" name="FBDecouple1" instanceName="FBDecouple1" orderOfExecution="1" mapState="false" mapDiag="false" functionName="safeDecouple">
<inPorts>
<functioBlockHasInPorts Id="eeaf911c-9db2-4aae-9da2-477ebd9c021a">
<inPort Id="fe6d9c1e-be3a-4054-a12e-2d99ec66f013" name="DecIn1" portName="DecIn1" portNum="3" objectIndex="8" varId="5" filter="2" portDataType="1" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="69424764-eae2-4134-9e66-37901691a649">
<fbPortGlobalVariableReference Id="6ba2b935-22af-4a62-abb8-ad7d83e32586" variableId="b61d0fc0-cc9f-462c-87a0-7ca3a2a7ddd0" lastKnownPath="GVL1.xNotHaltDelayOk" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="67f67cc2-a0e8-42e2-8aae-a5d5f62e0387">
<inPort Id="0e4972d6-856e-4eca-8936-f1ea87a32e09" name="DecIn2" portName="DecIn2" portNum="4" objectIndex="9" varId="6" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="dd6c5907-a353-4ad7-acf9-6dd52391a0b3">
<inPort Id="45f8a34d-bb6a-419b-b963-df2c945fed48" name="DecIn3" portName="DecIn3" portNum="5" objectIndex="10" varId="7" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="76fadd4e-5575-45a8-a5c4-c759ddad43fa">
<inPort Id="9fcec6cf-3491-4d93-9366-63045991436e" name="DecIn4" portName="DecIn4" portNum="6" objectIndex="11" varId="8" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="f8956d06-9688-479b-a28f-dd17ce00a08d">
<inPort Id="597ce623-5649-46f7-8033-f1187be18b4a" name="DecIn5" portName="DecIn5" portNum="7" objectIndex="12" varId="9" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="21ae088b-a0e1-40d6-a02f-a556678a3136">
<inPort Id="b1c1df3a-d1c8-4fb0-90fd-2dc11f11538e" name="DecIn6" portName="DecIn6" portNum="8" objectIndex="13" varId="10" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="76d80d11-4693-4a8f-80de-d40de509b904">
<inPort Id="21272489-f155-419e-9214-25fa98f755c3" name="DecIn7" portName="DecIn7" portNum="9" objectIndex="14" varId="11" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="5c5c0ee0-b6c8-49fd-9b96-e84558abff5f">
<inPort Id="88329205-ce9e-40b5-8e29-c1a98a747766" name="DecIn8" portName="DecIn8" portNum="10" objectIndex="15" varId="12" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="f8a236a9-8b8f-43a8-b123-c6b48aff3bdc">
<outPort Id="7576d183-d9ec-437a-9d04-f18b8d2eb195" name="DecOut1" portName="DecOut1" portNum="3" objectIndex="8" varId="17" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="f4344bba-4d63-4507-849b-3d978bab5cf3">
<outPort Id="8751d36c-1b61-4462-8272-06b4051c31b0" name="DecOut2" portName="DecOut2" portNum="4" objectIndex="9" varId="18" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="013eed64-9ada-475e-a736-d32eab950b9c">
<outPort Id="f6f40aa5-9256-4bd6-9682-7ba7bbbf2c98" name="DecOut3" portName="DecOut3" portNum="5" objectIndex="10" varId="19" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="8e64fa34-7a60-4b9e-a752-d5bdd4f5b42e">
<outPort Id="87d37faa-0bc0-42fa-b6ea-51c1b9bbe2a3" name="DecOut4" portName="DecOut4" portNum="6" objectIndex="11" varId="20" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="bffa8eb6-8f33-4ab3-9361-29f606effd18">
<outPort Id="93423867-942e-4732-9ff2-16744746788c" name="DecOut5" portName="DecOut5" portNum="7" objectIndex="12" varId="21" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="3e87e127-648a-402f-bd9b-faf6de48856c">
<outPort Id="bbbe4388-076a-4aca-866d-c77ca7308e75" name="DecOut6" portName="DecOut6" portNum="8" objectIndex="13" varId="22" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="9724ede9-7985-4684-a397-55d9b963451d">
<outPort Id="9e5e23af-7aa5-4ea5-9889-216dafc85f73" name="DecOut7" portName="DecOut7" portNum="9" objectIndex="14" varId="23" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="ec7852b4-5f35-4128-818f-04d882e1695b">
<outPort Id="57bda647-3747-4e2e-b724-eb146f25a126" name="DecOut8" portName="DecOut8" portNum="10" objectIndex="15" varId="24" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
</outPorts>
</fBDecouple>
</networkHasFunctionBlocks>
</functionBlocks>
</Network>
</safetyApplicationHasNetworks>
<safetyApplicationHasNetworks Id="90d5d4e6-4f1e-4628-b733-144c9de76cd2">
<Network Id="671fb8c4-89cf-44be-8d23-cbb6701fd61e" name="Network2" networkName="Network2" intId="2" networkOrderId="1">
<functionBlocks>
<networkHasFunctionBlocks Id="f5bccaca-47e4-49db-8768-2e8ce3056245">
<fBEstop Id="4559e424-0981-4a85-b7cc-1dc0ccd1402e" name="FBEstop1" instanceName="FBEstop1" orderOfExecution="2" mapState="false" mapDiag="false" functionName="safeEstop" safeInputsAfterDiscError="true">
<inPorts>
<functioBlockHasInPorts Id="99543c9a-c578-4231-9661-a7be54d0c76a">
<inPort Id="497dfd32-770c-4ea1-8d8b-42400c79a8b8" name="Restart" portName="Restart" portNum="2" objectIndex="0" varId="1" filter="3" portDataType="1" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="7cceb12e-cc05-44ac-94e5-bbe7a80d67b1">
<fbPortGlobalVariableReference Id="296b1094-2edc-4e64-a25c-c197dc359662" variableId="3b4f283a-d376-4bbc-8717-cb4b3d88342e" lastKnownPath="GVL1.xNotHaltRestart" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="80bd272c-3ec8-4fd5-b42f-99dbe7b85fb6">
<inPort Id="8f4735d3-2ce2-4771-ba00-54e5f6567269" name="EStopIn1" portName="EStopIn1" portNum="4" objectIndex="8" varId="3" filter="2" portDataType="1" channelInterface="Two-Channel" discrepancyTime="100" deactivate1="Break Contact (NC)" deactivate2="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="b8763669-4c36-4061-ac05-f5f285139c33">
<inPort Id="65be6133-a359-4aab-8f4c-0d983aaaab2f" name="EStopIn2" portName="EStopIn2" portNum="5" objectIndex="9" varId="4" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="42c86461-6936-43cc-a130-768353224eb7">
<inPort Id="5264fae5-29d3-498e-b2ae-1247fd18b1f3" name="EStopIn3" portName="EStopIn3" portNum="6" objectIndex="10" varId="5" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="1460bdd1-b085-419a-9397-c2f13846d5bb">
<inPort Id="9bc7d598-3230-4992-85cc-9d55a1ebb4f4" name="EStopIn4" portName="EStopIn4" portNum="7" objectIndex="11" varId="6" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="c9f6ec40-0d88-4032-9c23-60c05aa681c5">
<inPort Id="0b949dcb-b246-4595-9507-c9ed36c6a5f1" name="EStopIn5" portName="EStopIn5" portNum="8" objectIndex="12" varId="7" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="0f987205-ab14-40ad-9ec0-4d1323b40512">
<inPort Id="0b89af62-dc43-4b92-baf0-bb227ea062fa" name="EStopIn6" portName="EStopIn6" portNum="9" objectIndex="13" varId="8" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="1c02c553-e882-4f5b-88ac-c03bd8fec13f">
<inPort Id="d4d86a3d-f795-4951-9f8e-4f37fcda55bc" name="EStopIn7" portName="EStopIn7" portNum="10" objectIndex="14" varId="9" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="585c08cd-8d08-4e23-aca3-ead3e434563b">
<inPort Id="62b181b3-e033-4f24-b742-8c9920eadb5f" name="EStopIn8" portName="EStopIn8" portNum="11" objectIndex="15" varId="10" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="75ca15a3-99cf-4388-813b-e27c4f6970f8">
<inPort Id="cae43924-b9fd-484e-8d4b-0eb8e678040b" name="EDM1" portName="EDM1" portNum="13" objectIndex="1" varId="12" filter="3" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="eb16d72f-4f48-4be0-997e-e8e0f605eac7">
<inPort Id="a5f6b637-d894-4275-89d9-5917f08c90b0" name="EDM2" portName="EDM2" portNum="14" objectIndex="2" varId="13" filter="3" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="0a9741e4-91bf-427e-8e46-47b98c429f21">
<outPort Id="eadf126d-30c6-44af-9303-689245516d46" name="Error" portName="Error" portNum="4" objectIndex="0" varId="16" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="a92f7e81-dc0b-4719-bdfe-375c50e630b1">
<outPort Id="5257f24c-a541-4d7e-a17c-47c0eb1c0658" name="EStopOut" portName="EStopOut" portNum="11" objectIndex="1" varId="23" filter="7" portDataType="1" replacementValue="1">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="eecb2744-5c10-44ec-b99f-25b03bc2b7ef">
<fbPortGlobalVariableReference Id="6722c939-f096-474c-8644-626606a23c14" variableId="470a26a4-f34a-41f5-9dc7-8b857cf4fdda" lastKnownPath="GVL1.xNotHaltRegalString1Ok" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</outPort>
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="379edb31-c68b-4f0b-9fdc-2685efdbeaca">
<outPort Id="3f849045-0b93-4743-8e4f-168a6bcf5af1" name="EStopDelOut" portName="EStopDelOut" portNum="12" objectIndex="2" varId="26" filter="7" portDataType="1" replacementValue="1">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="45f23705-d80c-424a-a287-ee5722cc19bb">
<fbPortGlobalVariableReference Id="1907cab7-0053-4fa1-86c0-fdd12b7ef9c8" variableId="34175068-eb12-4ad7-ac89-538b91b7f333" lastKnownPath="GVL1.xNotHaltRegalString1OkDelay" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</outPort>
</functionBlockHasOutPorts>
</outPorts>
<parameterPorts>
<functionBlockHasParamPorts Id="ec4d6418-354e-48c3-8747-e8162644a6ff">
<parameterPort Id="413d15bf-3532-4dc9-bcdd-4c79d5a31dc7" name="Delay Time (ms)" portName="Delay Time (ms)" portNum="8" objectIndex="0" varId="0" filter="0" portDataType="0" timing="100" userFbPortName="Delay Time (ms)" useInUserFb="false" />
</functionBlockHasParamPorts>
</parameterPorts>
</fBEstop>
</networkHasFunctionBlocks>
</functionBlocks>
</Network>
</safetyApplicationHasNetworks>
</networks>
<twinSAFEGroupAliasPorts>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="c66ef078-cf59-4438-8086-6bcea2342270">
<twinSAFEGroupAliasPort Id="9ed1be77-693c-4094-a86b-db09b880ab2a" name="RunStop" sdsId="0" channelId="0" portName="RunStop" functionId="0">
<groupPortGlobalVariableReferences>
<twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences Id="bd621344-2ae3-4fd6-8dd9-14ca57123492">
<groupPortGlobalVariableReference Id="81de0ecc-4910-410d-8d6a-81c54ad749f3" variableId="6d45e67f-50df-4b61-a9d0-03f285b6a1bf" lastKnownPath="GVL1.xRun" />
</twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences>
</groupPortGlobalVariableReferences>
</twinSAFEGroupAliasPort>
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="8a692264-2060-4a74-a21b-ab951ec95b03">
<twinSAFEGroupAliasPort Id="277b38b0-bc98-441b-8265-96adb0e90c94" name="ErrAck" sdsId="0" channelId="0" portName="ErrAck" functionId="0">
<groupPortGlobalVariableReferences>
<twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences Id="23e0a16e-7cd4-4bdd-b425-4d363bec6f1a">
<groupPortGlobalVariableReference Id="885bcbe4-7852-42c3-926c-41fd6fbdda4d" variableId="9f1c118d-b0f2-4f34-abb9-b4b05f111bfd" lastKnownPath="GVL1.xErrorAck" />
</twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences>
</groupPortGlobalVariableReferences>
</twinSAFEGroupAliasPort>
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="9fed88f7-84fc-4ad5-91fe-5daa3e39acd6">
<twinSAFEGroupAliasPort Id="d290cbf2-63ae-4e8d-a334-bb186d9f3905" name="ModuleFault" sdsId="0" channelId="0" portName="ModuleFault" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="805b07d6-2c38-4354-8e33-d29f8a10a047">
<twinSAFEGroupAliasPort Id="80e1ef3d-ded0-400f-b7db-4cb1e3dad9dd" name="FbErr" sdsId="0" channelId="0" portName="FbErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="bf19db4a-503b-4863-8441-443423008f81">
<twinSAFEGroupAliasPort Id="0c968d94-b03a-44de-a58b-9ac9cccab7dd" name="ComErr" sdsId="0" channelId="0" portName="ComErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="9f3fdfef-acd1-4bc9-9efb-c873185b489c">
<twinSAFEGroupAliasPort Id="7cf2bfb7-dcb8-40d9-8f4d-360fdd25833c" name="OutErr" sdsId="0" channelId="0" portName="OutErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="8e9f83e7-d8fa-4635-9705-ab1220bd96bb">
<twinSAFEGroupAliasPort Id="505dd148-638b-4bc8-a3b8-37fa13c4a409" name="OtherErr" sdsId="0" channelId="0" portName="OtherErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="ef913215-7d3e-4d88-8fe8-9426f8d443b7">
<twinSAFEGroupAliasPort Id="de68f000-ed24-4cbd-9726-9b7f544e0a58" name="ComStartup" sdsId="0" channelId="0" portName="ComStartup" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="159ac469-554c-4bbd-aa99-010c0202cf16">
<twinSAFEGroupAliasPort Id="e9f240ac-770c-4557-b9e5-ec68b0556509" name="FbDeactive" sdsId="0" channelId="0" portName="FbDeactive" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="82cec40f-e863-4212-8f0b-93be5cec2110">
<twinSAFEGroupAliasPort Id="2842f29e-87d6-473b-9811-c02fe2c2cbd5" name="FbRun" sdsId="0" channelId="0" portName="FbRun" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="3ffdd80b-d5a6-42b0-afa4-858a2c87f8ef">
<twinSAFEGroupAliasPort Id="64e40965-3084-448a-9fa8-a69b9c4f5d1f" name="InRun" sdsId="0" channelId="0" portName="InRun" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
</twinSAFEGroupAliasPorts>
<variables>
<safetyApplicationHasVariables Id="9aa82846-c29d-42d1-b59d-941b37194a15">
<variable Id="bc11f417-d5a7-4c81-9b18-13121cad94cc" name="NotHaltOk" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="e0c705dd-fc59-4038-902c-5d111ba29382">
<variableUsages Id="ccf315f0-8d99-43c7-be3f-9bb2cf1bed20">
<usages>
<variableUsagesHasUsages Id="ef7e754b-a11b-4a41-b022-4529046048c5">
<fbPortUsage Id="a6f7e0b4-0628-495b-960e-9575b1083d3f">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="596d727f-3ecc-49cd-a682-0d8896890f2f">
<outPortMoniker name="//Network1/FBDecouple1/DecOut1" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="e9230a58-baf1-4c8b-81af-be0ce67d9748">
<variableUsages Id="6638588a-bb03-46c2-af2c-14dac0094d78">
<usages>
<variableUsagesHasUsages Id="204c881d-4803-412a-b853-09326d838503">
<aliasDeviceIoUsage Id="ded07e9d-0a4c-4880-919c-f710ab3a9e6e" sdsId="26" channelId="1" functionId="1327546135" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="9f4514e1-9b93-4f77-98e3-b4f82c8d63a0">
<variable Id="4f4b32ec-8210-4d12-bf74-c098b4f1a4fe" name="xNotHaltCh1VonStringOk" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="3c5f9a39-8613-49cc-a4fd-1ecbbff75b1f">
<variableUsages Id="9d091da7-e8a1-4fe7-ae2a-15f406c76581">
<usages>
<variableUsagesHasUsages Id="6320735a-129d-4a25-a59b-4cb581d1ca0f">
<aliasDeviceIoUsage Id="3f4f18b1-9f0e-438f-8bc8-f8a4dc2f2d4d" sdsId="26" channelId="2" functionId="1327742742" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="754eff0f-0cff-476a-96c1-baaf167d5021">
<variableUsages Id="b861d26b-f707-4973-8bc2-9b1282177455">
<usages>
<variableUsagesHasUsages Id="d03fbf7b-e370-415e-b061-b0716140cec4">
<fbPortUsage Id="4ef3ac4c-4e1c-4e13-ad3a-252c095a0e36">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="d4e5b88f-dfb6-4ef5-8c69-456c66527a90">
<inPortMoniker name="//Network2/FBEstop1/EStopIn1" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="b1cf7cb5-8947-429e-ad64-defc8f9df912">
<variable Id="7d9a55d3-e277-4606-ab22-db87bed9ce87" name="xNotHaltCh2VonStringOk" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="9cf33fd7-a70d-4166-9b8b-e84d745a98b9">
<variableUsages Id="4c3c6e01-3fa1-4c82-b41b-829f00111784">
<usages>
<variableUsagesHasUsages Id="b4a81de1-551e-45ba-bc58-49388e8d2477">
<aliasDeviceIoUsage Id="875b0684-6575-4081-8310-711b7f7c3ed7" sdsId="26" channelId="3" functionId="1327939349" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="259937ce-9093-4fc3-92d3-002768d25147">
<variableUsages Id="677c0be5-b6ff-4da0-bc9c-446cc1adb084">
<usages>
<variableUsagesHasUsages Id="8194dfa1-0570-4d34-a346-ef281f46c781">
<fbPortUsage Id="da53a1a5-febc-4674-a44f-2e5651cd3d07">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="8f2570bb-7716-4753-a25f-ebed540e5881">
<inPortMoniker name="//Network2/FBEstop1/EStopIn2" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
</variables>
</safetyApplication>

View File

@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<safetyApplicationLanguageDiagram Crc="3534160807" dslVersion="1.5.0.0" Id="6a903db0-1314-42cd-bc4c-fcb7e44ad0d1" absoluteBounds="0, 0, 11, 9.75" name="TwinSAFE">
<safetyApplicationMoniker name="/" />
<nestedChildShapes>
<networkSwimLane Id="7571e71f-182c-4172-8cf4-2d012c18b176" absoluteBounds="0, 0, 11, 4.125">
<networkMoniker name="//Network1" />
<nestedChildShapes>
<fBDecoupleShape Id="087e3fdc-6120-4372-afda-b09e7c23e6a8" absoluteBounds="2.25, 0.625, 2.75, 3.25">
<fBDecoupleMoniker name="//Network1/FBDecouple1" />
<relativeChildShapes>
<inPortShape Id="27ee5ff7-322a-4c9d-9c42-569b015ae30a" absoluteBounds="2.17, 1.6400000000000001, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="71d3faca-a0d6-4e3c-a15a-cadb38497346" absoluteBounds="2.17, 1.9100000000000001, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn2" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="bec2fae0-6593-44f3-b6d2-6b1de0a321e5" absoluteBounds="2.17, 2.18, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn3" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="5b9bc803-1f5a-4625-bdb2-5626ca963d87" absoluteBounds="2.17, 2.45, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn4" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="7236342e-2ab5-41ba-933d-7f76ce2e2535" absoluteBounds="2.17, 2.72, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn5" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="0b574dec-8c37-4426-a740-68cbe90dabef" absoluteBounds="2.17, 2.99, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn6" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="4b2ada7d-594a-471f-873d-8868b34db152" absoluteBounds="2.17, 3.2600000000000002, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn7" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="337aab8f-67e8-4c96-8682-e21c0b88aa43" absoluteBounds="2.17, 3.5300000000000002, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn8" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="3046d073-e732-4ac2-bca0-b16a1bbffd6a" absoluteBounds="4.9, 1.6400000000000001, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut1" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="25d10ae8-7ae8-4755-9f3b-4b4227551dec" absoluteBounds="4.9, 1.9100000000000001, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut2" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="aa333d93-15e8-46ea-bf74-8f022ddfe12b" absoluteBounds="4.9, 2.18, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut3" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="49e56f6b-c0cc-48df-8460-8347e5ad6156" absoluteBounds="4.9, 2.45, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut4" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="ebca63de-f53b-448b-af36-b9ea8394f176" absoluteBounds="4.9, 2.72, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut5" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="8f815592-38ab-4fc6-84be-6e536f90faf4" absoluteBounds="4.9, 2.99, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut6" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="8039e4a7-f8ce-4f42-9871-7897326b0ee0" absoluteBounds="4.9, 3.2600000000000002, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut7" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="45c7629c-5fda-41a3-89ca-2a47c46dde69" absoluteBounds="4.9, 3.5300000000000002, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut8" />
<relativeChildShapes />
</outPortShape>
</relativeChildShapes>
</fBDecoupleShape>
</nestedChildShapes>
</networkSwimLane>
<networkSwimLane Id="eab9c0a7-1dde-415d-a4b5-9db31be1354d" absoluteBounds="0, 4.125, 11, 5.5749999999999993">
<networkMoniker name="//Network2" />
<nestedChildShapes>
<fBEstopShape Id="01c72b15-4632-4618-86ca-2172aadb0184" absoluteBounds="2.125, 5, 3.35, 4.45">
<fBEstopMoniker name="//Network2/FBEstop1" />
<relativeChildShapes>
<inPortShape Id="9631c848-fe4d-47dd-8826-8331c2f8a8b4" absoluteBounds="2.045, 5.745, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/Restart" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="5ce7055d-cbff-499e-a949-c838f2fb86d2" absoluteBounds="2.045, 6.3075, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="b0766009-a770-4b2b-a6f7-4d53d17e4f45" absoluteBounds="2.045, 6.5325000000000006, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn2" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="942d4549-ac31-429d-9b17-5ce6e5a39586" absoluteBounds="2.045, 6.8475, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn3" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="3045d2af-4340-4323-a9d8-7f77684167ef" absoluteBounds="2.045, 7.0725, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn4" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="dd20b80e-896a-4443-9eed-18eff5e7f759" absoluteBounds="2.045, 7.3875, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn5" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="37022ebe-009d-4d17-b324-cf949811a597" absoluteBounds="2.045, 7.6125000000000007, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn6" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="a4187ce4-577b-432c-8ec0-90c20f595f2f" absoluteBounds="2.045, 7.9275, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn7" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="cd526d43-8c17-465c-b7d2-d070a14ba128" absoluteBounds="2.045, 8.1525, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn8" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="5fc5b2f6-4e30-43c4-8558-2b766b0892f7" absoluteBounds="2.045, 8.7375, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EDM1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="be73515c-3de3-4839-b987-aba4fe0b768b" absoluteBounds="2.045, 8.9625, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EDM2" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="5a77006b-bc52-43a3-a3eb-57b5e7e40865" absoluteBounds="5.375, 6.285, 0.15, 0.15">
<outPortMoniker name="//Network2/FBEstop1/Error" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="97e3206d-f5ca-442f-910a-9936c59a58b4" absoluteBounds="5.375, 8.175, 0.15, 0.15">
<outPortMoniker name="//Network2/FBEstop1/EStopOut" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="72763423-c0e4-4ada-a6c7-111949a1de86" absoluteBounds="5.375, 8.445, 0.15, 0.15">
<outPortMoniker name="//Network2/FBEstop1/EStopDelOut" />
<relativeChildShapes />
</outPortShape>
<paramPortShape Id="1fc969ee-8a2f-49f0-adfb-d8778826c428" absoluteBounds="3.695, 8.275, 0.7, 0.2">
<parameterPortMoniker name="//Network2/FBEstop1/Delay Time (ms)" />
<relativeChildShapes />
</paramPortShape>
</relativeChildShapes>
</fBEstopShape>
</nestedChildShapes>
</networkSwimLane>
</nestedChildShapes>
</safetyApplicationLanguageDiagram>

View File

@@ -0,0 +1,224 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="4239964616" FileFormatVersion="1.9">
<AliasDeviceType>
<Type>16</Type>
<SubType>0</SubType>
<VendorId>0</VendorId>
</AliasDeviceType>
<SDSID>27</SDSID>
<SafetyAliasDevice>
<ObjectId>0</ObjectId>
<LinkingMode>Manual</LinkingMode>
<ConnectionId>27</ConnectionId>
<ConnectionMode>master</ConnectionMode>
<ConnectionType>FSoE</ConnectionType>
<MapDiag>false</MapDiag>
<MapInputs>false</MapInputs>
<MapOutputs>false</MapOutputs>
<MapState>false</MapState>
<ModuleFaultIsComErr>false</ModuleFaultIsComErr>
<SafeAddress>101</SafeAddress>
<Watchdog>100</Watchdog>
<ComErrAck Type="Unset" />
<Messages InputMessageSize="6" OutputMessageSize="6" Tc2ConnectionType="190853202" CustomFSoEConnectionId="0cd2d33d-0aa6-477d-a159-9ea1f745f3fb">
<IO>
<Name>FSoE Cmd</Name>
<DataType>USINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[0]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[1]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>9</BitOffsMessage>
<BitOffsData>1</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[2]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>10</BitOffsMessage>
<BitOffsData>2</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[3]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>11</BitOffsMessage>
<BitOffsData>3</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[4]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>12</BitOffsMessage>
<BitOffsData>4</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[5]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>13</BitOffsMessage>
<BitOffsData>5</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[6]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>14</BitOffsMessage>
<BitOffsData>6</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[7]</Name>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>15</BitOffsMessage>
<BitOffsData>7</BitOffsData>
</IO>
<IO>
<Name>FSoE CRC_0</Name>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE ConnID</Name>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>32</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Cmd</Name>
<DataType>USINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[0]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[1]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>9</BitOffsMessage>
<BitOffsData>1</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[2]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>10</BitOffsMessage>
<BitOffsData>2</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[3]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>11</BitOffsMessage>
<BitOffsData>3</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[4]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>12</BitOffsMessage>
<BitOffsData>4</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[5]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>13</BitOffsMessage>
<BitOffsData>5</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[6]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>14</BitOffsMessage>
<BitOffsData>6</BitOffsData>
</IO>
<IO>
<Name>Safe Data Byte 0[7]</Name>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>15</BitOffsMessage>
<BitOffsData>7</BitOffsData>
</IO>
<IO>
<Name>FSoE CRC_0</Name>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE ConnID</Name>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>32</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
</Messages>
</SafetyAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,297 @@
<?xml version="1.0" encoding="utf-8"?>
<safetyApplication Crc="3516787539" xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="1.5.0.0" Id="b38a6b49-94be-48df-a0af-960770d67d03" name="" mapState="false" mapDiag="false" groupOrderId="1" passificationAllowed="false" temporaryDeactivationAllowed="true" permamentDeactivationAllowed="true" xmlid="0" analogFBOutputReplacementValues="Zero" verifyAnalogFBInputsIfStart="false" userFbId="00000000-0000-0000-0000-000000000000" xmlns="http://schemas.microsoft.com/dsltools/SafetyApplicationLanguage">
<networks>
<safetyApplicationHasNetworks Id="dbcce1ba-bd17-4226-9b14-71a6ff95c8ef">
<Network Id="2d5ced6d-d23e-412b-9ab1-5f27590a2bf1" name="Network1" networkName="Network1" intId="1" networkOrderId="0">
<functionBlocks>
<networkHasFunctionBlocks Id="2ef70ce4-0cce-4d22-9310-bd07e33a5dc6">
<fBDecouple Id="4682813f-c7c8-43ea-ae36-871adcf098e7" name="FBDecouple1" instanceName="FBDecouple1" orderOfExecution="1" mapState="false" mapDiag="false" functionName="safeDecouple">
<inPorts>
<functioBlockHasInPorts Id="6f10205f-3b0b-4b3b-a41f-44b8827d9782">
<inPort Id="c7fc83ba-0893-453e-abca-62c3026cd20b" name="DecIn1" portName="DecIn1" portNum="3" objectIndex="8" varId="5" filter="2" portDataType="1" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="ebe28ca3-087b-4b14-8478-2b44a73ecbf2">
<fbPortGlobalVariableReference Id="262bc579-50d2-422d-822a-7c26187c8bb6" variableId="b61d0fc0-cc9f-462c-87a0-7ca3a2a7ddd0" lastKnownPath="GVL1.xNotHaltDelayOk" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="fcf16e24-b362-45ec-b195-a52ffc42c782">
<inPort Id="7f9c17f3-1205-4089-867b-504012d0c479" name="DecIn2" portName="DecIn2" portNum="4" objectIndex="9" varId="6" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="bab5bf14-027e-45fa-b905-6b6db8874e3c">
<inPort Id="c135b89f-481c-473f-b82c-ac947641dd56" name="DecIn3" portName="DecIn3" portNum="5" objectIndex="10" varId="7" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="4ed1ebac-5a03-4845-a5c0-454945ad4433">
<inPort Id="435e4b65-e3b6-44df-9e3a-9ed6eebc8594" name="DecIn4" portName="DecIn4" portNum="6" objectIndex="11" varId="8" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="7a60293b-202f-447b-b82e-6c105d5e82bb">
<inPort Id="4cf424eb-cd48-4329-a5b1-1ac17145497b" name="DecIn5" portName="DecIn5" portNum="7" objectIndex="12" varId="9" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="772fafb7-ae8b-4e15-9996-330964f0d283">
<inPort Id="156c0159-590f-46b5-97b8-26cee02a01e7" name="DecIn6" portName="DecIn6" portNum="8" objectIndex="13" varId="10" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="4d6ea89c-fd52-487c-af91-ddbaae361630">
<inPort Id="e3da6603-c5be-47ca-96fb-8a41a3fdbe88" name="DecIn7" portName="DecIn7" portNum="9" objectIndex="14" varId="11" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="eac9bfba-e20b-431c-b968-01bdff5795bb">
<inPort Id="3756bfce-c94a-487b-ac95-6492bad81191" name="DecIn8" portName="DecIn8" portNum="10" objectIndex="15" varId="12" filter="2" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="20a0aef9-49d7-420e-8b05-df50b5e3c357">
<outPort Id="56b1f05f-dd7d-48bb-a88c-15e9fef61d7f" name="DecOut1" portName="DecOut1" portNum="3" objectIndex="8" varId="17" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="8ce0bd6a-e547-4606-9001-e8d07ccc2757">
<outPort Id="4d2f21f7-5d21-44dd-9191-2ba857cc3030" name="DecOut2" portName="DecOut2" portNum="4" objectIndex="9" varId="18" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="98ce9987-b0ec-462b-a36f-864e9a5cc0a2">
<outPort Id="3bf9fb05-fae0-4aad-a497-1171c4ab450a" name="DecOut3" portName="DecOut3" portNum="5" objectIndex="10" varId="19" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="f5e38f30-127a-452a-a5a5-34cc9174bfc5">
<outPort Id="60c59950-693a-4c2f-a994-6bf4449d73fc" name="DecOut4" portName="DecOut4" portNum="6" objectIndex="11" varId="20" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="643586c1-4df6-4dc0-8c8f-6275ad0ebca7">
<outPort Id="e322da0b-2553-495b-9086-b603fd99a972" name="DecOut5" portName="DecOut5" portNum="7" objectIndex="12" varId="21" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="0f65e86d-f484-428f-a5a7-996141fb3203">
<outPort Id="988f194c-b5cd-4e6c-acb2-b6a1f4989db1" name="DecOut6" portName="DecOut6" portNum="8" objectIndex="13" varId="22" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="bf247b21-e609-4853-843a-24b0de9d76a9">
<outPort Id="b01cabb2-1ee3-4ab1-a385-7ed21938c5a5" name="DecOut7" portName="DecOut7" portNum="9" objectIndex="14" varId="23" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="0d9e0a91-b8d9-4115-a401-24fd5dc872e1">
<outPort Id="49a8533d-d76e-4bc9-8c54-7cf1f1b63562" name="DecOut8" portName="DecOut8" portNum="10" objectIndex="15" varId="24" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
</outPorts>
</fBDecouple>
</networkHasFunctionBlocks>
</functionBlocks>
</Network>
</safetyApplicationHasNetworks>
<safetyApplicationHasNetworks Id="88a6c5ed-e30f-488a-943a-67725ba04ccc">
<Network Id="500d2901-0227-4969-b0ac-284772103c07" name="Network2" networkName="Network2" intId="2" networkOrderId="1">
<functionBlocks>
<networkHasFunctionBlocks Id="6949ce0f-a3a0-4e83-a0a2-3ab107d1dd60">
<fBEstop Id="8321d8e5-7c8a-41a8-bc4f-86872b0c6b68" name="FBEstop1" instanceName="FBEstop1" orderOfExecution="2" mapState="false" mapDiag="false" functionName="safeEstop" safeInputsAfterDiscError="true">
<inPorts>
<functioBlockHasInPorts Id="2ecad519-8869-48e4-ace9-a2f50866e8d0">
<inPort Id="336968a3-e5f5-4dd8-a188-11d2e30ce80e" name="Restart" portName="Restart" portNum="2" objectIndex="0" varId="1" filter="3" portDataType="1" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="d73ec5f3-3aaf-4909-91b1-4561960239f1">
<fbPortGlobalVariableReference Id="2ba6b8b4-8bdf-4135-94e5-90700fc70c22" variableId="3b4f283a-d376-4bbc-8717-cb4b3d88342e" lastKnownPath="GVL1.xNotHaltRestart" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="b0512264-b034-4015-aa71-873273c29565">
<inPort Id="d018e3cb-627e-46fa-b7e5-f6dd4019154d" name="EStopIn1" portName="EStopIn1" portNum="4" objectIndex="8" varId="3" filter="2" portDataType="1" channelInterface="Two-Channel" discrepancyTime="100" deactivate1="Break Contact (NC)" deactivate2="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="f4c9b07d-c294-4d36-b229-153d0cad0d85">
<inPort Id="3f4566bb-d917-4dac-aa5b-b5313d7631a0" name="EStopIn2" portName="EStopIn2" portNum="5" objectIndex="9" varId="4" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="eea3bcdc-869c-4475-ad6a-98c223fb4138">
<inPort Id="f34234ad-aeeb-4e00-8560-3bf7a1de3ddb" name="EStopIn3" portName="EStopIn3" portNum="6" objectIndex="10" varId="5" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="6780c148-fa0b-470c-b585-dfdd7bb68892">
<inPort Id="dd0a081a-8ad2-491b-ba2f-52de75f231f5" name="EStopIn4" portName="EStopIn4" portNum="7" objectIndex="11" varId="6" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="fc8f0744-21c8-4efe-af62-69117a4a9b27">
<inPort Id="6af3a5de-833b-4ea1-87aa-6716606e4e5b" name="EStopIn5" portName="EStopIn5" portNum="8" objectIndex="12" varId="7" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="e375df63-17e1-44c0-8945-bc682d3619ca">
<inPort Id="e3b63bcd-eb20-4880-905c-d44a1b44b26e" name="EStopIn6" portName="EStopIn6" portNum="9" objectIndex="13" varId="8" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="f9078449-10e4-4047-ab75-6ecd0c60db9d">
<inPort Id="668f16c3-e1fe-4bbd-b905-c5f03ce307e9" name="EStopIn7" portName="EStopIn7" portNum="10" objectIndex="14" varId="9" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="5af46984-5b7e-4453-bb50-874c0f513725">
<inPort Id="ac32d317-f053-40ee-903d-06940c4b516a" name="EStopIn8" portName="EStopIn8" portNum="11" objectIndex="15" varId="10" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="74392ccc-b2ec-4792-a77c-42f8f350a5a9">
<inPort Id="70af639f-ebe6-490c-8a9d-ed2e4319496c" name="EDM1" portName="EDM1" portNum="13" objectIndex="1" varId="12" filter="3" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="3ae952c4-f8e9-4cd7-ac6a-ac3a4dd231ae">
<inPort Id="e496a00a-d6c1-424f-9f86-73bedbaa8cfb" name="EDM2" portName="EDM2" portNum="14" objectIndex="2" varId="13" filter="3" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="6ec7f41e-e50b-4836-aa70-88c081006a41">
<outPort Id="13ecaba5-0ce7-4bb3-827e-ecae56b14372" name="Error" portName="Error" portNum="4" objectIndex="0" varId="16" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="1ad403fe-00c7-45fe-9d01-7750014f602e">
<outPort Id="e592f68f-b4c4-4a31-9939-cfe184190178" name="EStopOut" portName="EStopOut" portNum="11" objectIndex="1" varId="23" filter="7" portDataType="1" replacementValue="1">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="b899c5c2-40b6-44c6-ad55-2d81ea3e4e7b">
<fbPortGlobalVariableReference Id="4685ddd6-04e1-492c-b6c2-8d7ed1ccbc1a" variableId="a206d633-4703-4d1d-b69b-7558aa4b78f1" lastKnownPath="GVL1.xNotHaltRegalString2Ok" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</outPort>
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="f3d2a775-1974-479b-b1cd-a02ef212f15e">
<outPort Id="8f1f6df5-d9cf-4c65-8a05-70dcbe95667a" name="EStopDelOut" portName="EStopDelOut" portNum="12" objectIndex="2" varId="26" filter="7" portDataType="1" replacementValue="1">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="b525dbf1-ff48-46b4-b505-9f68a325ae44">
<fbPortGlobalVariableReference Id="f1aa3d03-fcda-4717-88eb-4e96b7e34255" variableId="00334237-19c0-45b1-a8f2-4c034ae45ee0" lastKnownPath="GVL1.xNotHaltRegalString2OkDelay" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</outPort>
</functionBlockHasOutPorts>
</outPorts>
<parameterPorts>
<functionBlockHasParamPorts Id="b8a7e880-da07-4cb2-a86e-8124c913278c">
<parameterPort Id="56489da1-c24c-476f-ae19-af85f79a2f72" name="Delay Time (ms)" portName="Delay Time (ms)" portNum="8" objectIndex="0" varId="0" filter="0" portDataType="0" timing="100" userFbPortName="Delay Time (ms)" useInUserFb="false" />
</functionBlockHasParamPorts>
</parameterPorts>
</fBEstop>
</networkHasFunctionBlocks>
</functionBlocks>
</Network>
</safetyApplicationHasNetworks>
</networks>
<twinSAFEGroupAliasPorts>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="666e902e-8df3-462e-a51c-f731f40286b1">
<twinSAFEGroupAliasPort Id="fe721ea0-ced8-4eef-9bca-ad67f4c1932f" name="RunStop" sdsId="0" channelId="0" portName="RunStop" functionId="0">
<groupPortGlobalVariableReferences>
<twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences Id="b9e4d546-3af3-49f2-93d0-ab351c506937">
<groupPortGlobalVariableReference Id="acfaaf68-8ea8-4b5d-8ae2-0f7b3093bf77" variableId="6d45e67f-50df-4b61-a9d0-03f285b6a1bf" lastKnownPath="GVL1.xRun" />
</twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences>
</groupPortGlobalVariableReferences>
</twinSAFEGroupAliasPort>
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="87cbc1bd-5d1a-47cf-ac3e-a83c09ac6d60">
<twinSAFEGroupAliasPort Id="65f2e47b-7af5-4a83-8ef8-23221bf7e937" name="ErrAck" sdsId="0" channelId="0" portName="ErrAck" functionId="0">
<groupPortGlobalVariableReferences>
<twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences Id="8f3b4e7b-0dc7-4055-b66c-65e216eecd1b">
<groupPortGlobalVariableReference Id="d7686409-8d3d-4090-9c73-9ae1a9474744" variableId="9f1c118d-b0f2-4f34-abb9-b4b05f111bfd" lastKnownPath="GVL1.xErrorAck" />
</twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences>
</groupPortGlobalVariableReferences>
</twinSAFEGroupAliasPort>
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="d22d399a-fb80-4370-86a8-b0533a46970e">
<twinSAFEGroupAliasPort Id="3405c3a2-0040-4899-8556-b3d01bf5600b" name="ModuleFault" sdsId="0" channelId="0" portName="ModuleFault" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="354d2290-5b8e-4f88-8caa-2acc20734090">
<twinSAFEGroupAliasPort Id="21cc61a8-9338-4f9b-b97a-0f248673cedb" name="FbErr" sdsId="0" channelId="0" portName="FbErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="73f05efd-cf21-4f1a-9917-66e626397dbd">
<twinSAFEGroupAliasPort Id="91162b82-a77d-4556-9ca6-43c1f9306436" name="ComErr" sdsId="0" channelId="0" portName="ComErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="a2ab7c66-0513-4ea0-80f4-19adbd894a3f">
<twinSAFEGroupAliasPort Id="6b24cdc6-7a0e-461d-9536-98f1d37b5445" name="OutErr" sdsId="0" channelId="0" portName="OutErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="9e91c1ba-8536-4236-8110-3f3c2e9c0bf1">
<twinSAFEGroupAliasPort Id="bbc00bc3-fb54-4b5d-ac76-f4d0e98c41f1" name="OtherErr" sdsId="0" channelId="0" portName="OtherErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="f721bfcc-943b-4d25-8d82-7d48715d8945">
<twinSAFEGroupAliasPort Id="9da4c271-57aa-496e-82c8-05854edd4f25" name="ComStartup" sdsId="0" channelId="0" portName="ComStartup" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="d091ebf8-93d8-48c7-9f52-262c69ac2e8d">
<twinSAFEGroupAliasPort Id="4a195f39-7962-4c14-861b-c06ce9e35be7" name="FbDeactive" sdsId="0" channelId="0" portName="FbDeactive" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="a190e5de-f683-4df4-b771-e075e8d4901e">
<twinSAFEGroupAliasPort Id="654a91ed-20c6-4a02-bc1e-0aeb2bcc5b5a" name="FbRun" sdsId="0" channelId="0" portName="FbRun" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="bf67aced-12e0-45f0-9330-2ff0804fe58e">
<twinSAFEGroupAliasPort Id="b144b66f-7128-4d41-92a4-9d6a721783e6" name="InRun" sdsId="0" channelId="0" portName="InRun" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
</twinSAFEGroupAliasPorts>
<variables>
<safetyApplicationHasVariables Id="3042ae34-06e9-4cb2-be42-08e6c32e2d92">
<variable Id="4320910a-a534-4491-a6be-a3f4c4c9518e" name="NotHaltOk" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="931ddee3-4d15-4333-97ea-6545d43ec126">
<variableUsages Id="be2f9a83-4c5d-441c-8b82-02ca88f1177a">
<usages>
<variableUsagesHasUsages Id="3524328f-2468-45a8-bbf3-175eb9b39ceb">
<fbPortUsage Id="bf55b61a-312c-47f8-a67d-2f43cace2cca">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="6289bd84-5290-4437-b104-9574d5336820">
<outPortMoniker name="//Network1/FBDecouple1/DecOut1" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="a715453b-2320-4ab0-abdd-dbb2e404e90f">
<variableUsages Id="08e64d19-bcf2-4fd3-8579-1a0ebdc28f7b">
<usages>
<variableUsagesHasUsages Id="7951cb22-42d4-4997-8888-71ccc55efa33">
<aliasDeviceIoUsage Id="d9bdb4f6-424c-488e-99e9-be51c998e7c4" sdsId="27" channelId="1" functionId="1327546135" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="19e99ed8-79c2-4e6f-802c-ea4bf08c1a04">
<variable Id="be3eff32-1c6c-409a-9382-d51a43619828" name="xNotHaltCh1VonStringOk" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="3ede147e-49cb-457f-a93f-7f53a1e8a830">
<variableUsages Id="3dcaa7ab-b2a4-4555-a4b1-c61faddfb542">
<usages>
<variableUsagesHasUsages Id="e057d911-c79a-4551-b19e-a5ba65aa8467">
<aliasDeviceIoUsage Id="87ec30d6-3b2f-4759-b5a8-37012c3e5a8e" sdsId="27" channelId="2" functionId="1327742742" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="20082ef0-7d0c-4083-8576-5f140d54cfed">
<variableUsages Id="842e638c-ab20-4af7-bfd6-ef02cd0fd1f2">
<usages>
<variableUsagesHasUsages Id="4e09ee29-ad02-4f64-aa74-157c86849652">
<fbPortUsage Id="99610296-3c22-40c0-8ad7-c446b1ebcc5d">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="3dd967db-9fce-4f9e-a200-4846f4954536">
<inPortMoniker name="//Network2/FBEstop1/EStopIn1" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
<safetyApplicationHasVariables Id="683fd3a9-5bd4-4a0e-aeee-5fadb83872c8">
<variable Id="ded1573b-55b1-4c69-b040-4082e9111dcc" name="xNotHaltCh2VonStringOk" isLocal="false">
<sourceUsages>
<variableHasSourceUsages Id="e8731ba2-6490-4829-b5f0-fb7d2864a9ca">
<variableUsages Id="4dbc64a1-5589-4b56-85ef-21fde8bb3068">
<usages>
<variableUsagesHasUsages Id="efe6b2d8-a9b0-44ed-b7d0-8df632c44524">
<aliasDeviceIoUsage Id="b99f9c53-5a37-46bc-9072-dcbe1bae3001" sdsId="27" channelId="3" functionId="1327939349" />
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasSourceUsages>
</sourceUsages>
<targetUsages>
<variableHasTargetUsages Id="557c2369-c84e-4b33-b029-545b867ee326">
<variableUsages Id="3ff2c13d-1738-46ba-b0f2-7122a4caa225">
<usages>
<variableUsagesHasUsages Id="5e9fff00-a670-4d63-b903-90dec90e9567">
<fbPortUsage Id="30195a35-2202-4386-9879-a9188875566a">
<functionBlockPort>
<fbPortUsageReferencesFunctionBlockPort Id="161ddf5b-64c7-401e-aeb5-ce5e97e40524">
<inPortMoniker name="//Network2/FBEstop1/EStopIn2" />
</fbPortUsageReferencesFunctionBlockPort>
</functionBlockPort>
</fbPortUsage>
</variableUsagesHasUsages>
</usages>
</variableUsages>
</variableHasTargetUsages>
</targetUsages>
</variable>
</safetyApplicationHasVariables>
</variables>
</safetyApplication>

View File

@@ -0,0 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<safetyApplicationLanguageDiagram Crc="2603887228" dslVersion="1.5.0.0" Id="75abf0c9-6655-4c32-b755-1c2819184b0e" absoluteBounds="0, 0, 11, 10.125" name="TwinSAFE">
<safetyApplicationMoniker name="/" />
<nestedChildShapes>
<networkSwimLane Id="a6f23b0f-bac6-4260-99fb-5a726f230abd" absoluteBounds="0, 0, 11, 4.125">
<networkMoniker name="//Network1" />
<nestedChildShapes>
<fBDecoupleShape Id="423c000b-6cfe-4908-b9f2-22e6e583385f" absoluteBounds="1.625, 0.625, 2.75, 3.25">
<fBDecoupleMoniker name="//Network1/FBDecouple1" />
<relativeChildShapes>
<inPortShape Id="32531cd1-2f7a-4f3d-8fcc-e2fd662b92ab" absoluteBounds="1.545, 1.6400000000000001, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="06125b64-dca3-4cf0-b9d7-3e5f765ffcd0" absoluteBounds="1.545, 1.9100000000000001, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn2" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="83be659c-07f7-49ad-92a5-d5eb93e6a9a7" absoluteBounds="1.545, 2.18, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn3" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="a16afc9b-b778-47c2-a0e8-d68734245171" absoluteBounds="1.545, 2.45, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn4" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="487bcee0-c3c7-4d39-935b-ac733fd9dad2" absoluteBounds="1.545, 2.72, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn5" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="fb711d6b-b98a-469a-9c2f-2c8eed60c6b7" absoluteBounds="1.545, 2.99, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn6" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="61aa4e26-6270-43a4-94de-31b7914b9c72" absoluteBounds="1.545, 3.2600000000000002, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn7" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="93903134-c40c-44c8-9bf9-e179ecc6851e" absoluteBounds="1.545, 3.5300000000000002, 0.15, 0.15">
<inPortMoniker name="//Network1/FBDecouple1/DecIn8" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="29e4ee95-2173-439a-ae46-558aaf90c62d" absoluteBounds="4.275, 1.6400000000000001, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut1" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="80300695-9f82-4168-ba78-303b321482ff" absoluteBounds="4.275, 1.9100000000000001, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut2" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="b6239a82-6f36-4ee8-be70-495e0c85504f" absoluteBounds="4.275, 2.18, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut3" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="b00c08a5-f76c-4ec0-9cfb-807ad1ca0fb0" absoluteBounds="4.275, 2.45, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut4" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="167be948-b8d1-468b-ac39-d1b4702a99d7" absoluteBounds="4.275, 2.72, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut5" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="41fd1f68-d53f-4b8e-a189-897d82aca72d" absoluteBounds="4.275, 2.99, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut6" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="70c3f132-3e14-4451-8f6b-136674d47991" absoluteBounds="4.275, 3.2600000000000002, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut7" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="09e87cde-4694-47cb-bbe0-f6f71dd71910" absoluteBounds="4.275, 3.5300000000000002, 0.15, 0.15">
<outPortMoniker name="//Network1/FBDecouple1/DecOut8" />
<relativeChildShapes />
</outPortShape>
</relativeChildShapes>
</fBDecoupleShape>
</nestedChildShapes>
</networkSwimLane>
<networkSwimLane Id="b3be1f37-8d37-45ba-bdd8-8aac828903b1" absoluteBounds="0, 4.125, 11, 5.9499999999999993">
<networkMoniker name="//Network2" />
<nestedChildShapes>
<fBEstopShape Id="609536c8-ac74-4a03-b4cd-f5e0d5b66de5" absoluteBounds="1.75, 5.375, 3.35, 4.45">
<fBEstopMoniker name="//Network2/FBEstop1" />
<relativeChildShapes>
<inPortShape Id="55686db2-6d82-490d-8a1a-3661e07d0561" absoluteBounds="1.67, 6.12, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/Restart" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="d7eb55de-40a4-4a81-85b7-453f83d19828" absoluteBounds="1.67, 6.6825, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="3ca6dec3-e1e2-4617-b5bb-7ecb63be0d9f" absoluteBounds="1.67, 6.9075000000000006, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn2" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="b8169fa3-4f0c-403d-93c1-6b574ce1cf2e" absoluteBounds="1.67, 7.2225, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn3" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="d619437a-f48e-44a0-88b7-fbaf95545f08" absoluteBounds="1.67, 7.4475, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn4" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="0e3f7d8a-466e-4413-a78b-715d246076e5" absoluteBounds="1.67, 7.7625, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn5" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="cef3a02d-ce50-4f19-9c5c-6209695ad648" absoluteBounds="1.67, 7.9875000000000007, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn6" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="529f3b2d-b13e-48c8-ac6d-d302a26709ff" absoluteBounds="1.67, 8.3025, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn7" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="a44f8346-ed44-40e6-af41-995553a80f44" absoluteBounds="1.67, 8.5275, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EStopIn8" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="80d5480b-8140-48ec-814b-c79cd5fc8a1a" absoluteBounds="1.67, 9.1125, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EDM1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="92cc5056-e57e-4dcd-85b3-057ee875269c" absoluteBounds="1.67, 9.3375, 0.15, 0.15">
<inPortMoniker name="//Network2/FBEstop1/EDM2" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="12040f4b-00ed-478d-81d8-be6ef865a1b6" absoluteBounds="5, 6.66, 0.15, 0.15">
<outPortMoniker name="//Network2/FBEstop1/Error" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="9f30934f-03fb-42f1-a914-40e01b0e59cb" absoluteBounds="5, 8.55, 0.15, 0.15">
<outPortMoniker name="//Network2/FBEstop1/EStopOut" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="387160f3-0155-4f0f-9610-398a10ea1fe1" absoluteBounds="5, 8.82, 0.15, 0.15">
<outPortMoniker name="//Network2/FBEstop1/EStopDelOut" />
<relativeChildShapes />
</outPortShape>
<paramPortShape Id="30e23c8b-9bfe-41f0-aab2-f66c17c1d61d" absoluteBounds="3.32, 8.65, 0.7, 0.2">
<parameterPortMoniker name="//Network2/FBEstop1/Delay Time (ms)" />
<relativeChildShapes />
</paramPortShape>
</relativeChildShapes>
</fBEstopShape>
</nestedChildShapes>
</networkSwimLane>
</nestedChildShapes>
</safetyApplicationLanguageDiagram>

View File

@@ -0,0 +1,442 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="3073472346" FileFormatVersion="1.8">
<AliasDeviceType>
<Type>4</Type>
<SubType>17827710</SubType>
<VendorId>2</VendorId>
</AliasDeviceType>
<SDSID>14</SDSID>
<SafetyAliasDevice>
<ObjectId>50921473</ObjectId>
<LinkingMode>Automatic</LinkingMode>
<ConnectionId>14</ConnectionId>
<ConnectionMode>master</ConnectionMode>
<ConnectionType>FSoE</ConnectionType>
<MapDiag>false</MapDiag>
<MapInputs>false</MapInputs>
<MapOutputs>false</MapOutputs>
<MapState>false</MapState>
<ModuleFaultIsComErr>false</ModuleFaultIsComErr>
<SafeAddress>2</SafeAddress>
<Watchdog>100</Watchdog>
<ComErrAck Type="Unset" />
<Params>
<Param Index="4120" SubIndex="1">02000000</Param>
<Param Index="4320" SubIndex="1">0000</Param>
<Param Index="4320" SubIndex="2">0000</Param>
<Param Index="5632" SubIndex="0">0B</Param>
<Param Index="5632" SubIndex="1">08018070</Param>
<Param Index="5632" SubIndex="2">01010270</Param>
<Param Index="5632" SubIndex="3">01011270</Param>
<Param Index="5632" SubIndex="4">01012270</Param>
<Param Index="5632" SubIndex="5">01013270</Param>
<Param Index="5632" SubIndex="6">01014270</Param>
<Param Index="5632" SubIndex="7">01015270</Param>
<Param Index="5632" SubIndex="8">01016270</Param>
<Param Index="5632" SubIndex="9">01017270</Param>
<Param Index="5632" SubIndex="10">10038070</Param>
<Param Index="5632" SubIndex="11">10028070</Param>
<Param Index="6656" SubIndex="0">13</Param>
<Param Index="6656" SubIndex="1">08018060</Param>
<Param Index="6656" SubIndex="2">01010160</Param>
<Param Index="6656" SubIndex="3">01010260</Param>
<Param Index="6656" SubIndex="4">01011160</Param>
<Param Index="6656" SubIndex="5">01011260</Param>
<Param Index="6656" SubIndex="6">01012160</Param>
<Param Index="6656" SubIndex="7">01012260</Param>
<Param Index="6656" SubIndex="8">01013160</Param>
<Param Index="6656" SubIndex="9">01013260</Param>
<Param Index="6656" SubIndex="10">01014160</Param>
<Param Index="6656" SubIndex="11">01014260</Param>
<Param Index="6656" SubIndex="12">01015160</Param>
<Param Index="6656" SubIndex="13">01015260</Param>
<Param Index="6656" SubIndex="14">01016160</Param>
<Param Index="6656" SubIndex="15">01016260</Param>
<Param Index="6656" SubIndex="16">01017160</Param>
<Param Index="6656" SubIndex="17">01017260</Param>
<Param Index="6656" SubIndex="18">10038060</Param>
<Param Index="6656" SubIndex="19">10028060</Param>
<Param Index="32768" SubIndex="1">00</Param>
<Param Index="32768" SubIndex="2">01</Param>
<Param Index="32768" SubIndex="4">01</Param>
<Param Index="32768" SubIndex="5">01</Param>
<Param Index="32769" SubIndex="1">0A00</Param>
<Param Index="32769" SubIndex="2">0200</Param>
<Param Index="32784" SubIndex="1">00</Param>
<Param Index="32784" SubIndex="2">01</Param>
<Param Index="32784" SubIndex="4">01</Param>
<Param Index="32784" SubIndex="5">01</Param>
<Param Index="32785" SubIndex="1">0A00</Param>
<Param Index="32785" SubIndex="2">0200</Param>
<Param Index="32800" SubIndex="1">00</Param>
<Param Index="32800" SubIndex="2">01</Param>
<Param Index="32800" SubIndex="4">01</Param>
<Param Index="32800" SubIndex="5">01</Param>
<Param Index="32801" SubIndex="1">0A00</Param>
<Param Index="32801" SubIndex="2">0200</Param>
<Param Index="32816" SubIndex="1">00</Param>
<Param Index="32816" SubIndex="2">01</Param>
<Param Index="32816" SubIndex="4">01</Param>
<Param Index="32816" SubIndex="5">01</Param>
<Param Index="32817" SubIndex="1">0A00</Param>
<Param Index="32817" SubIndex="2">0200</Param>
<Param Index="32832" SubIndex="1">00</Param>
<Param Index="32832" SubIndex="2">01</Param>
<Param Index="32832" SubIndex="4">01</Param>
<Param Index="32832" SubIndex="5">01</Param>
<Param Index="32833" SubIndex="1">0A00</Param>
<Param Index="32833" SubIndex="2">0200</Param>
<Param Index="32848" SubIndex="1">00</Param>
<Param Index="32848" SubIndex="2">01</Param>
<Param Index="32848" SubIndex="4">01</Param>
<Param Index="32848" SubIndex="5">01</Param>
<Param Index="32849" SubIndex="1">0A00</Param>
<Param Index="32849" SubIndex="2">0200</Param>
<Param Index="32864" SubIndex="1">00</Param>
<Param Index="32864" SubIndex="2">01</Param>
<Param Index="32864" SubIndex="4">01</Param>
<Param Index="32864" SubIndex="5">01</Param>
<Param Index="32865" SubIndex="1">0A00</Param>
<Param Index="32865" SubIndex="2">0200</Param>
<Param Index="32880" SubIndex="1">00</Param>
<Param Index="32880" SubIndex="2">01</Param>
<Param Index="32880" SubIndex="4">01</Param>
<Param Index="32880" SubIndex="5">01</Param>
<Param Index="32881" SubIndex="1">0A00</Param>
<Param Index="32881" SubIndex="2">0200</Param>
<Param Index="61520" SubIndex="1">7E071001</Param>
<Messages>
<IO>
<Name>FSoE Command</Name>
<Index>28800</Index>
<SubIndex>1</SubIndex>
<DataType>USINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 1.ErrAck</Name>
<Index>28674</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 2.ErrAck</Name>
<Index>28690</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>9</BitOffsMessage>
<BitOffsData>1</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 3.ErrAck</Name>
<Index>28706</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>10</BitOffsMessage>
<BitOffsData>2</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 4.ErrAck</Name>
<Index>28722</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>11</BitOffsMessage>
<BitOffsData>3</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 5.ErrAck</Name>
<Index>28738</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>12</BitOffsMessage>
<BitOffsData>4</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 6.ErrAck</Name>
<Index>28754</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>13</BitOffsMessage>
<BitOffsData>5</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 7.ErrAck</Name>
<Index>28770</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>14</BitOffsMessage>
<BitOffsData>6</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 8.ErrAck</Name>
<Index>28786</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>15</BitOffsMessage>
<BitOffsData>7</BitOffsData>
</IO>
<IO>
<Name>FSoE CRC 000</Name>
<Index>28800</Index>
<SubIndex>3</SubIndex>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Connection ID</Name>
<Index>28800</Index>
<SubIndex>2</SubIndex>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>32</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Command</Name>
<Index>24704</Index>
<SubIndex>1</SubIndex>
<DataType>USINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 1.Input</Name>
<Index>24577</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 1.Module Fault</Name>
<Index>24578</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>9</BitOffsMessage>
<BitOffsData>1</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 2.Input</Name>
<Index>24593</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>10</BitOffsMessage>
<BitOffsData>2</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 2.Module Fault</Name>
<Index>24594</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>11</BitOffsMessage>
<BitOffsData>3</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 3.Input</Name>
<Index>24609</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>12</BitOffsMessage>
<BitOffsData>4</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 3.Module Fault</Name>
<Index>24610</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>13</BitOffsMessage>
<BitOffsData>5</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 4.Input</Name>
<Index>24625</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>14</BitOffsMessage>
<BitOffsData>6</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 4.Module Fault</Name>
<Index>24626</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>15</BitOffsMessage>
<BitOffsData>7</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 5.Input</Name>
<Index>24641</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>8</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 5.Module Fault</Name>
<Index>24642</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>17</BitOffsMessage>
<BitOffsData>9</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 6.Input</Name>
<Index>24657</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>18</BitOffsMessage>
<BitOffsData>10</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 6.Module Fault</Name>
<Index>24658</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>19</BitOffsMessage>
<BitOffsData>11</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 7.Input</Name>
<Index>24673</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>20</BitOffsMessage>
<BitOffsData>12</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 7.Module Fault</Name>
<Index>24674</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>21</BitOffsMessage>
<BitOffsData>13</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 8.Input</Name>
<Index>24689</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>22</BitOffsMessage>
<BitOffsData>14</BitOffsData>
</IO>
<IO>
<Name>FSIN Module 8.Module Fault</Name>
<Index>24690</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>23</BitOffsMessage>
<BitOffsData>15</BitOffsData>
</IO>
<IO>
<Name>FSoE CRC 000</Name>
<Index>24704</Index>
<SubIndex>3</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>24</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Connection ID</Name>
<Index>24704</Index>
<SubIndex>2</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>40</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
</Messages>
</Params>
</SafetyAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="1209998069" FileFormatVersion="1.8">
<AliasDeviceType>
<Type>4</Type>
<SubType>290</SubType>
<VendorId>2</VendorId>
</AliasDeviceType>
<SDSID>13</SDSID>
<SafetyAliasDevice>
<ObjectId>50921475</ObjectId>
<LinkingMode>Automatic</LinkingMode>
<ConnectionId>13</ConnectionId>
<ConnectionMode>master</ConnectionMode>
<ConnectionType>FSoE</ConnectionType>
<MapDiag>false</MapDiag>
<MapInputs>false</MapInputs>
<MapOutputs>false</MapOutputs>
<MapState>false</MapState>
<ModuleFaultIsComErr>false</ModuleFaultIsComErr>
<SafeAddress>3</SafeAddress>
<Watchdog>100</Watchdog>
<ComErrAck Type="Unset" />
<Params>
<Param Index="4320" SubIndex="1">0000</Param>
<Param Index="4320" SubIndex="2">0000</Param>
<Param Index="32768" SubIndex="1">00</Param>
<Param Index="32768" SubIndex="2">01</Param>
<Param Index="32768" SubIndex="3">01</Param>
<Param Index="32768" SubIndex="4">00</Param>
<Messages>
<IO>
<Name>FSoE Master CMD</Name>
<Index>28672</Index>
<SubIndex>1</SubIndex>
<DataType>USINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>OutputChannel1</Name>
<Index>28673</Index>
<SubIndex>1</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>OutputChannel2</Name>
<Index>28673</Index>
<SubIndex>2</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>9</BitOffsMessage>
<BitOffsData>1</BitOffsData>
</IO>
<IO>
<Name>OutputChannel3</Name>
<Index>28673</Index>
<SubIndex>3</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>10</BitOffsMessage>
<BitOffsData>2</BitOffsData>
</IO>
<IO>
<Name>OutputChannel4</Name>
<Index>28673</Index>
<SubIndex>4</SubIndex>
<DataType>BIT</DataType>
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>1</BitSize>
<BitOffsMessage>11</BitOffsMessage>
<BitOffsData>3</BitOffsData>
</IO>
<IO>
<Name />
<Index>0</Index>
<SubIndex>0</SubIndex>
<DataType />
<Direction>Out</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>4</BitSize>
<BitOffsMessage>12</BitOffsMessage>
<BitOffsData>4</BitOffsData>
</IO>
<IO>
<Name>FSoE Master CRC_0</Name>
<Index>28672</Index>
<SubIndex>3</SubIndex>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Master ConnID</Name>
<Index>28672</Index>
<SubIndex>2</SubIndex>
<DataType>UINT</DataType>
<Direction>Out</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>32</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Slave CMD</Name>
<Index>24576</Index>
<SubIndex>1</SubIndex>
<DataType>USINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>0</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name />
<Index>0</Index>
<SubIndex>0</SubIndex>
<DataType />
<Direction>In</Direction>
<SafetyType>SafetySil3</SafetyType>
<BitSize>8</BitSize>
<BitOffsMessage>8</BitOffsMessage>
<BitOffsData>0</BitOffsData>
</IO>
<IO>
<Name>FSoE Slave CRC_0</Name>
<Index>24576</Index>
<SubIndex>3</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>16</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
<IO>
<Name>FSoE Slave ConnID</Name>
<Index>24576</Index>
<SubIndex>2</SubIndex>
<DataType>UINT</DataType>
<Direction>In</Direction>
<SafetyType>ProtocolData</SafetyType>
<BitSize>16</BitSize>
<BitOffsMessage>32</BitOffsMessage>
<BitOffsData>-1</BitOffsData>
</IO>
</Messages>
</Params>
</SafetyAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="69742344" FileFormatVersion="1.8">
<AliasDeviceType>
<Type>1</Type>
<SubType>2</SubType>
<VendorId>0</VendorId>
</AliasDeviceType>
<SDSID>18</SDSID>
<StandardAliasDevice>
<LinkingMode>Manual</LinkingMode>
<IO>
<Name>Out</Name>
<BitOffsMessage>0</BitOffsMessage>
<DataType>BIT</DataType>
<BitSize>1</BitSize>
</IO>
</StandardAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="2151581952" FileFormatVersion="1.8">
<AliasDeviceType>
<Type>1</Type>
<SubType>1</SubType>
<VendorId>0</VendorId>
</AliasDeviceType>
<SDSID>23</SDSID>
<StandardAliasDevice>
<LinkingMode>Manual</LinkingMode>
<IO>
<Name>In</Name>
<BitOffsMessage>0</BitOffsMessage>
<DataType>BIT</DataType>
<BitSize>1</BitSize>
</IO>
</StandardAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="3524024429" FileFormatVersion="1.8">
<AliasDeviceType>
<Type>1</Type>
<SubType>1</SubType>
<VendorId>0</VendorId>
</AliasDeviceType>
<SDSID>28</SDSID>
<StandardAliasDevice>
<LinkingMode>Manual</LinkingMode>
<IO>
<Name>In</Name>
<BitOffsMessage>0</BitOffsMessage>
<DataType>BIT</DataType>
<BitSize>1</BitSize>
</IO>
</StandardAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<SafetyDeviceDesc Crc="854771591" FileFormatVersion="1.8">
<AliasDeviceType>
<Type>1</Type>
<SubType>1</SubType>
<VendorId>0</VendorId>
</AliasDeviceType>
<SDSID>22</SDSID>
<StandardAliasDevice>
<LinkingMode>Manual</LinkingMode>
<IO>
<Name>In</Name>
<BitOffsMessage>0</BitOffsMessage>
<DataType>BIT</DataType>
<BitSize>1</BitSize>
</IO>
</StandardAliasDevice>
</SafetyDeviceDesc>

View File

@@ -0,0 +1,285 @@
<?xml version="1.0" encoding="utf-8"?>
<safetyApplication Crc="1359224941" xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="1.5.0.0" Id="9612a4fe-bcc7-44ac-98eb-591c855d3593" name="" mapState="false" mapDiag="false" groupOrderId="2" passificationAllowed="false" temporaryDeactivationAllowed="false" permamentDeactivationAllowed="false" xmlid="0" analogFBOutputReplacementValues="Zero" verifyAnalogFBInputsIfStart="false" userFbId="00000000-0000-0000-0000-000000000000" xmlns="http://schemas.microsoft.com/dsltools/SafetyApplicationLanguage">
<networks>
<safetyApplicationHasNetworks Id="380f5fd8-ba2a-45bb-a78e-f84c8d89382d">
<Network Id="11bb88f4-a35c-49d9-88d3-88e91ad6a621" name="Network1" networkName="Network1" intId="1" networkOrderId="0">
<functionBlocks>
<networkHasFunctionBlocks Id="35eb6916-02ce-46be-aa15-9fe1d699e94f">
<fBEstop Id="297db6ae-aaa5-464b-be40-5ed100468bca" name="FBEstop1" instanceName="FBEstop1" orderOfExecution="1" mapState="false" mapDiag="false" functionName="safeEstop" safeInputsAfterDiscError="true">
<inPorts>
<functioBlockHasInPorts Id="091e3c65-4b5b-49af-98de-7dc9930fea99">
<inPort Id="f40fa17f-ee60-40e6-afd0-a4ff3f333ac1" name="Restart" portName="Restart" portNum="2" objectIndex="0" varId="1" filter="3" portDataType="1" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="39a9853e-dca7-4e41-91d9-85307558b043">
<fbPortGlobalVariableReference Id="e1b67e55-17e2-461c-bad5-690482136090" variableId="3b4f283a-d376-4bbc-8717-cb4b3d88342e" lastKnownPath="GVL1.xNotHaltRestart" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="e768ca0c-4f4c-4405-b91e-bf782914ce66">
<inPort Id="721d8d36-06d8-4eee-8f44-0b05696e0b3d" name="EStopIn1" portName="EStopIn1" portNum="4" objectIndex="8" varId="3" filter="2" portDataType="1" channelInterface="Two-Channel" discrepancyTime="200" deactivate1="Break Contact (NC)" deactivate2="Break Contact (NC)" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="4caa4c20-a1e6-470e-b51e-58ab6c181bbb">
<fbPortGlobalVariableReference Id="c9b661bb-0e41-44f0-80ac-a0de2f85a98d" variableId="b420cc6c-39c2-4c75-bb48-acf00ba7ef01" lastKnownPath="GVL1.xNotHaltSchaltschrankCh1" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="7dc346cc-820f-47f0-9f75-959caa9cafc6">
<inPort Id="7398573d-9703-4b43-8c5f-0ae0846e19c6" name="EStopIn2" portName="EStopIn2" portNum="5" objectIndex="9" varId="4" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="7f06a865-1e94-469d-b825-347b7b8c6aad">
<fbPortGlobalVariableReference Id="27eaa48b-1927-4b07-b72d-d8144c72d6e2" variableId="60346591-ba5c-4986-842f-7859b68bce4b" lastKnownPath="GVL1.xNotHaltSchaltschrankCh2" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="49204335-5b68-4053-9025-2266a597696c">
<inPort Id="46a8b85e-b9ec-445f-902a-1f8f4310f940" name="EStopIn3" portName="EStopIn3" portNum="6" objectIndex="10" varId="5" filter="2" portDataType="1" channelInterface="Two-Channel" discrepancyTime="200" deactivate1="Break Contact (NC)" deactivate2="Break Contact (NC)" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="69bab18c-0f32-4cbd-a6cf-390e5e3cb265">
<fbPortGlobalVariableReference Id="c4d3679d-afae-461e-82a9-6e171570e3e6" variableId="4415ae72-1484-4806-927e-79e9ab66fc0c" lastKnownPath="GVL1.xNotHaltTuerOstCh1" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="f510f84a-5611-4ca8-88fd-9bcad59bbd71">
<inPort Id="d66f2077-2967-4192-943b-96a1839793af" name="EStopIn4" portName="EStopIn4" portNum="7" objectIndex="11" varId="6" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="b21d2ca2-93d9-41bf-a6fe-401d95c8b12f">
<fbPortGlobalVariableReference Id="1cadef86-a798-4d3f-8c6a-5173bd7a1685" variableId="0d8530ef-b4b6-4dd4-9fea-1c1df65b4868" lastKnownPath="GVL1.xNotHaltTuerOstCh2" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="e18f10ac-1636-4ff2-a9e7-22b67c0c05f5">
<inPort Id="64515727-5f9a-4ef4-974a-7ade4f8c0d7e" name="EStopIn5" portName="EStopIn5" portNum="8" objectIndex="12" varId="7" filter="2" portDataType="1" channelInterface="Two-Channel" discrepancyTime="200" deactivate1="Break Contact (NC)" deactivate2="Break Contact (NC)" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="1498f26d-11a7-4442-9021-80fe19fca00a">
<fbPortGlobalVariableReference Id="03f2323f-7971-4726-84b6-b8e500b4afaf" variableId="76c1a103-19fb-44e4-ab23-4ac096cb2fac" lastKnownPath="GVL1.xNotHaltTuerWestCh1" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="219431b7-61de-40c2-ba06-14dc1af4dbcc">
<inPort Id="5203a339-fdf3-49a3-949c-21580a00e54e" name="EStopIn6" portName="EStopIn6" portNum="9" objectIndex="13" varId="8" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="9bbdb6c7-9c55-41f0-aa93-4cea33bcfe41">
<fbPortGlobalVariableReference Id="11a3990d-5de1-47a1-9c8e-be48a2747393" variableId="302f2cc9-466b-4cb8-ac1f-a556b1dfd382" lastKnownPath="GVL1.xNotHaltTuerWestCh2" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="617abe78-c228-41b1-b47b-083e76a2bd1b">
<inPort Id="b0e41880-05c6-4369-96c8-e159ad9f71b9" name="EStopIn7" portName="EStopIn7" portNum="10" objectIndex="14" varId="9" filter="2" portDataType="1" channelInterface="Two-Channel" discrepancyTime="200" deactivate1="Break Contact (NC)" deactivate2="Break Contact (NC)" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="d4610419-6192-47b9-8b66-d08028947868">
<fbPortGlobalVariableReference Id="926e89af-ca0a-430a-bbc5-949b9a62a90b" variableId="36d412ed-4294-44b7-929d-f6cea8e5ef61" lastKnownPath="GVL1.xNotHaltTuerNordCh1" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="ea4c058c-52c8-4e24-b966-dbbb294f9ed0">
<inPort Id="a84723e7-49ae-438e-a184-3cd0a05ad119" name="EStopIn8" portName="EStopIn8" portNum="11" objectIndex="15" varId="10" filter="2" portDataType="1" channelInterface="Both Deactivated" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="195c9003-b3ae-402c-801e-46ff7952b516">
<fbPortGlobalVariableReference Id="55529470-3989-4b93-a404-42ce7e64d62e" variableId="da993469-9e03-494e-b7ff-aaa36b4ef23b" lastKnownPath="GVL1.xNotHaltTuerNordCh2" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="cfd6247a-0399-4723-b17d-4949669641bf">
<inPort Id="b1159fe1-4d2e-4ab2-8e1c-67881350d8a5" name="EDM1" portName="EDM1" portNum="13" objectIndex="1" varId="12" filter="3" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="eb7348ef-5ac0-4428-a75a-3d77b9eb005c">
<inPort Id="95187413-d09d-427f-8a9e-856303a01218" name="EDM2" portName="EDM2" portNum="14" objectIndex="2" varId="13" filter="3" portDataType="1" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="104e4683-041b-435e-a3c7-17c91749cdec">
<outPort Id="306885f4-8ce7-444a-8505-7ccaf5f7b446" name="Error" portName="Error" portNum="4" objectIndex="0" varId="16" filter="7" portDataType="1" replacementValue="0" />
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="f5b5fca0-7a8b-4328-a424-d486c2ef1062">
<outPort Id="c5298699-378c-4610-87c6-5db90728547d" name="EStopOut" portName="EStopOut" portNum="11" objectIndex="1" varId="23" filter="7" portDataType="1" replacementValue="0">
<targetFunctionBlockPorts>
<wiredLink Id="ebc4213b-f246-4300-9b7e-740534a3e3f6">
<inPortMoniker name="//Network1/FBAnd1/AndIn1" />
</wiredLink>
</targetFunctionBlockPorts>
</outPort>
</functionBlockHasOutPorts>
<functionBlockHasOutPorts Id="23428fc5-cdd8-4685-b395-7ca8d53b9433">
<outPort Id="2abf9711-ca02-49ff-a2c3-3bcce999bb88" name="EStopDelOut" portName="EStopDelOut" portNum="12" objectIndex="2" varId="26" filter="7" portDataType="1" replacementValue="0">
<targetFunctionBlockPorts>
<wiredLink Id="76bc7299-0ce7-476e-937d-095cee842820">
<inPortMoniker name="//Network1/FBAnd2/AndIn1" />
</wiredLink>
</targetFunctionBlockPorts>
</outPort>
</functionBlockHasOutPorts>
</outPorts>
<parameterPorts>
<functionBlockHasParamPorts Id="8267e99a-2da8-4699-9bd4-bcbbf3034046">
<parameterPort Id="c33e6c01-9f95-4a3a-ab85-2703096c3ffe" name="Delay Time (ms)" portName="Delay Time (ms)" portNum="8" objectIndex="0" varId="0" filter="0" portDataType="0" timing="2000" userFbPortName="Delay Time (ms)" useInUserFb="false" />
</functionBlockHasParamPorts>
</parameterPorts>
</fBEstop>
</networkHasFunctionBlocks>
<networkHasFunctionBlocks Id="358662e6-8dd8-469b-bc16-d432ff0fa435">
<fBAnd Id="5730960b-b461-44c8-aea1-953dad7bd97d" name="FBAnd1" instanceName="FBAnd1" orderOfExecution="2" mapState="false" mapDiag="false" functionName="safeAnd">
<inPorts>
<functioBlockHasInPorts Id="0d59bba0-7f2b-4271-afec-66391406ee6c">
<inPort Id="a843e1d0-65d0-4394-9bfb-556803ce4eef" name="AndIn1" portName="AndIn1" portNum="2" objectIndex="8" varId="2" filter="3" portDataType="1" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="836b44c5-ce81-418e-9769-185bf769e2bc">
<inPort Id="34590447-ed64-453b-a1b9-a2c43b9ea301" name="AndIn2" portName="AndIn2" portNum="3" objectIndex="9" varId="3" filter="2" portDataType="1" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="b06767e5-2457-4b1a-9a84-1a37430b2a9c">
<fbPortGlobalVariableReference Id="6933e1d3-fb76-4af9-9fe4-2205725a507a" variableId="470a26a4-f34a-41f5-9dc7-8b857cf4fdda" lastKnownPath="GVL1.xNotHaltRegalString1Ok" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="1ab4fcdc-0ff5-4fd2-aef1-b6225123a11d">
<inPort Id="7d674340-ae8f-4834-bfc9-50845e6344e7" name="AndIn3" portName="AndIn3" portNum="4" objectIndex="10" varId="4" filter="2" portDataType="1" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="78d72fc2-667e-4012-b757-df2f8647eccf">
<fbPortGlobalVariableReference Id="cd2e2953-7d82-4c7e-833e-753d66b67768" variableId="a206d633-4703-4d1d-b69b-7558aa4b78f1" lastKnownPath="GVL1.xNotHaltRegalString2Ok" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="2ae65a3a-d723-4bb3-afe6-446fc2b0120e">
<inPort Id="66e83141-2dcf-40d5-9769-5685b0bc00e7" name="AndIn4" portName="AndIn4" portNum="5" objectIndex="11" varId="5" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="eea7700f-2277-4fb2-b607-10ba618ec354">
<inPort Id="c96d356f-9e6b-4145-95ed-b58ea06850f7" name="AndIn5" portName="AndIn5" portNum="6" objectIndex="12" varId="6" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="488703be-67f4-4a4b-9d35-e8d11ca2eef0">
<inPort Id="a00c5c98-3c48-49a6-b1c9-2a41efdb0008" name="AndIn6" portName="AndIn6" portNum="7" objectIndex="13" varId="7" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="ae9038d7-4278-473c-abbd-efa9f0d6f264">
<inPort Id="f9166071-d736-487c-b04a-463135f5517b" name="AndIn7" portName="AndIn7" portNum="8" objectIndex="14" varId="8" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="6ca4411e-c2ed-442d-ac78-b86992cbf1e2">
<inPort Id="1bd27198-b6e5-4264-9f31-cfaea4b42ae0" name="AndIn8" portName="AndIn8" portNum="9" objectIndex="15" varId="9" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="0368deac-4b1c-4706-9385-94d4d06bc421">
<outPort Id="6cf93fc5-7ecb-422b-8cf8-4336135919fc" name="AndOut" portName="AndOut" portNum="8" objectIndex="1" varId="20" filter="7" portDataType="1" replacementValue="1">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="a5e66e76-f6b1-47dc-99cb-33957b890dce">
<fbPortGlobalVariableReference Id="fd9240b8-ce6c-47df-a07f-83d1634fecb5" variableId="fd13ec66-f132-4c16-8dda-cd20dd1a4844" lastKnownPath="GVL1.xNotHaltOk" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</outPort>
</functionBlockHasOutPorts>
</outPorts>
</fBAnd>
</networkHasFunctionBlocks>
<networkHasFunctionBlocks Id="b608c9c3-306f-4a49-86bf-8a3f6240aa3b">
<fBAnd Id="81e34e6f-9ef8-4863-a434-bfb20861f2b3" name="FBAnd2" instanceName="FBAnd2" orderOfExecution="3" mapState="false" mapDiag="false" functionName="safeAnd">
<inPorts>
<functioBlockHasInPorts Id="8e66606f-d10e-42e7-b779-2df2e0e8ae6b">
<inPort Id="15494a63-b0d2-491e-a0c3-a63b1de2d8b8" name="AndIn1" portName="AndIn1" portNum="2" objectIndex="8" varId="2" filter="3" portDataType="1" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="713a6483-af3c-48d4-ae3a-5ca182ed8c41">
<inPort Id="437b7852-b2f1-47fa-8d91-5eb8a49ea9f6" name="AndIn2" portName="AndIn2" portNum="3" objectIndex="9" varId="3" filter="2" portDataType="1" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="afd29a0b-664a-47e9-b3e8-5ca8c014bdd5">
<fbPortGlobalVariableReference Id="5add894f-aed1-4361-adfb-3c5c6753b20f" variableId="34175068-eb12-4ad7-ac89-538b91b7f333" lastKnownPath="GVL1.xNotHaltRegalString1OkDelay" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="5133df54-411f-4b22-9190-7517bd425df5">
<inPort Id="f12cd8e1-ce57-4e8d-bce8-837114286a11" name="AndIn3" portName="AndIn3" portNum="4" objectIndex="10" varId="4" filter="2" portDataType="1" channelInterface="Activated" deactivate1="Break Contact (NC)" maxDeviation="0" resetTime="0">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="63e01591-3087-46ff-bea3-ccde4fcc8b6e">
<fbPortGlobalVariableReference Id="620f56ab-79be-4c5b-b5d7-ac0631a65b62" variableId="00334237-19c0-45b1-a8f2-4c034ae45ee0" lastKnownPath="GVL1.xNotHaltRegalString2OkDelay" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</inPort>
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="0e3e6e90-7f38-46b4-a757-1c9514027b4c">
<inPort Id="b8629ccb-bc8b-4372-8d62-fb99eb1d4cf0" name="AndIn4" portName="AndIn4" portNum="5" objectIndex="11" varId="5" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="3d1e0c79-0139-477d-b537-0a240d789c36">
<inPort Id="7b460385-3dfc-4b6d-8fdc-75a0f480aa81" name="AndIn5" portName="AndIn5" portNum="6" objectIndex="12" varId="6" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="15e8e7ed-b71c-428e-9c0c-f0fea6cfa43b">
<inPort Id="285ca33e-c4aa-45e0-b1ac-3f8ce97f807c" name="AndIn6" portName="AndIn6" portNum="7" objectIndex="13" varId="7" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="11383c02-b6e3-444f-86b6-7c80112d44dd">
<inPort Id="72da3d46-8ed7-4e67-bb3e-ff360a51e848" name="AndIn7" portName="AndIn7" portNum="8" objectIndex="14" varId="8" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
<functioBlockHasInPorts Id="bea4772c-23f2-4957-98bb-4dd539503b96">
<inPort Id="874acf77-146d-4760-af76-0955135350cf" name="AndIn8" portName="AndIn8" portNum="9" objectIndex="15" varId="9" filter="2" portDataType="1" channelInterface="Deactivated" maxDeviation="0" resetTime="0" />
</functioBlockHasInPorts>
</inPorts>
<outPorts>
<functionBlockHasOutPorts Id="329b5fe2-8c77-461b-82f4-d55327485166">
<outPort Id="cb8ea492-a258-459b-a2c3-043a36bdf6db" name="AndOut" portName="AndOut" portNum="8" objectIndex="1" varId="20" filter="7" portDataType="1" replacementValue="1">
<fbPortGlobalVariableReferences>
<functionBlockPortHasFbPortGlobalVariableReferences Id="16c4a091-c0ab-4159-b626-5a15683cc728">
<fbPortGlobalVariableReference Id="17cf55ec-4b5b-410c-ba80-7b18a6c0207b" variableId="b61d0fc0-cc9f-462c-87a0-7ca3a2a7ddd0" lastKnownPath="GVL1.xNotHaltDelayOk" />
</functionBlockPortHasFbPortGlobalVariableReferences>
</fbPortGlobalVariableReferences>
</outPort>
</functionBlockHasOutPorts>
</outPorts>
</fBAnd>
</networkHasFunctionBlocks>
</functionBlocks>
</Network>
</safetyApplicationHasNetworks>
</networks>
<twinSAFEGroupAliasPorts>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="823039d7-2ce0-4f9b-b67f-abe7fb7dfe54">
<twinSAFEGroupAliasPort Id="e41660f4-d22d-40b1-8509-7bd9c69b7766" name="RunStop" sdsId="0" channelId="0" portName="RunStop" functionId="0">
<groupPortGlobalVariableReferences>
<twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences Id="6c03b5a4-9669-4089-94a0-4d81df1f3c07">
<groupPortGlobalVariableReference Id="e5c71d55-eb37-423e-b9a6-2fdc002eed45" variableId="6d45e67f-50df-4b61-a9d0-03f285b6a1bf" lastKnownPath="GVL1.xRun" />
</twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences>
</groupPortGlobalVariableReferences>
</twinSAFEGroupAliasPort>
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="5837bc00-438e-446e-9996-4510cea5c703">
<twinSAFEGroupAliasPort Id="7e2ebab5-c2df-4469-a598-6fb5f2509ad0" name="ErrAck" sdsId="0" channelId="0" portName="ErrAck" functionId="0">
<groupPortGlobalVariableReferences>
<twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences Id="b9b3826c-a68f-4045-a4d0-501f42e095b1">
<groupPortGlobalVariableReference Id="e2d6269b-a4ca-460c-858f-37c656bec5df" variableId="9f1c118d-b0f2-4f34-abb9-b4b05f111bfd" lastKnownPath="GVL1.xErrorAck" />
</twinSAFEGroupAliasPortHasGroupPortGlobalVariableReferences>
</groupPortGlobalVariableReferences>
</twinSAFEGroupAliasPort>
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="96992a9c-d923-42df-b093-2c8f22dd8da4">
<twinSAFEGroupAliasPort Id="1269c47e-74bd-4f71-bb05-148050451f1c" name="ModuleFault" sdsId="0" channelId="0" portName="ModuleFault" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="72f1d5de-19dd-4c5a-92a6-aab808bb1aca">
<twinSAFEGroupAliasPort Id="c0688eb9-8b13-4137-b827-ccc096b5d464" name="FbErr" sdsId="0" channelId="0" portName="FbErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="8bd8e943-b58a-4df6-b54a-153c03ce9724">
<twinSAFEGroupAliasPort Id="dbf23493-0cd1-40c9-b655-5d9c9e92e13e" name="ComErr" sdsId="0" channelId="0" portName="ComErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="47ac2096-aa3a-48a7-82ae-0de4618d713b">
<twinSAFEGroupAliasPort Id="e31588b2-1556-4e06-9fd4-1cdfb9f77593" name="OutErr" sdsId="0" channelId="0" portName="OutErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="3f3548b7-231c-4abe-951d-52442408484c">
<twinSAFEGroupAliasPort Id="a9853cdb-adf0-42d6-9aaf-4db9a17c00cd" name="OtherErr" sdsId="0" channelId="0" portName="OtherErr" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="462d8002-4868-44c6-b815-b2d94732d8b3">
<twinSAFEGroupAliasPort Id="defe1010-a0c9-4bea-b5e2-df73fc6ca6a8" name="ComStartup" sdsId="0" channelId="0" portName="ComStartup" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="17b964bf-fd91-4dfb-9e8b-7a4311fc1744">
<twinSAFEGroupAliasPort Id="2535cd40-4058-432e-86e9-3d67f4ef7901" name="FbDeactive" sdsId="0" channelId="0" portName="FbDeactive" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="1ce43c19-d5d1-484d-83b3-f83bee2b200c">
<twinSAFEGroupAliasPort Id="6f77649d-c332-4dd6-a4e6-e687ec999fe9" name="FbRun" sdsId="0" channelId="0" portName="FbRun" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
<safetyApplicationHasTwinSAFEGroupAliasPort Id="0b57b38f-4d6c-4e5b-8e79-8c1d532c2be8">
<twinSAFEGroupAliasPort Id="78097c43-4045-4650-918b-1f979178fb02" name="InRun" sdsId="0" channelId="0" portName="InRun" functionId="0" />
</safetyApplicationHasTwinSAFEGroupAliasPort>
</twinSAFEGroupAliasPorts>
</safetyApplication>

View File

@@ -0,0 +1,172 @@
<?xml version="1.0" encoding="utf-8"?>
<safetyApplicationLanguageDiagram Crc="1006273056" dslVersion="1.5.0.0" Id="10165380-5ad4-4a1c-ba25-e8b86a8e4001" absoluteBounds="0, 0, 14.5, 8.75" name="TwinSAFE">
<safetyApplicationMoniker name="/" />
<nestedChildShapes>
<networkSwimLane Id="e01f4458-df70-481e-ae9d-4f44a16fbcf1" absoluteBounds="0, 0, 14.5, 8.75">
<networkMoniker name="//Network1" />
<nestedChildShapes>
<fBEstopShape Id="c5efe502-b07f-4e84-a1b4-e00110084c14" absoluteBounds="2.25, 0.625, 3.35, 4.45">
<fBEstopMoniker name="//Network1/FBEstop1" />
<relativeChildShapes>
<inPortShape Id="5d11fb75-1fe6-49c2-97cc-7a4c83480692" absoluteBounds="2.17, 1.37, 0.15, 0.15">
<inPortMoniker name="//Network1/FBEstop1/Restart" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="de6fb942-92e8-4f86-9344-2a42ea3425b6" absoluteBounds="2.17, 1.9325, 0.15, 0.15">
<inPortMoniker name="//Network1/FBEstop1/EStopIn1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="2894b51a-962d-4383-b4fb-da79f3c031e5" absoluteBounds="2.17, 2.1575, 0.15, 0.15">
<inPortMoniker name="//Network1/FBEstop1/EStopIn2" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="c98389de-bf2d-4d7e-a086-e0423c430aa8" absoluteBounds="2.17, 2.4725, 0.15, 0.15">
<inPortMoniker name="//Network1/FBEstop1/EStopIn3" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="2f9d4ded-288b-4988-a64c-219301586fe1" absoluteBounds="2.17, 2.6975000000000002, 0.15, 0.15">
<inPortMoniker name="//Network1/FBEstop1/EStopIn4" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="bd204149-520d-4875-a2ab-a687890f52c4" absoluteBounds="2.17, 3.0125, 0.15, 0.15">
<inPortMoniker name="//Network1/FBEstop1/EStopIn5" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="02c5f9e7-d713-4810-8bd0-5c18e1b24d5a" absoluteBounds="2.17, 3.2375000000000003, 0.15, 0.15">
<inPortMoniker name="//Network1/FBEstop1/EStopIn6" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="57b4f769-5818-4117-833e-dc1f3f5dee0c" absoluteBounds="2.17, 3.5525, 0.15, 0.15">
<inPortMoniker name="//Network1/FBEstop1/EStopIn7" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="337fbd76-fdd1-4d8d-87e4-58672ddabaa2" absoluteBounds="2.17, 3.7775000000000003, 0.15, 0.15">
<inPortMoniker name="//Network1/FBEstop1/EStopIn8" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="d159867f-3d05-4f29-97e2-fc9dbfaa8522" absoluteBounds="2.17, 4.3625000000000007, 0.15, 0.15">
<inPortMoniker name="//Network1/FBEstop1/EDM1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="bcc54c86-b5e7-4bf9-8c9f-1dfcb0409ac4" absoluteBounds="2.17, 4.5875, 0.15, 0.15">
<inPortMoniker name="//Network1/FBEstop1/EDM2" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="f32ecd44-0fa4-4f1c-910c-276708763370" absoluteBounds="5.5, 1.9100000000000001, 0.15, 0.15">
<outPortMoniker name="//Network1/FBEstop1/Error" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="510a7f5e-9da8-4f77-90d2-33584b378b6e" absoluteBounds="5.5, 3.8000000000000003, 0.15, 0.15">
<outPortMoniker name="//Network1/FBEstop1/EStopOut" />
<relativeChildShapes />
</outPortShape>
<outPortShape Id="cd5d77b9-a607-4e82-a9f8-a6fde694cc20" absoluteBounds="5.5, 4.07, 0.15, 0.15">
<outPortMoniker name="//Network1/FBEstop1/EStopDelOut" />
<relativeChildShapes />
</outPortShape>
<paramPortShape Id="d1ae0b47-2b2f-4c4a-a781-823a7a85c6c1" absoluteBounds="3.82, 3.9000000000000004, 0.7, 0.2">
<parameterPortMoniker name="//Network1/FBEstop1/Delay Time (ms)" />
<relativeChildShapes />
</paramPortShape>
</relativeChildShapes>
</fBEstopShape>
<fBAndShape Id="e0e4ea3e-f1ea-4da4-aa5c-01aa25c2c980" absoluteBounds="8.25, 1.75, 2.75, 3.25">
<fBAndMoniker name="//Network1/FBAnd1" />
<relativeChildShapes>
<inPortShape Id="38527e36-3b72-48ef-ad40-f9caa9bc2c6c" absoluteBounds="8.17, 2.495, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd1/AndIn1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="723ac003-1731-456a-981d-d3aafe2f6aa5" absoluteBounds="8.17, 2.765, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd1/AndIn2" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="3878fa84-6938-4750-8479-080a1f18e78f" absoluteBounds="8.17, 3.035, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd1/AndIn3" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="e6132f25-4b20-4054-99e9-d797c56f855b" absoluteBounds="8.17, 3.305, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd1/AndIn4" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="e046bdcb-5c2a-49f3-a96a-04d72c6ffd82" absoluteBounds="8.17, 3.575, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd1/AndIn5" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="66fed085-916e-4c91-8fd8-eed96d2aa6b5" absoluteBounds="8.17, 3.845, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd1/AndIn6" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="b960bf72-41d0-4308-96a0-bbf8d0bf11e5" absoluteBounds="8.17, 4.115, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd1/AndIn7" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="40c95399-4503-4576-9f34-25faf3833901" absoluteBounds="8.17, 4.385, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd1/AndIn8" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="e2b2f597-9666-40b4-ba57-34d81d2426b5" absoluteBounds="10.9, 4.115, 0.15, 0.15">
<outPortMoniker name="//Network1/FBAnd1/AndOut" />
<relativeChildShapes />
</outPortShape>
</relativeChildShapes>
</fBAndShape>
<fBAndShape Id="21fe230e-480a-414d-b210-0e4f905f3f64" absoluteBounds="8.25, 5.25, 2.75, 3.25">
<fBAndMoniker name="//Network1/FBAnd2" />
<relativeChildShapes>
<inPortShape Id="a8d2e952-9d8b-41e7-a100-f023f58be10b" absoluteBounds="8.17, 5.995, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd2/AndIn1" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="941df459-0051-488c-9c1a-7cc679ea771f" absoluteBounds="8.17, 6.2650000000000006, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd2/AndIn2" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="685514d1-2187-41cf-a174-953ccd23a0ab" absoluteBounds="8.17, 6.535, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd2/AndIn3" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="d21527ae-be16-4c82-b850-620331824056" absoluteBounds="8.17, 6.805, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd2/AndIn4" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="8128d774-2f25-4eca-8596-e950a584a41c" absoluteBounds="8.17, 7.075, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd2/AndIn5" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="a7105c3a-76e8-416e-a19c-323c6d83fe60" absoluteBounds="8.17, 7.3450000000000006, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd2/AndIn6" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="ac4af310-d9f3-4116-8255-59355015d323" absoluteBounds="8.17, 7.615, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd2/AndIn7" />
<relativeChildShapes />
</inPortShape>
<inPortShape Id="dd5454cf-66b1-4a83-a24a-ee1ef910cec6" absoluteBounds="8.17, 7.885, 0.15, 0.15">
<inPortMoniker name="//Network1/FBAnd2/AndIn8" />
<relativeChildShapes />
</inPortShape>
<outPortShape Id="b7ee9e99-b3f3-4cba-8599-f587b498a46f" absoluteBounds="10.9, 7.615, 0.15, 0.15">
<outPortMoniker name="//Network1/FBAnd2/AndOut" />
<relativeChildShapes />
</outPortShape>
</relativeChildShapes>
</fBAndShape>
<wiredLinkConnector Id="9f97a579-88c5-40a8-87cb-ec05d875e657" edgePoints="[(5.65 : 4.145); (6.42604136988521 : 4.145); (6.42604136988521 : 6.07); (8.17 : 6.07)]" manuallyRouted="true" fixedFrom="Caller" fixedTo="Caller" color="0, 0, 0" thickness="0.01" expandedManuallyRouted="false">
<wiredLinkMoniker Id="76bc7299-0ce7-476e-937d-095cee842820" />
<nodes>
<outPortShapeMoniker Id="cd5d77b9-a607-4e82-a9f8-a6fde694cc20" />
<inPortShapeMoniker Id="a8d2e952-9d8b-41e7-a100-f023f58be10b" />
</nodes>
</wiredLinkConnector>
<wiredLinkConnector Id="060cc878-ab2a-49b1-a0c7-d0496aa64e68" edgePoints="[(5.65 : 3.875); (6.025 : 3.875); (6.025 : 2.57); (8.17 : 2.57)]" fixedFrom="Caller" fixedTo="Caller" color="0, 0, 0" thickness="0.01" expandedManuallyRouted="false">
<wiredLinkMoniker Id="ebc4213b-f246-4300-9b7e-740534a3e3f6" />
<nodes>
<outPortShapeMoniker Id="510a7f5e-9da8-4f77-90d2-33584b378b6e" />
<inPortShapeMoniker Id="38527e36-3b72-48ef-ad40-f9caa9bc2c6c" />
</nodes>
</wiredLinkConnector>
</nestedChildShapes>
</networkSwimLane>
</nestedChildShapes>
</safetyApplicationLanguageDiagram>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<TargetSystemConfig Crc="199280436" Version="1.5">
<TargetSystemType>HSafetyPLC</TargetSystemType>
<TargetSystemSubType>EL6910</TargetSystemSubType>
<IsExternalDevice>false</IsExternalDevice>
<TargetSystemObjectId>50462723</TargetSystemObjectId>
<TargetSystemObjectName>-42K1 (EL6910)</TargetSystemObjectName>
<SoftwareVersion>05 (V01.14) </SoftwareVersion>
<SerialNumber>4238305</SerialNumber>
<ProjectCRC>577</ProjectCRC>
<MapProjectCRC>false</MapProjectCRC>
<MapSerialNumber>false</MapSerialNumber>
<VersionNumber>1</VersionNumber>
<FSOEAddress>1</FSOEAddress>
<DipSwitch>1</DipSwitch>
<AmsNetID>10.103.32.50.2.1</AmsNetID>
<AmsPort>1002</AmsPort>
<ConnectionInfoDataConfigOld>false</ConnectionInfoDataConfigOld>
<TakeOverSafetyAliasDeviceNamesInProcessImage>true</TakeOverSafetyAliasDeviceNamesInProcessImage>
<TakeOverStandardAliasDeviceNamesInProcessImage>true</TakeOverStandardAliasDeviceNamesInProcessImage>
<BackupRestore Needed="0" Activated="false" RestoreUserAdministration="false" />
</TargetSystemConfig>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="E_BATTERY_STATUS" Id="{99b02815-2b47-4159-a889-c86170baa34d}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_BATTERY_STATUS :
(
ERROR := 1,
OFF := 2,
READY := 3,
ACTIVE := 4,
MAINTENANCE := 5,
TESTING := 6
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="E_BMS_CONTROL_MODE" Id="{ab000a04-c252-420d-ac1e-2bf611fa911a}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
TYPE E_BMS_CONTROL_MODE :
(
AUTO_REMOTE := 1,
AUTO_LOCAL := 2,
SAFETY_CHECK := 3,
CAPACITY_TEST := 4,
MANUAL := 5,
BALANCING := 6,
CYCLING := 7,
PRECHARGE := 8,
DH := 9,
SEMI_AUTO := 10
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="E_BMS_STATE" Id="{2a757cce-36a5-4230-a14d-5402102352d5}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
TYPE E_BMS_STATE :
(
IDLE := 0,
CHECK_POWER_COMMAND := 1,
WAIT_FOR_STRING_TO_BE_READY := 2,
WAIT_FOR_INVERTER := 3,
ENABLED := 4,
WAIT_FOR_SHUTDOWN_DISCHARGE_MODE := 5,
SEGMENT_DISCHARGE_WITH_INVERTER_DONE := 6,
SEGMENT_DISCHARGE_DONE := 7,
ERROR := 8,
WAIT_FOR_ERROR_RESET := 9
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="E_CHARGE_STATUS" Id="{7a281462-bf73-4949-96d8-aca55bee6c60}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_CHARGE_STATUS :
(
UNDEFINED := 1,
EMPTY := 2,
CHARGING := 3,
DISCHARGING := 4,
FULL := 5
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<DUT Name="E_COMPONENT_STATUS" Id="{cff71c34-33b2-4724-933e-1a2c018acdb7}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_COMPONENT_STATUS :
(
OFF := 0,
ON := 1,
CHARGING := 2,
DISCHARGING := 3,
ERROR := 4,
SHUTDOWN := 5,
STARTING := 6
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<DUT Name="E_CYCLE_STATUS" Id="{163b5a12-1523-4982-80d8-ba87ebb439a8}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_CYCLE_STATUS :
(
OFF := 0,
CHARGE_STARTED := 1,
CHARGE_ENDED := 2,
DISCHARGE_STARTED := 3,
DISCHARGE_ENDED := 4
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="E_REACTIVE_POWER_TYPE" Id="{e2c788a7-c536-4b02-910e-6cbe600afdab}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_REACTIVE_POWER_TYPE :
(
INDUCTIVE := 1,
CAPACITIVE := 2,
NONE := 3
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="E_STRING_OPERATING_MODE" Id="{d4bc8f87-c493-46b8-95d6-71556c8b0aab}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_STRING_OPERATING_MODE :
(
AUTOMATIC := 0,
SAFETY_CHECK := 1,
PRECHARGE := 2,
BALANCING := 3,
SEMI_AUTO := 4
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_DWORD_UNIT_ERROR_BITMAP" Id="{560d7018-6164-4678-9d70-c41b4bfe9348}">
<Declaration><![CDATA[TYPE ST_DWORD_UNIT_ERROR_BITMAP :
STRUCT
bTNegLow : BIT; // Bit 0
bTNegHigh : BIT; // Bit 1
bTNegError : BIT; // Bit 2
bTPosLow : BIT; // Bit 3
bTPosHigh : BIT; // Bit 4
bTPosError : BIT; // Bit 5
bPInNegLow : BIT; // Bit 6
bPInNegHigh : BIT; // Bit 7
bPInNegError : BIT; // Bit 8
bPInPosLow : BIT; // Bit 9
bPInPosHigh : BIT; // Bit 10
bPInPosError : BIT; // Bit 11
bPTankNegLow : BIT; // Bit 12
bPTankNegHigh : BIT; // Bit 13
bPTankNegError : BIT; // Bit 14
bPTankPosLow : BIT; // Bit 15
bPTankPosHigh : BIT; // Bit 16
bPTankPosError : BIT; // Bit 17
bVLow : BIT; // Bit 18
bVHigh : BIT; // Bit 19
bVError : BIT; // Bit 20
bValveNeg : BIT; // Bit 21
bValvePos : BIT; // Bit 22
bPumpNeg : BIT; // Bit 23
bPumpPos : BIT; // Bit 24
bLeack : BIT; // Bit 25
bSafetyIntlk : BIT; // Bit 26
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<DUT Name="ST_DWORD_UNIT_WARNING_BITMAP" Id="{fe3a1ecb-072b-4492-b355-17d925e9fa12}">
<Declaration><![CDATA[TYPE ST_DWORD_UNIT_WARNING_BITMAP :
STRUCT
bTNegLow : BIT; // Bit 0
bTNegHigh : BIT; // Bit 1
bTPosLow : BIT; // Bit 2
bTPosHigh : BIT; // Bit 3
bPInNegLow : BIT; // Bit 4
bPInNegHigh : BIT; // Bit 5
bPInPosLow : BIT; // Bit 6
bPInPosHigh : BIT; // Bit 7
bPTankNegLow : BIT; // Bit 8
bPTankNegHigh : BIT; // Bit 9
bPTankPosLow : BIT; // Bit 10
bPTankPosHigh : BIT; // Bit 11
bVLow : BIT; // Bit 12
bVHigh : BIT; // Bit 13
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_WORD_BMS_ERROR_BITMAP" Id="{33fc17c1-ae64-4c44-aa8c-117a09c656ef}">
<Declaration><![CDATA[TYPE ST_WORD_BMS_ERROR_BITMAP :
STRUCT
bEStop : BIT; // Bit 0
bEthercat : BIT; // Bit 1
bError : BIT; // Bit 2
bNAProtectionTripped : BIT; // Bit 3
bEMSHeartbeatError : BIT; // Bit 4
bSafetyErrorVoltage : BIT; // Bit 5
bSafetyErrorPressure : BIT; // Bit 6
bSafetyErrorTemperature : BIT; // Bit 7
bStringsNotReadyInTime : BIT; // BIT 8
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_WORD_BMS_WARNING_BITMAP" Id="{6dfd9c4b-4e74-434e-9f65-01d443c224d5}">
<Declaration><![CDATA[TYPE ST_WORD_BMS_WARNING_BITMAP :
STRUCT
bNotAllInAuto : BIT;
bSafetyIntlkString1 : BIT;
bSafetyIntlkString2 : BIT;
bTCabinetBMSHigh : BIT;
bTCabinetSCSString1High : BIT;
bTCabinetSCSString2High : BIT;
bTCabinetString1Module1High : BIT;
bTCabinetString1Module2High : BIT;
bTCabinetString1Module3High : BIT;
bTCabinetString2Module1High : BIT;
bTCabinetString2Module2High : BIT;
bTCabinetString2Module3High : BIT;
bBatteryAlreadyFull : BIT;
bBatteryAlreadyEmpty : BIT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_WORD_EMS_CONTROLS_BITMAP" Id="{7d022e67-048d-4e23-8921-2f5f928e5544}">
<Declaration><![CDATA[TYPE ST_WORD_EMS_CONTROLS_BITMAP :
STRUCT
bScheduleActive : BIT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_WORD_STRING_ERROR_BITMAP" Id="{3924c412-c367-4ea8-9118-864977c416ec}">
<Declaration><![CDATA[TYPE ST_WORD_STRING_ERROR_BITMAP :
STRUCT
bDCSwitch : BIT; // Bit 0
bInverterError : BIT; // Bit 1
bIsolationError : BIT; // Bit 2
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="U_BMS_ERROR_REGISTER" Id="{f3b37ac5-caba-4b85-a532-93295a2b6a11}">
<Declaration><![CDATA[TYPE U_BMS_ERROR_REGISTER :
UNION
wRegister : WORD;
stBitmap : ST_WORD_BMS_ERROR_BITMAP;
END_UNION
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="U_BMS_WARNING_REGISTER" Id="{00faf0ca-8dad-4f4f-9244-3aea273b10bd}">
<Declaration><![CDATA[TYPE U_BMS_WARNING_REGISTER :
UNION
wRegister : WORD;
stBitmap : ST_WORD_BMS_WARNING_BITMAP;
END_UNION
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="U_EMS_CONTROLS_REGISTER" Id="{a1ff95b9-162c-49e5-b53b-4cd068746597}">
<Declaration><![CDATA[TYPE U_EMS_CONTROLS_REGISTER :
UNION
{attribute 'analysis' := '-33'}
wRegister : WORD;
stBitmap : ST_WORD_EMS_CONTROLS_BITMAP;
END_UNION
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="U_STRING_ERROR_REGISTER" Id="{7b446cc8-a059-4d03-be7a-fed0256cd889}">
<Declaration><![CDATA[TYPE U_STRING_ERROR_REGISTER :
UNION
wRegister : WORD;
stBitmap : ST_WORD_STRING_ERROR_BITMAP;
END_UNION
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="U_UNIT_ERROR_REGISTER" Id="{07ba2ddc-5e9f-4e51-9106-3d60de54c4e3}">
<Declaration><![CDATA[TYPE U_UNIT_ERROR_REGISTER :
UNION
dwRegister : DWORD;
stBitmap : ST_DWORD_UNIT_ERROR_BITMAP;
END_UNION
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="U_UNIT_WARNING_REGISTER" Id="{30d76b14-f783-4b87-a308-2e6a78ac04eb}">
<Declaration><![CDATA[TYPE U_UNIT_WARNING_REGISTER :
UNION
dwRegister : DWORD;
stBitmap : ST_DWORD_UNIT_WARNING_BITMAP;
END_UNION
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<DUT Name="ST_MODBUS_REG_10" Id="{0c25ea41-552d-4ad4-8369-cc4ac1877b46}">
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
{attribute 'pack_mode' := '1'}
TYPE ST_MODBUS_REG_10 :
STRUCT
// Addr: 10.000
sManufacturer : STRING(32); // 1 char = 1 byte
// Addr: 10.016
sModelname : STRING(32);
// Addr: 10.032
sSerialnumber : STRING(32);
// Addr: 10.048
sBMSVersion : STRING(64);
// Addr: 10.080
uiTotalParallelMembers : UINT; //uint 16bit = 1 Word
// Addr: 10.081
uiActiveParallelMembers : UINT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,112 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_MODBUS_REG_11" Id="{7e772293-d4e3-4809-9da8-3d4e0412ede6}">
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
{attribute 'pack_mode' := '1'}
TYPE ST_MODBUS_REG_11 :
STRUCT
// Addr: 11.000
eBatteryStatus : E_BATTERY_STATUS;
// Addr: 11.001
eChargeStatus : E_CHARGE_STATUS;
// Addr: 11.002
// Unit: %
uiSelfDischargeRate : UINT; // 16 bit
// Addr: 11.003
// Unit: %
uiMaxAllowedSOC : UINT := 100;
// Addr: 11.004
// Unit: %
uiMinAllowedSOC : UINT := 0;
// Addr: 11.005
// Unit: %
uiCurrentSOC : UINT;
// Addr: 11.006
// Unit: %
uiCurrentDOD : UINT;
// Addr: 11.007
// Unit: %
uiCurrentSOH : UINT := 100;
// Addr: 11.008
// Unit: Ah
udiChargeCapacity : UDINT; // 32bit
// Addr: 11.010
// Unit: Wh
udiEnergyCapacity : UDINT;
// Addr: 11.012
// Unit: W
udiMaxChargingActivePower : UDINT := 30_000;
// Addr: 11.014
// Unit: W
udiMaxDischargingActivePower : UDINT := 30_000;
// Addr: 11.016
// Unit: var
udiMaxAvailableInductiveReactivePower : UDINT := 0;
// Addr: 11.018
// Unit: var
udiMaxAvailableCapacitiveReactivePower : UDINT := 0;
// Addr: 11.020
// Unit: Wh
udiChargedEnergy : UDINT;
// Addr: 11.022
// Unit: Wh
udiAvailableEnergy : UDINT;
// Addr: 11.024
// Unit: A
diTotalACCurrentPhase1 : DINT;
// Addr: 11.026
// Unit: A
diTotalACCurrentPhase2 : DINT;
// Addr: 11.028
// Unit: A
diTotalACCurrentPhase3 : DINT;
// Addr: 11.030
// Unit: W
diSetpointActivePowerMirror : DINT;
// Addr: 11.032
rSetpointCosPhiMirror : REAL; // 32 bit
// Addr: 11.034
// Unit: W
diCurrentActivePower : DINT;
// Addr: 11.036
// Unit: var
diCurrentReactivePower : DINT;
// Addr: 11.038
udiLifeMessage : UDINT;
// Addr: 11.040
lwWarningBitmap : LWORD;
// Addr: 11.044
lwErrorBitmap : LWORD;
// Addr: 11.048 - 11.055
stInverterData : ST_MODBUS_REG_11_INVERTER;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_MODBUS_REG_11_INVERTER" Id="{85be2771-b8b8-4deb-b2dd-65fd8611a26c}">
<Declaration><![CDATA[TYPE ST_MODBUS_REG_11_INVERTER :
STRUCT
// Addr: 11.048
eInverter1RequestedState : E_KACO_PCU_REQUESTED_STATE;
// Addr: 11.049
eInverter1CurrentState : E_KACO_CURRENT_STATE;
// Addr: 11.050
eInverter1PCUState : E_KACO_PCU_STATE;
// Addr: 11.051
eInverter1PCUError : E_KACO_PCU_ERROR;
// Addr: 11.052
eInverter2RequestedState : E_KACO_PCU_REQUESTED_STATE;
// Addr: 11.053
eInverter2CurrentState : E_KACO_CURRENT_STATE;
// Addr: 11.054
eInverter2PCUState : E_KACO_PCU_STATE;
// Addr: 11.055
eInverter2PCUError : E_KACO_PCU_ERROR;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_MODBUS_REG_12" Id="{7c428918-2d8d-43ab-8096-edbee8bd4171}">
<Declaration><![CDATA[{attribute 'analysis' := '-33'}
{attribute 'pack_mode' := '1'}
TYPE ST_MODBUS_REG_12 :
STRUCT
// Unit: W
diSetpointActivePower : DINT;
// Addr: 12.002
rSetpointCosPhi : REAL;
// Addr: 12.004
// Can be removed if cosphi can be written in pos and neg range
eReactivePowerType : E_REACTIVE_POWER_TYPE;
// Addr: 12.005
wBMSControlsRegister : U_EMS_CONTROLS_REGISTER;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_MODBUS_REG_13" Id="{ff1eee07-3bd7-4808-a42a-073911e581d6}">
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
TYPE ST_MODBUS_REG_13 :
STRUCT
// String warning active flags
// Addr: 13.000
wBMSWarningActive : U_BMS_WARNING_REGISTER;
// String error active
// Addr: 13.001
wBMSErrorActive : U_BMS_ERROR_REGISTER;
// String warning active flags
// (Bit 0 -> Warning in string 1 active, Bit 1 -> String 2, etc.)
// Addr: 13.002
wStringWarningActive : WORD;
// String error active
// (Bit 0 -> Error in string 1 active, Bit 1 -> String 2, etc.)
// Addr: 13.003
wStringErrorActive : WORD;
// String 1 error active
// Addr: 13.004
wString1ErrorActive : U_STRING_ERROR_REGISTER;
// String 2 error active
// Addr: 13.005
wString2ErrorActive : U_STRING_ERROR_REGISTER;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_EMS_MODBUS_INTERFACE" Id="{c26c9ee9-feee-46cf-86e6-45d1a1e6819c}">
<Declaration><![CDATA[// Speicherbereiche, welche über einen kontinuierlichen Registerbereich
// gelesen werden sollen, müssen in einer Struktur mit dem attribut {attribute 'pack_mode' := '1'}
// angelegt werden.
// Der Grund ist, dass der TwinCAT Modbus Server beim zugriff über den ADS
// Server nur die Symbolische erste Adresse anfragt und dann davon ausgeht,
// dass die anderen Register im Speicherbereich hintereinander liegen.
// Bei rein symbolisch angelegten Variablen müss dies nicht der Fall sein und es kommt zu einem
// Fehler beim lesen über die symbolischen grenzen der variablen hinaus.
{attribute 'pack_mode' := '1'}
TYPE ST_EMS_MODBUS_INTERFACE :
STRUCT
// Modbus Registers 10.000 to 10.999
stModbusReg10 : ST_MODBUS_REG_10;
// Modbus Registers 11.000 to 11.999
stModbusReg11 : ST_MODBUS_REG_11;
// Modbus Registers 12.000 to 12.999
stModbusReg12 : ST_MODBUS_REG_12;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_SEMI_AUTO_MODULE_ENABLE" Id="{0a50ad4d-d929-43a2-84d3-8240a20f96f0}">
<Declaration><![CDATA[TYPE ST_SEMI_AUTO_MODULE_ENABLE :
STRUCT
// Manual enable unit 1
xSemiAutoEnableUnit1 : BOOL;
// Manual enable unit 2
xSemiAutoEnableUnit2 : BOOL;
// Manual enable unit 3
xSemiAutoEnableUnit3 : BOOL;
// Manual enable unit 4
xSemiAutoEnableUnit4 : BOOL;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_SEMI_AUTO_STRING_ENABLE" Id="{a3d678f9-e2d7-4e4a-b890-810149befa04}">
<Declaration><![CDATA[TYPE ST_SEMI_AUTO_STRING_ENABLE :
STRUCT
// Modul 1
stSemiAutoModul1 : ST_SEMI_AUTO_MODULE_ENABLE;
// Modul 2
stSemiAutoModul2 : ST_SEMI_AUTO_MODULE_ENABLE;
// Modul 3
stSemiAutoModul3 : ST_SEMI_AUTO_MODULE_ENABLE;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_AUTO_HMI_INTERFACE" Id="{2b90c47c-9132-4aec-a172-6289a0ff4dc3}">
<Declaration><![CDATA[TYPE ST_AUTO_HMI_INTERFACE :
STRUCT
stStartAutoButton : ST_HMI_CONTROL_BUTTON := (xRelease := TRUE);
stStopAutoButton : ST_HMI_CONTROL_BUTTON := (xRelease := TRUE);
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
diSetpointAutomatic : DINT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<DUT Name="ST_MODULE_HMI_INTERFACE" Id="{11e89a54-55b7-4731-b5d2-c1f68fd12879}">
<Declaration><![CDATA[TYPE ST_MODULE_HMI_INTERFACE :
STRUCT
stHMIInterfaceUnit1 : ST_UNIT_HMI_INTERFACE;
stHMIInterfaceUnit2 : ST_UNIT_HMI_INTERFACE;
stHMIInterfaceUnit3 : ST_UNIT_HMI_INTERFACE;
stHMIInterfaceUnit4 : ST_UNIT_HMI_INTERFACE;
// Temperature sensor control cabinet
stTempCabinet : ST_HMI_ANALOG_VALUE;
// Current voltage for HMI
// ==============================
rVoltage : REAL;
// Current current for HMI
// ==============================
rCurrent : REAL;
// Current status
// ====================================
eStatus : E_COMPONENT_STATUS;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_MODULE_VOLT_CONFIG" Id="{5bd0445f-1079-4488-9137-b6d029b50b39}">
<Declaration><![CDATA[TYPE ST_MODULE_VOLT_CONFIG :
STRUCT
xUnit1Is1500V : BOOL;
xUnit2Is1500V : BOOL;
xUnit3Is1500V : BOOL;
xUnit4Is1500V : BOOL;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<DUT Name="ST_STRING_HMI_INTERFACE" Id="{b74e184a-a1d0-4499-8ac0-7e2226af9a4f}">
<Declaration><![CDATA[TYPE ST_STRING_HMI_INTERFACE :
STRUCT
stHMIInterfaceModule1 : ST_MODULE_HMI_INTERFACE;
stHMIInterfaceModule2 : ST_MODULE_HMI_INTERFACE;
stHMIInterfaceModule3 : ST_MODULE_HMI_INTERFACE;
// Temperature sensor SCS control cabinet
stTempCabinetSCS : ST_HMI_ANALOG_VALUE;
// Current voltage for HMI
// ==============================
rVoltage : REAL;
// Current current for HMI
// ==============================
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
rCurrent : REAL;
// Current status
// ====================================
eStatus : E_COMPONENT_STATUS;
// Current string current
// ==============================
//stStringCurrent : ST_HMI_ANALOG_VALUE;
// Current inverter data
// ==============================
stInverterData : ST_SUNSPEC_CURRENT_VALUES;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_STRING_VOLT_CONFIG" Id="{9f94c15d-9aa7-4320-915e-f68d4e087e39}">
<Declaration><![CDATA[TYPE ST_STRING_VOLT_CONFIG :
STRUCT
stModule1VoltConfig : ST_MODULE_VOLT_CONFIG;
stModule2VoltConfig : ST_MODULE_VOLT_CONFIG;
stModule3VoltConfig : ST_MODULE_VOLT_CONFIG;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_UNIT_CONFIG" Id="{75a00288-1f08-4f47-846c-fa7c44b2279c}">
<Declaration><![CDATA[TYPE ST_UNIT_CONFIG :
STRUCT
// Pump posolyt
// ===================================
stConfigPosolytPump : ST_MOTOR_ANALOG_CONFIG;
// Pump negolyt
// ===================================
stConfigNegolytPump : ST_MOTOR_ANALOG_CONFIG;
// Valves posolyt
// ===================================
stConfigPosolytValve : ST_ValveConfig;
// Valves negolyt
// ===================================
stConfigNegolytValve : ST_ValveConfig;
// Pressure sensor posolyt segment inlet
//====================================
stConfigPosolytPressureSegmentInlet : ST_ANALOG_IO_CONFIG;
stEWLPosolytPressureSegmentInlet : ST_ANALOG_EW_LEVELS;
stEWDPosolytPressureSegmentInlet : ST_ANALOG_EW_DELAYS;
// Pressure sensor negolyt segment inlet
//====================================
stConfigNegolytPressureSegmentInlet : ST_ANALOG_IO_CONFIG;
stEWLNegolytPressureSegmentInlet : ST_ANALOG_EW_LEVELS;
stEWDNegolytPressureSegmentInlet : ST_ANALOG_EW_DELAYS;
// Pressure sensor posolyt tank inlet
//====================================
stConfigPosolytPressureTankInlet : ST_ANALOG_IO_CONFIG;
stEWLPosolytPressureTankInlet : ST_ANALOG_EW_LEVELS;
stEWDPosolytPressureTankInlet : ST_ANALOG_EW_DELAYS;
// Pressure sensor posolyt tank inlet
//====================================
stConfigNegolytPressureTankInlet : ST_ANALOG_IO_CONFIG;
stEWLNegolytPressureTankInlet : ST_ANALOG_EW_LEVELS;
stEWDNegolytPressureTankInlet : ST_ANALOG_EW_DELAYS;
// Temperature sensor posolyt tank inlet
//====================================
stConfigPosolytTempTankInlet : ST_ANALOG_IO_CONFIG;
stEWLPosolytTempTankInlet : ST_ANALOG_EW_LEVELS;
stEWDPosolytTempTankInlet : ST_ANALOG_EW_DELAYS;
// Temperature sensor negolyt tank inlet
//====================================
stConfigNegolytTempTankInlet : ST_ANALOG_IO_CONFIG;
stEWLNegolytTempTankInlet : ST_ANALOG_EW_LEVELS;
stEWDNegolytTempTankInlet : ST_ANALOG_EW_DELAYS;
// Voltage segment
//====================================
stConfigVoltageSegment : ST_ANALOG_IO_CONFIG;
stEWLVoltageSegment : ST_ANALOG_EW_LEVELS;
stEWDVoltageSegment : ST_ANALOG_EW_DELAYS;
// Max pressure difference between posolyt and negolyt segment inlet
//====================================
rMaxDeltaPSegmentInlet : REAL;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_UNIT_HMI_INTERFACE" Id="{a46d51f7-c17c-44e4-be59-edb877b3b5dc}">
<Declaration><![CDATA[TYPE ST_UNIT_HMI_INTERFACE :
STRUCT
// Pump posolyt
// ===================================
stNS11 : ST_HMI_ANALOG_MOTOR_DATA;
// Pump negolyt
// ===================================
stNS21 : ST_HMI_ANALOG_MOTOR_DATA;
// Valve posolyt
// ===================================
stNS12 : ST_HMI_VALVE_DATA;
// Valve negolyt
// ===================================
stNS22 : ST_HMI_VALVE_DATA;
// Drucksensoren Posolyt
//====================================
stP11 : ST_HMI_ANALOG_VALUE;
stP12 : ST_HMI_ANALOG_VALUE;
// Drucksensoren Negolyt
//====================================
stP21 : ST_HMI_ANALOG_VALUE;
stP22 : ST_HMI_ANALOG_VALUE;
// Temperature sensor posolyt tank inlet
//====================================
stT11 : ST_HMI_ANALOG_VALUE;
// Temperature sensor negolyt tank inlet
//====================================
stT21 : ST_HMI_ANALOG_VALUE;
// Voltage sensors
// ===================================
stE31 : ST_HMI_ANALOG_VALUE;
// Current voltage for HMI
// ==============================
rVoltage : REAL;
// Current current for HMI
// ==============================
rCurrent : REAL;
// Current status
// ====================================
eStatus : E_COMPONENT_STATUS;
// Semi auto enable
// ====================================
stButtonSemiAutoEnable : ST_HMI_CONTROL_BUTTON;
stButtonSemiAutoDisable : ST_HMI_CONTROL_BUTTON;
// Aknowledge all alarms button
// ===================================
//stButtonAckAlarms : ST_HMI_CONTROL_BUTTON;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

316
PLC/GVLs/GVL_CONFIG.TcGVL Normal file
View File

@@ -0,0 +1,316 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<GVL Name="GVL_CONFIG" Id="{0773bf51-0237-454d-a970-cfd896054edb}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL CONSTANT
// ===========================
// Number of active strings
// ===========================
uiNumberOfStrings : UINT := 2;
uiNumberOfUnits : UINT := uiNumberOfStrings * 12;
END_VAR
VAR_GLOBAL PERSISTENT
axStringEnabled : ARRAY [0..uiNumberOfStrings-1] OF BOOL;
// ===========================
// Unit hardware config
// ===========================
stUnitConfig : ST_UNIT_CONFIG :=
(
// Pump poslyt segment inlet
stConfigPosolytPump :=
(
rTargetMin := 0.0,
rTargetMax := 100.0,
timRampUpTime := T#10S,
timRampDownTime := T#10S,
stAnalogInputConfig := (iAIMax := 108, iAIMin := 0, rPVMax := 100, rPVMin := 0, sUnit := '%'),
stAnalogOutputConfig := (iAIMax := 29490, iAIMin := 0, rPVMax := 100, rPVMin := 4.807),
xHasAnalogFeedback := TRUE,
xHasMCBFeedback := TRUE,
xHasRepairSwitchFeedback := FALSE
),
// Pump negolyt segment inlet
stConfigNegolytPump :=
(
rTargetMin := 0.0,
rTargetMax := 100.0,
timRampUpTime := T#5S,
timRampDownTime := T#5S,
stAnalogInputConfig := (iAIMax := 108, iAIMin := 0, rPVMax := 100, rPVMin := 0, sUnit := '%'),
stAnalogOutputConfig := (iAIMax := 29490, iAIMin := 0, rPVMax := 100, rPVMin := 4.807),
xHasAnalogFeedback := TRUE,
xHasMCBFeedback := TRUE,
xHasRepairSwitchFeedback := FALSE
),
// Valve posolyt tank outlet
stConfigPosolytValve := (timTimeoutOpen := T#10S, timTimeoutClose := T#10S, xHasOpenFeedback := TRUE, xHasClosedFeedback := TRUE),
// Valve negolyt tank outlet
stConfigNegolytValve := (timTimeoutOpen := T#10S, timTimeoutClose := T#10S, xHasOpenFeedback := TRUE, xHasClosedFeedback := TRUE),
// Pressure posolyt segment inlet
stConfigPosolytPressureSegmentInlet := (iAIMax := 32767, iAIMin := 0, rPVMax := 2000, rPVMin := 0, sUnit := 'mbar'),
stEWLPosolytPressureSegmentInlet := (rErrorMin := 200, rWarningMin := 250, rWarningMax := 550, rErrorMax := 600),
stEWDPosolytPressureSegmentInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#0S,
timErrorLowOff := T#5S,
timWarningLowOn := T#1S,
timWarningLowOff := T#5S,
timWarningHighOn := T#1S,
timWarningHighOff := T#5S,
timErrorHighOn := T#0S,
timErrorHighOff := T#5S
),
// Pressure negolyt segment inlet
stConfigNegolytPressureSegmentInlet := (iAIMax := 32767, iAIMin := 0, rPVMax := 2000, rPVMin := 0, sUnit := 'mbar'),
stEWLNegolytPressureSegmentInlet := (rErrorMin := 200, rWarningMin := 250, rWarningMax := 550, rErrorMax := 600),
stEWDNegolytPressureSegmentInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#0S,
timErrorLowOff := T#5S,
timWarningLowOn := T#1S,
timWarningLowOff := T#5S,
timWarningHighOn := T#1S,
timWarningHighOff := T#5S,
timErrorHighOn := T#0S,
timErrorHighOff := T#5S
),
// Pressure posolyt tank inlet
stConfigPosolytPressureTankInlet := (iAIMax := 32767, iAIMin := 0, rPVMax := 2000, rPVMin := 0, sUnit := 'mbar'),
stEWLPosolytPressureTankInlet := (rErrorMin := -20, rWarningMin := -10, rWarningMax := 50, rErrorMax := 75),
stEWDPosolytPressureTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#0S,
timErrorLowOff := T#5S,
timWarningLowOn := T#1S,
timWarningLowOff := T#5S,
timWarningHighOn := T#1S,
timWarningHighOff := T#5S,
timErrorHighOn := T#0S,
timErrorHighOff := T#5S
),
// Pressure negolyt tank inlet
stConfigNegolytPressureTankInlet := (iAIMax := 32767, iAIMin := 0, rPVMax := 2000, rPVMin := 0, sUnit := 'mbar'),
stEWLNegolytPressureTankInlet := (rErrorMin := -20, rWarningMin := -10, rWarningMax := 50, rErrorMax := 75),
stEWDNegolytPressureTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#0S,
timErrorLowOff := T#5S,
timWarningLowOn := T#1S,
timWarningLowOff := T#5S,
timWarningHighOn := T#1S,
timWarningHighOff := T#5S,
timErrorHighOn := T#0S,
timErrorHighOff := T#5S
),
// Temperature sensor posolyt tank inlet
stConfigPosolytTempTankInlet := (iAIMax := 32767, iAIMin := -32768, rPVMax := 3276.7, rPVMin := -3276.8, sUnit := '°C'),
stEWLPosolytTempTankInlet := (rErrorMin := 10, rWarningMin := 15, rWarningMax := 42, rErrorMax := 45),
stEWDPosolytTempTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#0S,
timErrorLowOff := T#5S,
timWarningLowOn := T#1S,
timWarningLowOff := T#5S,
timWarningHighOn := T#1S,
timWarningHighOff := T#5S,
timErrorHighOn := T#0S,
timErrorHighOff := T#5S
),
// Temperature sensor negolyt tank inlet
stConfigNegolytTempTankInlet := (iAIMax := 32767, iAIMin := -32768, rPVMax := 3276.7, rPVMin := -3276.8, sUnit := '°C'),
stEWLNegolytTempTankInlet := (rErrorMin := 15, rWarningMin := 15, rWarningMax := 42, rErrorMax := 45),
stEWDNegolytTempTankInlet :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#0S,
timErrorLowOff := T#5S,
timWarningLowOn := T#1S,
timWarningLowOff := T#5S,
timWarningHighOn := T#1S,
timWarningHighOff := T#5S,
timErrorHighOn := T#0S,
timErrorHighOff := T#5S
),
// Voltage sensor segment
// EL3214-0090 CoE Verzeichnis
// Index 0x80n0:02 "Presentation" = Signed(0) -> Resolution 1/10°C
// Index 0x80n0:19 "RTD Element" = PT100(0)
stConfigVoltageSegment := (iAIMax := 32767, iAIMin := 0, rPVMax := 150, rPVMin := 0, sUnit := 'V'),
stEWLVoltageSegment := (rErrorMin := 50, rWarningMin := 54, rWarningMax := 79, rErrorMax := 80),
stEWDVoltageSegment :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#0S,
timErrorLowOff := T#5S,
timWarningLowOn := T#1S,
timWarningLowOff := T#5S,
timWarningHighOn := T#1S,
timWarningHighOff := T#5S,
timErrorHighOn := T#0S,
timErrorHighOff := T#5S
),
rMaxDeltaPSegmentInlet := 50.0
);
// ===========================
// SCS Current measurement settings
// ===========================
stConfigSCSCurrent : ST_ANALOG_IO_CONFIG := (iAIMax := 32767, iAIMin := 0, rPVMax := 200, rPVMin := 0, sUnit := 'A');
stEWLSCSCurrent : ST_ANALOG_EW_LEVELS;
stEWDSCSCurrent : ST_ANALOG_EW_DELAYS;
// ===========================
// Control cabinet temperature sensor config
// ===========================
// Temperature sensor control cabinets
stConfigCabinetTemp : ST_ANALOG_IO_CONFIG := (iAIMax := 32767, iAIMin := -32768, rPVMax := 3276.7, rPVMin := -3276.8, sUnit := '°C');
stEWLCabinetTemp : ST_ANALOG_EW_LEVELS := (rErrorMin := -20, rWarningMin := -15, rWarningMax := 40, rErrorMax := 80);
stEWDCabinetTemp : ST_ANALOG_EW_DELAYS :=
(
timHardwareSignalLevelOn := T#0S,
timHardwareSignalLevelOff := T#5S,
timErrorLowOn := T#1S,
timErrorLowOff := T#5S,
timWarningLowOn := T#1S,
timWarningLowOff := T#5S,
timWarningHighOn := T#1S,
timWarningHighOff := T#5S,
timErrorHighOn := T#1S,
timErrorHighOff := T#5S
);
// ===========================
// General settings
// ===========================
// Pump posolyt on power in %
rPumpPosolytOnPower : REAL := 70.0;
// Pump negolyt on power in %
rPumpNegolytOnPower : REAL := 70.0;
// Pump posolyt discharge segment without inverter power in %
rPumpPosolytDisChrgPower : REAL := 50.0;
// Pump posolyt discharge segment without inverter power in %
rPumpNegolytDisChrgPower : REAL := 50.0;
// Unit voltage pumps shutoff threshold (Volt)
rPumpshutoffThreshold : REAL := 15.0;
// Minimum unit voltage required for inverter startup (Volt)
rMinimumUnitVoltage : REAL := 55.0;
// Maximum unit voltage for fully charged (Volt)
rMaximumUnitVoltage : REAL := 78.5;
// Delta value to minimum unit voltage for shutdown discharge (Volt)
rDeltaUnitVoltageShutdownDischarge : REAL := 5.0;
// Maximum absolute voltage difference
// between units in the same module
rMaxAbsDiffVoltageUnitsOnModule : REAL := 10.0;
// Maximum absolute voltage difference
// between Modules (Volt)
rMaxAbsDiffVoltageModulesInString : REAL := 20.0;
// Minimum absolute power command to enable battery (Watt)
diMinimumAbsPowerForEnable : DINT := 100;
// Maximum allowed charging power (Watt) per String
// 24.000 W -> 2.000 W per Unit
diMaxStringChargingPower : DINT := -36_000;
// Maximum allowed discharging power (Watt) per String
// 24.000 W -> 2.000 W per Unit
diMaxStringDischargePower : DINT := 36_000;
// Inverter ip address for string 1
sInverterIpString1 : STRING := '192.168.42.10';
// Inverter ip address for string 2
sInverterIpString2 : STRING := '192.168.42.20';
timInverterStartupTimeout : TIME := T#3M;
// Absolute shutdown discharge power (Watt)
// 12.000 W -> 1.000 W per unit
rAbsShutdownDischargePower : REAL := 6_500;
// Allow inverter fast shutdown discharge
xShutdownDischargeWithInverter : BOOL := FALSE;
// String fully charged voltage (Volt)
// 960 V -> 80 V per Unit
rStringFullyChargedVoltage : REAL := 960.0;
// String empty voltage (Volt) (617V is needed for the inverter to start up -> 55.0V per Segment)
rStringEmptyVoltage : REAL := 660.0;
// Unit wait startup time (was 1 minute, reduced because of Doppelhöcker-Test)
timUnitStartupTime : TIME := T#15S;
// Unit balancing wait startup time
timUnitBalancingStartupTime : TIME := T#3M;
// All modules in string not ready timeout
timStringReadyTimeout : TIME := T#6M;
// Timeout for isolation error
timIsoErrorTimeout : TIME := T#20S;
// Balancing factor
rBalancingFactor : REAL := 20.0;
// Timeout heartbeat from EMS
timEMSHeartbeatTimeout : TIME := T#5S;
// Flag if charging should be done with cv phase at end
xCVCharging : BOOL := FALSE;
// Controller parameters for cv charging
rCVKp : REAL := 0.0;
// In ms
rCVTn : REAL := 0.0;
// Minimum current for cv charging in Amps
rMinCVCurrentForFull : REAL := 5.0;
// Time for current to be below set target before cv charging is done
timCVCurrentReached : TIME := T#10S;
// Dummy to deactivate functions
{attribute 'analysis' := '-33'}
xDummy : BOOL := FALSE;
udiMaxConsecutiveInvError : UDINT := 10;
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

36
PLC/GVLs/GVL_MODBUS.TcGVL Normal file
View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<GVL Name="GVL_MODBUS" Id="{913a9222-1338-4c08-b758-91c1bd26dcd9}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL
// Modbus interface to customer EMS
stModbusEMSComm : ST_EMS_MODBUS_INTERFACE := (
stModbusReg10 := (
sManufacturer := 'cmblu energy ag',
sModelname := 'all liquid',
sSerialnumber := '202312151643',
sBMSVersion := '0.8.0',
uiTotalParallelMembers := 2,
uiActiveParallelMembers := 0),
stModbusReg11 := (
eChargeStatus := E_CHARGE_STATUS.UNDEFINED,
eBatteryStatus := E_BATTERY_STATUS.OFF)
);
// Addr: 13.000
stBMSErrorReg : ST_MODBUS_REG_13;
// Confirm alarms through modbus
// Addr: 13.006
wConfirmAlarms : WORD;
// Addr: 14.000 -> 14.047
// Index 0 -> Unit 1, Index 1 -> Unit 2 etc.
awWarningsUnitsActive : ARRAY [0..(GVL_CONFIG.uiNumberOfUnits-1)] OF U_UNIT_WARNING_REGISTER;
// Addr: 15.000 -> 15.047
// Index 0 -> Unit 1, Index 1 -> Unit 2 etc.
awErrorsUnitsActive : ARRAY [0..(GVL_CONFIG.uiNumberOfUnits-1)] OF U_UNIT_ERROR_REGISTER;
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<GVL Name="GVL_PowerDistribution" Id="{59a6cd50-20bf-488e-9d38-00b4a9565d56}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

53
PLC/GVLs/GVL_SCADA.TcGVL Normal file
View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<GVL Name="GVL_SCADA" Id="{8186ff04-764f-4b24-8a6b-d0a44d528e6f}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL
// Array for string HMI
stHMIInterface : ARRAY [0..1] OF ST_STRING_HMI_INTERFACE;
// Temperature sensor BMS control cabinet
stTempCabinetBMS : ST_HMI_ANALOG_VALUE;
// Acknowledge alarm button
stAckAlarmsButton : ST_HMI_CONTROL_BUTTON := (xRelease := TRUE);
// HMI interface to control the battery throught the HMI
{attribute 'OPC.UA.DA' := '1'}
stAutomaticModeHMI : ST_AUTO_HMI_INTERFACE;
// Requested control mode by HMI
{attribute 'OPC.UA.DA' := '1'}
eRequestedControlMode : E_BMS_CONTROL_MODE;
// Current control mode
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
eCurrentControlMode : E_BMS_CONTROL_MODE;
// Can change current control mode
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
xCanChangeControlMode : BOOL;
// Current battery power
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
diCurrentBatteryPower : DINT;
// Last power charged value
lrChargedPowerValueWH : LREAL;
// Last power discharged value
lrDischargedPowerValueWH : LREAL;
// Last discharged utility power value
lrLastCycleUtilityPowerValueWh : LREAL;
// Cycle status
eCycleStatus : E_CYCLE_STATUS;
xDummy : BOOL := FALSE;
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

2691
PLC/PLC.plcproj Normal file

File diff suppressed because it is too large Load Diff

621
PLC/PLC.tmc Normal file

File diff suppressed because one or more lines are too long

651
PLC/POUs/FB_Module.TcPOU Normal file
View File

@@ -0,0 +1,651 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<POU Name="FB_Module" Id="{87be924f-018d-4c09-997b-f0c0054414cc}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_Module
VAR_INPUT
// Emergency stop ok
xEmergencyStopOk : BOOL;
// Unit numbering start (0 based index)
// Unit 1 -> Index 0
uiFirstUnitIndex : UINT;
// Enable
xEnable : BOOL;
// Start balancing
xStartBalancing : BOOL;
// Module in safety check mode
xInSafetyCheckMode : BOOL;
// String operation mode
eStringOperatingMode : E_STRING_OPERATING_MODE;
// All safetyinterlocks are ok
xSafetyIntlksOk : BOOL;
// Module completely off
xOff : BOOL := TRUE;
// HMI Interface
refstHMIInterface : REFERENCE TO ST_MODULE_HMI_INTERFACE;
// Release alarms
xReleaseErrors : BOOL;
// Release analog io limit errors
xReleaseLimitErrors : BOOL;
// Release manual mode
xReleaseManualMode : BOOL;
// Switch all components to manual mode
xAllToManualMode : BOOL;
// Input to confirm all errors
xConfirmAlarms : BOOL;
// Balancing target Voltage
rBalancingTargetVoltage : REAL;
// Inverter enabled status
xInverterEnabled : BOOL;
// Leakage double segment 1/2
xLeakageSegments12 AT %I* : BOOL;
// Leakage double segment 3/4
xLeakageSegments34 AT %I* : BOOL;
// Leakage tank
xLeakageTank AT %I* : BOOL;
// Current current value from string to copy to HMI interface
rCurrent : REAL;
// Current EtherCAT state
uiECState AT %I* : UINT;
END_VAR
VAR_OUTPUT
// Module voltage
rCurrentVoltage : REAL;
// Module ready
xReady : BOOL;
// Module in shutdown segment discharge mode
xInShutdownDischargeMode : BOOL;
// Module can be discharged during shutdown sequence
xShutdownDischargeAllowed : BOOL;
// One unit has an error
xError : BOOL;
// One unit has a warning
xWarning : BOOL;
// Temperature control cabinet above 40 °C
xTempCabinetWarning : BOOL;
// All modules in automatic mode
xAllUnitsInAutomatic : BOOL;
// Smallest segment voltage
rSmallestSegmentVoltage : REAL;
// Highest segment voltage
rHighestSegmentVoltage : REAL;
// Balancing done
xBalancingDone : BOOL;
END_VAR
VAR
_fbUnit1 : FB_Unit(CONCAT(Name, ' - Unit 1'));
_fbUnit2 : FB_Unit(CONCAT(Name, ' - Unit 2'));
_fbUnit3 : FB_Unit(CONCAT(Name, ' - Unit 3'));
_fbUnit4 : FB_Unit(CONCAT(Name, ' - Unit 4'));
// Temperature sensor cabinet
_fbTempSensorCabinet : FB_AnalogInput(CONCAT(Name, ' - T1_Cabinet'));
// Flag for unit balance checking
_xBalanceOk : BOOL;
// All units are ready
_xAllUnitsReady : BOOL;
// Units out of balance alarm
_fbUnitsOutOfBalanceAlarm : FB_TcAlarm;
// Leackage tank alarm
_fbLeackageTankAlarm : FB_TcAlarm;
// Leackage Segment 1/2 alarm
_fbLeackageSegment12Alarm : FB_TcAlarm;
// Leackage Segemnt 3/4 alarm
_fbLeackageSegment34Alarm : FB_TcAlarm;
// Connection lost alarm
_fbConnLostAlarm : FB_TcAlarm;
// Module name
_sName : STRING;
_fbBalanceNotOkSignal : FB_ReleaseSignal;
_xECModuleInOP : BOOL;
_xFirstCycle : BOOL := TRUE;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[IF _xFirstCycle THEN
_xFirstCycle := FALSE;
_fbUnit1.Name := CONCAT(Name, ' - Unit 1');
_fbUnit2.Name := CONCAT(Name, ' - Unit 2');
_fbUnit3.Name := CONCAT(Name, ' - Unit 3');
_fbUnit4.Name := CONCAT(Name, ' - Unit 4');
_fbTempSensorCabinet.Name := CONCAT(Name, ' - T1_Cabinet');
END_IF
// Reset error and warning flag
xError := FALSE;
xWarning := FALSE;
// Reset automatic mode flag
xAllUnitsInAutomatic := TRUE;
// Reset safety interlocks flag
xSafetyIntlksOk := TRUE;
// ===============================
// Handle module connection lost error
// ===============================
_xECModuleInOP := (uiECState AND 16#000F) = 8;
IF (NOT _xECModuleInOP) AND (NOT _fbConnLostAlarm.bRaised) AND xReleaseErrors THEN
_fbConnLostAlarm.Raise(0);
END_IF
IF (_xECModuleInOP) AND _fbConnLostAlarm.bRaised THEN
_fbConnLostAlarm.Clear(0, FALSE);
END_IF
IF _fbConnLostAlarm.eConfirmationState = TcEventConfirmationState.WaitForConfirmation AND xConfirmAlarms THEN
_fbConnLostAlarm.Confirm(0);
END_IF
// ===============================
// Leackage tank error (1 - OK; 0 - Leackage)
// ===============================
IF (NOT xLeakageTank) AND (NOT _fbLeackageTankAlarm.bRaised) AND xReleaseErrors THEN
_fbLeackageTankAlarm.Raise(0);
END_IF
IF xLeakageTank AND _fbLeackageTankAlarm.bRaised THEN
_fbLeackageTankAlarm.Clear(0, FALSE);
END_IF
IF _fbLeackageTankAlarm.eConfirmationState = TcEventConfirmationState.WaitForConfirmation AND xConfirmAlarms THEN
_fbLeackageTankAlarm.Confirm(0);
END_IF
// ===============================
// Leackage Unit 1/2 error (1 - OK; 0 - Leackage)
// ===============================
IF (NOT xLeakageSegments12) AND (NOT _fbLeackageSegment12Alarm.bRaised) AND xReleaseErrors THEN
GVL_MODBUS.awErrorsUnitsActive[uiFirstUnitIndex].stBitmap.bLeack := 1;
GVL_MODBUS.awErrorsUnitsActive[uiFirstUnitIndex+1].stBitmap.bLeack := 1;
_fbLeackageSegment12Alarm.Raise(0);
END_IF
IF xLeakageSegments12 AND _fbLeackageSegment12Alarm.bRaised THEN
_fbLeackageSegment12Alarm.Clear(0, FALSE);
END_IF
IF _fbLeackageSegment12Alarm.eConfirmationState = TcEventConfirmationState.WaitForConfirmation AND xConfirmAlarms THEN
_fbLeackageSegment12Alarm.Confirm(0);
END_IF
// ===============================
// Leackage Unit 3/4 error (1 - OK; 0 - Leackage)
// ===============================
IF (NOT xLeakageSegments34) AND (NOT _fbLeackageSegment34Alarm.bRaised) AND xReleaseErrors THEN
GVL_MODBUS.awErrorsUnitsActive[uiFirstUnitIndex+2].stBitmap.bLeack := 1;
GVL_MODBUS.awErrorsUnitsActive[uiFirstUnitIndex+3].stBitmap.bLeack := 1;
_fbLeackageSegment34Alarm.Raise(0);
END_IF
IF xLeakageSegments34 AND _fbLeackageSegment34Alarm.bRaised THEN
_fbLeackageSegment34Alarm.Clear(0, FALSE);
END_IF
IF _fbLeackageSegment34Alarm.eConfirmationState = TcEventConfirmationState.WaitForConfirmation AND xConfirmAlarms THEN
_fbLeackageSegment34Alarm.Confirm(0);
END_IF
// ===============================
// Unit 1
// ===============================
_fbUnit1(
xEnable := xEnable,
xStartBalancing := xStartBalancing,
eStringOperatingMode := eStringOperatingMode,
xInverterEnabled := xInverterEnabled,
xInSafetyCheckMode := xInSafetyCheckMode,
stUnitConfig:= GVL_CONFIG.stUnitConfig,
stHMIInterface:= refstHMIInterface.stHMIInterfaceUnit1,
xEmergencyStopOk:= xEmergencyStopOk,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xConfirmAlarms:= xConfirmAlarms,
xReleaseManualMode := xReleaseManualMode,
rBalancingTargetVoltage := rBalancingTargetVoltage,
xAllToManualMode := xAllToManualMode,
stModbusWarnings := GVL_MODBUS.awWarningsUnitsActive[uiFirstUnitIndex],
stModbusErrors := GVL_MODBUS.awErrorsUnitsActive[uiFirstUnitIndex]);
refstHMIInterface.stHMIInterfaceUnit1.rCurrent := rCurrent;
IF _fbUnit1.xWarning THEN
xWarning := TRUE;
END_IF
IF _fbUnit1.xError THEN
xError := TRUE;
END_IF
IF NOT _fbUnit1.xSafetyIntlksOk THEN
xSafetyIntlksOk := FALSE;
END_IF
IF NOT _fbUnit1.xAllComponentsInAuto THEN
xAllUnitsInAutomatic := FALSE;
END_IF
// ===============================
// Unit 2
// ===============================
_fbUnit2(
xEnable := xEnable,
xStartBalancing := xStartBalancing,
eStringOperatingMode := eStringOperatingMode,
xInverterEnabled := xInverterEnabled,
xInSafetyCheckMode := xInSafetyCheckMode,
stUnitConfig:= GVL_CONFIG.stUnitConfig,
stHMIInterface:= refstHMIInterface.stHMIInterfaceUnit2,
xEmergencyStopOk:= xEmergencyStopOk,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xConfirmAlarms:= xConfirmAlarms,
xReleaseManualMode := xReleaseManualMode,
rBalancingTargetVoltage := rBalancingTargetVoltage,
xAllToManualMode := xAllToManualMode,
stModbusWarnings := GVL_MODBUS.awWarningsUnitsActive[uiFirstUnitIndex+1],
stModbusErrors := GVL_MODBUS.awErrorsUnitsActive[uiFirstUnitIndex+1]);
refstHMIInterface.stHMIInterfaceUnit2.rCurrent := rCurrent;
IF _fbUnit2.xWarning THEN
xWarning := TRUE;
END_IF
IF _fbUnit2.xError THEN
xError := TRUE;
END_IF
IF NOT _fbUnit2.xSafetyIntlksOk THEN
xSafetyIntlksOk := FALSE;
END_IF
IF NOT _fbUnit2.xAllComponentsInAuto THEN
xAllUnitsInAutomatic := FALSE;
END_IF
// ===============================
// Unit 3
// ===============================
_fbUnit3(
xEnable := xEnable,
xStartBalancing := xStartBalancing,
eStringOperatingMode := eStringOperatingMode,
xInverterEnabled := xInverterEnabled,
xInSafetyCheckMode := xInSafetyCheckMode,
stUnitConfig:= GVL_CONFIG.stUnitConfig,
stHMIInterface:= refstHMIInterface.stHMIInterfaceUnit3,
xEmergencyStopOk:= xEmergencyStopOk,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xConfirmAlarms:= xConfirmAlarms,
xReleaseManualMode := xReleaseManualMode,
rBalancingTargetVoltage := rBalancingTargetVoltage,
xAllToManualMode := xAllToManualMode,
stModbusWarnings := GVL_MODBUS.awWarningsUnitsActive[uiFirstUnitIndex+2],
stModbusErrors := GVL_MODBUS.awErrorsUnitsActive[uiFirstUnitIndex+2]);
refstHMIInterface.stHMIInterfaceUnit3.rCurrent := rCurrent;
IF _fbUnit3.xWarning THEN
xWarning := TRUE;
END_IF
IF _fbUnit3.xError THEN
xError := TRUE;
END_IF
IF NOT _fbUnit3.xSafetyIntlksOk THEN
xSafetyIntlksOk := FALSE;
END_IF
IF NOT _fbUnit3.xAllComponentsInAuto THEN
xAllUnitsInAutomatic := FALSE;
END_IF
// ===============================
// Unit 4
// ===============================
_fbUnit4(
xEnable := xEnable,
xStartBalancing := xStartBalancing,
eStringOperatingMode := eStringOperatingMode,
xInverterEnabled := xInverterEnabled,
xInSafetyCheckMode := xInSafetyCheckMode,
stUnitConfig:= GVL_CONFIG.stUnitConfig,
stHMIInterface:= refstHMIInterface.stHMIInterfaceUnit4,
xEmergencyStopOk:= xEmergencyStopOk,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xConfirmAlarms:= xConfirmAlarms,
xReleaseManualMode := xReleaseManualMode,
rBalancingTargetVoltage := rBalancingTargetVoltage,
xAllToManualMode := xAllToManualMode,
stModbusWarnings := GVL_MODBUS.awWarningsUnitsActive[uiFirstUnitIndex+3],
stModbusErrors := GVL_MODBUS.awErrorsUnitsActive[uiFirstUnitIndex+3]);
refstHMIInterface.stHMIInterfaceUnit4.rCurrent := rCurrent;
IF _fbUnit4.xWarning THEN
xWarning := TRUE;
END_IF
IF _fbUnit4.xError THEN
xError := TRUE;
END_IF
IF NOT _fbUnit4.xSafetyIntlksOk THEN
xSafetyIntlksOk := FALSE;
END_IF
IF NOT _fbUnit4.xAllComponentsInAuto THEN
xAllUnitsInAutomatic := FALSE;
END_IF
// ===============================
// Temperature sensor control cabinet
// ===============================
_fbTempSensorCabinet(
stScalingConfig:= GVL_CONFIG.stConfigCabinetTemp,
stEWConfig:= GVL_CONFIG.stEWLCabinetTemp,
stEWDelayConfig:= GVL_CONFIG.stEWDCabinetTemp,
xReleaseErrors:= xReleaseErrors,
xReleaseLimitErrors:= xReleaseLimitErrors,
xReleaseHardwareErrors:= xReleaseErrors,
xConfirmAlarms:= xConfirmAlarms,
stHMIInterface=> refstHMIInterface.stTempCabinet);
// Set warning output for modbus register bits
IF _fbTempSensorCabinet.xWarningHigh THEN
xTempCabinetWarning := TRUE;
END_IF
IF _fbTempSensorCabinet.xError THEN
xError := TRUE;
END_IF
IF _fbTempSensorCabinet.xWarning THEN
xWarning := TRUE;
END_IF
// ===============================
// Units ready check
// ===============================
_xAllUnitsReady := _fbUnit1.xReady AND _fbUnit2.xReady AND _fbUnit3.xReady AND _fbUnit4.xReady;
// ===============================
// Balancing done check
// ===============================
xBalancingDone := _fbUnit1.xBalancingDone AND _fbUnit2.xBalancingDone AND _fbUnit3.xBalancingDone AND _fbUnit4.xBalancingDone;
// ===============================
// Units in shutdown discharge mode
// ===============================
xInShutdownDischargeMode := _fbUnit1.xInShutdownDischargeMode AND _fbUnit2.xInShutdownDischargeMode AND _fbUnit3.xInShutdownDischargeMode AND _fbUnit4.xInShutdownDischargeMode;
// ===============================
// Units shutdown discharge allowed
// ===============================
xShutdownDischargeAllowed := _fbUnit1.xShutdownDischargeAllowed AND _fbUnit2.xShutdownDischargeAllowed AND _fbUnit3.xShutdownDischargeAllowed AND _fbUnit4.xShutdownDischargeAllowed;
// ===============================
// All units off
// ===============================
xOff := _fbUnit1.xOff AND _fbUnit2.xOff AND _fbUnit3.xOff AND _fbUnit4.xOff;
// ===============================
// Calculate module voltage
// ===============================
rCurrentVoltage := _fbUnit1.rCurrentVoltage + _fbUnit2.rCurrentVoltage + _fbUnit3.rCurrentVoltage + _fbUnit4.rCurrentVoltage;
refstHMIInterface.rVoltage := refstHMIInterface.rVoltage * 0.9 + rCurrentVoltage * 0.1;
// ===============================
// Module balance check
// ===============================
// Reset balance ok flag
_xBalanceOk := TRUE;
// Test unit 1 with unit 2
IF ABS(_fbUnit1.rCurrentVoltage - _fbUnit2.rCurrentVoltage) > GVL_CONFIG.rMaxAbsDiffVoltageUnitsOnModule THEN
_xBalanceOk := FALSE;
END_IF
// Test unit 1 with unit 3
IF ABS(_fbUnit1.rCurrentVoltage - _fbUnit3.rCurrentVoltage) > GVL_CONFIG.rMaxAbsDiffVoltageUnitsOnModule THEN
_xBalanceOk := FALSE;
END_IF
// Test unit 1 with unit 4
IF ABS(_fbUnit1.rCurrentVoltage - _fbUnit4.rCurrentVoltage) > GVL_CONFIG.rMaxAbsDiffVoltageUnitsOnModule THEN
_xBalanceOk := FALSE;
END_IF
// Test unit 2 with unit 3
IF ABS(_fbUnit2.rCurrentVoltage - _fbUnit3.rCurrentVoltage) > GVL_CONFIG.rMaxAbsDiffVoltageUnitsOnModule THEN
_xBalanceOk := FALSE;
END_IF
// Test unit 2 with unit 4
IF ABS(_fbUnit2.rCurrentVoltage - _fbUnit4.rCurrentVoltage) > GVL_CONFIG.rMaxAbsDiffVoltageUnitsOnModule THEN
_xBalanceOk := FALSE;
END_IF
// Test unit 3 with unit 4
IF ABS(_fbUnit3.rCurrentVoltage - _fbUnit4.rCurrentVoltage) > GVL_CONFIG.rMaxAbsDiffVoltageUnitsOnModule THEN
_xBalanceOk := FALSE;
END_IF
// Release signal for balance not ok
_fbBalanceNotOkSignal(
xSignal:= NOT _xBalanceOk,
xRelease:= xEnable AND _xAllUnitsReady,
timOnDelay:= T#5S,
timOffDelay:= T#5S,
xReleaseSignal=> );
// Signal an error if all units are ready and module is out of balance
IF _xAllUnitsReady AND _fbBalanceNotOkSignal.xReleaseSignal THEN
xError := TRUE;
END_IF
// Raise error
IF _fbBalanceNotOkSignal.xReleaseSignal AND (NOT _fbUnitsOutOfBalanceAlarm.bRaised) THEN
_fbUnitsOutOfBalanceAlarm.Raise(0);
END_IF
// Clear error only with confirmation because of voltage ripple event spam
IF (NOT _fbBalanceNotOkSignal.xReleaseSignal) AND _fbUnitsOutOfBalanceAlarm.bRaised AND xConfirmAlarms THEN
_fbUnitsOutOfBalanceAlarm.Clear(0, FALSE);
END_IF
// Confirm error
IF _fbUnitsOutOfBalanceAlarm.eConfirmationState = TcEventConfirmationState.WaitForConfirmation AND xConfirmAlarms THEN
_fbUnitsOutOfBalanceAlarm.Confirm(0);
END_IF
// ===============================
// Module ready validation check
// ===============================
IF _xAllUnitsReady AND (NOT _fbBalanceNotOkSignal.xReleaseSignal) THEN
xReady := TRUE;
ELSE
xReady := FALSE;
END_IF
// ===============================
// Get the smallest segment Voltage
// for balancing
// ===============================
rSmallestSegmentVoltage := MIN(_fbUnit1.rCurrentVoltage, _fbUnit2.rCurrentVoltage, _fbUnit3.rCurrentVoltage, _fbUnit4.rCurrentVoltage);
rHighestSegmentVoltage := MAX(_fbUnit1.rCurrentVoltage, _fbUnit2.rCurrentVoltage, _fbUnit3.rCurrentVoltage, _fbUnit4.rCurrentVoltage);
// ===============================
// Copy string current to module current
// ===============================
refstHMIInterface.rCurrent := rCurrent;
// ===============================
// Module status sum
// ===============================
// Module ready
IF xReady AND (NOT xError) THEN
refstHMIInterface.eStatus := E_COMPONENT_STATUS.ON;
END_IF
// Module starting
IF (NOT xOff) AND (NOT xReady) AND xEnable AND (NOT xError) THEN
refstHMIInterface.eStatus := E_COMPONENT_STATUS.STARTING;
END_IF
// Module shutdown
IF (NOT xOff) AND (NOT xReady) AND (NOT xEnable) AND (NOT xError) THEN
refstHMIInterface.eStatus := E_COMPONENT_STATUS.SHUTDOWN;
END_IF
// Module off
IF xOff AND (NOT xError) THEN
refstHMIInterface.eStatus := E_COMPONENT_STATUS.OFF;
END_IF
// Module error
IF xError THEN
refstHMIInterface.eStatus := E_COMPONENT_STATUS.ERROR;
END_IF
]]></ST>
</Implementation>
<Method Name="FB_init" Id="{369c1d27-76e4-45f8-9dbe-03524d3389df}">
<Declaration><![CDATA[METHOD FB_init : BOOL
VAR_INPUT
bInitRetains : BOOL; // if TRUE, the retain variables are initialized (warm start / cold start)
bInCopyCode : BOOL; // if TRUE, the instance afterwards gets moved into the copy code (online change)
sName : STRING;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[_sName := sName;
// Set unit names
_fbUnit1.Name := CONCAT(_sName, 'Unit 1');
_fbUnit2.Name := CONCAT(_sName, 'Unit 2');
_fbUnit3.Name := CONCAT(_sName, 'Unit 3');
_fbUnit4.Name := CONCAT(_sName, 'Unit 4');
// Create out of balance alarm
_fbUnitsOutOfBalanceAlarm.CreateEx(stEventEntry := TC_EVENTS.BMSEvents.ModuleImbalance, bWithConfirmation := TRUE, 0);
// Create alarm message
_fbUnitsOutOfBalanceAlarm.ipArguments.Clear().AddString(_sName);
// Create connection lost alarm
_fbConnLostAlarm.CreateEx(stEventEntry := TC_EVENTS.General.CommError, bWithConfirmation := TRUE, 0);
_fbConnLostAlarm.ipArguments.Clear().AddString(_sName);
// Create leakage alarm messages
_fbLeackageTankAlarm.CreateEx(stEventEntry := TC_EVENTS.General.LeakageTank, bWithConfirmation := TRUE, 0);
_fbLeackageTankAlarm.ipArguments.Clear().AddString(_sName);
_fbLeackageSegment12Alarm.CreateEx(stEventEntry := TC_EVENTS.General.LeakageDS12, bWithConfirmation := TRUE, 0);
_fbLeackageSegment12Alarm.ipArguments.Clear().AddString(_sName);
_fbLeackageSegment34Alarm.CreateEx(stEventEntry := TC_EVENTS.General.LeakageDS34, bWithConfirmation := TRUE, 0);
_fbLeackageSegment34Alarm.ipArguments.Clear().AddString(_sName);]]></ST>
</Implementation>
</Method>
<Property Name="Name" Id="{bc8bc990-5071-47c9-a928-a129c60c6f41}">
<Declaration><![CDATA[PROPERTY Name : String]]></Declaration>
<Get Name="Get" Id="{c00a6d41-9156-49b5-aa08-e4cc4c913fca}">
<Declaration><![CDATA[VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[Name := _sName;]]></ST>
</Implementation>
</Get>
<Set Name="Set" Id="{ade5f4d9-ff42-4236-b5fc-e43a53c9ca28}">
<Declaration><![CDATA[VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[_sName := Name;
// Set unit names
_fbUnit1.Name := CONCAT(_sName, ' - Unit 1');
_fbUnit2.Name := CONCAT(_sName, ' - Unit 2');
_fbUnit3.Name := CONCAT(_sName, ' - Unit 3');
_fbUnit4.Name := CONCAT(_sName, ' - Unit 4');
// Create alarm message
_fbUnitsOutOfBalanceAlarm.ipArguments.Clear().AddString(_sName);
// Create connection lost alarm
_fbConnLostAlarm.ipArguments.Clear().AddString(_sName);
// Create leackage alarm messages
_fbLeackageTankAlarm.ipArguments.Clear().AddString(_sName);
_fbLeackageSegment12Alarm.ipArguments.Clear().AddString(_sName);
_fbLeackageSegment34Alarm.ipArguments.Clear().AddString(_sName);]]></ST>
</Implementation>
</Set>
</Property>
</POU>
</TcPlcObject>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<POU Name="FB_PowerDistribution" Id="{b382f09a-3dcd-41a8-aaaf-4ba50c3b8bb9}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_PowerDistribution
VAR_INPUT
uiMaxActiveStrings : UINT;
uiActiveStrings : UINT;
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[]]></ST>
</Implementation>
</POU>
</TcPlcObject>

View File

@@ -0,0 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.8">
<POU Name="FB_PowerMeter" Id="{9d4159f4-2d3f-4522-a770-c038a26d9d77}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_PowerMeter
VAR_INPUT
xGetEnergyCounters : BOOL;
// IP 75 -> Umrichter
// IP 80 -> Hilfsenergie
sIpAddress : STRING(80);
END_VAR
VAR_OUTPUT
lrEnergyFromGrid : LREAL;
lrEnergyIntoGrid : LREAL;
xBusy : BOOL;
xError : BOOL;
END_VAR
VAR
_fbReadRegs : FB_MBReadRegs;
_awWordArray : ARRAY[0..3] OF WORD;
_awSwapped : ARRAY[0..3] OF WORD;
_udiErrorId : UDINT;
_fbGetEnergyCounters : R_TRIG;
_xResetEnergyCounter : BOOL;
_iState : INT := 0;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[_fbGetEnergyCounters(CLK := xGetEnergyCounters);
IF _fbGetEnergyCounters.Q THEN
_xResetEnergyCounter := TRUE;
END_IF
CASE _iState OF
0: // Idle
IF _xResetEnergyCounter THEN
xBusy := TRUE;
xError := FALSE;
_xResetEnergyCounter := FALSE;
_iState := 10;
END_IF
10: // Read energy from grid
_fbReadRegs(
sIPAddr:= sIpAddress,
nTCPPort:= 502,
nUnitID:= 16#FF,
nQuantity:= 4,
nMBAddr:= 8192,
cbLength:= SIZEOF(_awWordArray),
pDestAddr:= ADR(_awWordArray),
bExecute:= TRUE,
tTimeout:= ,
bBusy=> ,
bError=> ,
nErrId=> ,
cbRead=> );
IF (NOT _fbReadRegs.bBusy) AND (NOT _fbReadRegs.bError) THEN
_fbReadRegs(bExecute := FALSE);
SwapArray();
MEMCPY(ADR(lrEnergyFromGrid), ADR(_awSwapped), 8);
_iState := 20;
END_IF
IF _fbReadRegs.bError THEN
xBusy := FALSE;
xError := TRUE;
_udiErrorId := _fbReadRegs.nErrId;
lrEnergyFromGrid := 0;
_fbReadRegs(bExecute := FALSE);
_iState := 1000;
END_IF
20: // Read energy to grid
_fbReadRegs(
sIPAddr:= '192.168.42.75',
nTCPPort:= 502,
nUnitID:= 16#FF,
nQuantity:= 4,
nMBAddr:= 8196,
cbLength:= SIZEOF(_awWordArray),
pDestAddr:= ADR(_awWordArray),
bExecute:= TRUE,
tTimeout:= ,
bBusy=> ,
bError=> ,
nErrId=> ,
cbRead=> );
IF (NOT _fbReadRegs.bBusy) AND (NOT _fbReadRegs.bError) THEN
_fbReadRegs(bExecute := FALSE);
SwapArray();
MEMCPY(ADR(lrEnergyIntoGrid), ADR(_awSwapped), 8);
_iState := 0;
xBusy := FALSE;
END_IF
IF _fbReadRegs.bError THEN
xBusy := FALSE;
xError := TRUE;
_udiErrorId := _fbReadRegs.nErrId;
lrEnergyIntoGrid := 0;
_fbReadRegs(bExecute := FALSE);
_iState := 0;
END_IF
END_CASE]]></ST>
</Implementation>
<Action Name="SwapArray" Id="{96198008-b45e-42ee-9345-377fed90aab6}">
<Implementation>
<ST><![CDATA[_awSwapped[0] := _awWordArray[3];
_awSwapped[1] := _awWordArray[2];
_awSwapped[2] := _awWordArray[1];
_awSwapped[3] := _awWordArray[0];]]></ST>
</Implementation>
</Action>
</POU>
</TcPlcObject>

50
PLC/POUs/FB_Safety.TcPOU Normal file
View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<POU Name="FB_Safety" Id="{f74eb8e4-e878-485f-9706-8dd039061a6b}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_Safety
VAR_INPUT
xVoltagesInRange AT %I* : BOOL;
xPressureInRange AT %I* : BOOL;
xTemperaturesInRange AT %I* : BOOL;
xReset : BOOL;
refuStringErrorsModbus : REFERENCE TO U_BMS_ERROR_REGISTER;
END_VAR
VAR_OUTPUT
xErrorLatched : BOOL;
END_VAR
VAR
_latchedVoltages : BOOL;
_latchedPressures : BOOL;
_latchedTemperatures : BOOL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[IF xReset THEN
xReset := FALSE;
_latchedVoltages := FALSE;
_latchedPressures := FALSE;
_latchedTemperatures := FALSE;
xErrorLatched := FALSE;
END_IF
IF (NOT xVoltagesInRange) AND NOT xErrorLatched THEN
_latchedVoltages := TRUE;
xErrorLatched := TRUE;
refuStringErrorsModbus.stBitmap.bSafetyErrorVoltage := 1;
END_IF
IF (NOT xPressureInRange) AND NOT xErrorLatched THEN
_latchedPressures := TRUE;
xErrorLatched := TRUE;
refuStringErrorsModbus.stBitmap.bSafetyErrorPressure := 1;
END_IF
IF (NOT xTemperaturesInRange) AND NOT xErrorLatched THEN
_latchedTemperatures := TRUE;
xErrorLatched := TRUE;
refuStringErrorsModbus.stBitmap.bSafetyErrorTemperature := 1;
END_IF]]></ST>
</Implementation>
</POU>
</TcPlcObject>

1156
PLC/POUs/FB_String.TcPOU Normal file

File diff suppressed because it is too large Load Diff

47
PLC/POUs/FB_UMD705.TcPOU Normal file
View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<POU Name="FB_UMD705" Id="{e3557e0d-5497-476d-aba3-e3a1e4ffd057}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_UMD705
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
_xExecute : BOOL;
// FB for reading Modbus holding registers
_fbReadRegister : FB_MBReadRegs;
// FB for writing Modbus holding registers
_fbWriteRegister : FB_MBWriteRegs;
_diLastReset : DINT;
END_VAR
VAR CONSTANT
STATUS_REGISTER : WORD := 40108;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[_fbReadRegister(
sIPAddr:= sInverterIPAddr,
nTCPPort:= 502,
nUnitID:= 16#FF, // 16#FF for Modbus TCP
nQuantity:= 1,
nMBAddr:= STATUS_REGISTER,
cbLength:= SIZEOF(_uiInverterState),
pDestAddr:= ADR(_uiInverterState),
bExecute:= TRUE,
tTimeout:= T#5S,
bBusy=> ,
bError=> ,
nErrId=> ,
cbRead=> );
IF _xExecute THEN
_xExecute := FALSE;
END_IF]]></ST>
</Implementation>
</POU>
</TcPlcObject>

1365
PLC/POUs/FB_Unit.TcPOU Normal file

File diff suppressed because it is too large Load Diff

1730
PLC/POUs/MAIN.TcPOU Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="E_KACO_CURRENT_STATE" Id="{2acb7f0e-c391-4c10-827a-e41a4c5478d9}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_KACO_CURRENT_STATE :
(
OFF := 1,
SLEEPING := 2,
STARTING := 3,
MPPT := 4,
THROTTLED := 5,
SHUTTING_DOWN := 6,
FAULT := 7,
STANDBY := 8,
PRECHARGE := 9,
GRID_PRE_CONNECTED := 10,
GRID_CONNECTED := 11,
NO_ERROR_PENDING := 12
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="E_KACO_PCU_ERROR" Id="{9d943541-7a37-4e53-993d-e5fb676cf523}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_KACO_PCU_ERROR :
(
NO_EVENT := 0,
OVER_TEMP := 1,
OVER_VOLT := 2,
UNDER_VOLT := 3,
BATT_POL_INCORREC := 4,
COUNTER_TOO_HIGH := 5,
DURING_PRECHARGE := 6,
BATT_VOLT_OUT_OF_RANGE := 7,
I2C_COMM := 8,
CAN_COMM := 9,
SWITCH_OFF_AC_DSP := 10
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="E_KACO_PCU_REQUESTED_STATE" Id="{d26b8bd2-4451-4a56-a3ba-471d8a90e01d}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_KACO_PCU_REQUESTED_STATE :
(
UNDEFINED := 0,
OFF := 1,
STANDBY := 8,
GRID_PRE_CONNECTED := 10,
GRID_CONNECTED := 11
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="E_KACO_PCU_STATE" Id="{d3455f44-85c3-4eb1-962f-0096c587ed27}">
<Declaration><![CDATA[{attribute 'qualified_only'}
{attribute 'strict'}
{attribute 'to_string'}
TYPE E_KACO_PCU_STATE :
(
WAIT_FOR_STARTUP :=1,
STANDBY :=2,
SWITCH_REL_MINUS :=3,
SWITCH_REL_PRECHARGE :=4,
SWITCH_REL_PLUS :=5,
RUNNING :=6,
COOLDOWN :=7,
ERROR :=8,
CLEAR_ERROR :=9
);
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_KACO_INFOS" Id="{8a89bb74-fd34-4e8d-a03d-9fc814aadf52}">
<Declaration><![CDATA[TYPE ST_KACO_INFOS :
STRUCT
eRequestedState : E_KACO_PCU_REQUESTED_STATE;
eCurrentState : E_KACO_CURRENT_STATE;
ePCUState : E_KACO_PCU_STATE;
ePCUError : E_KACO_PCU_ERROR;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_KACU_PCU" Id="{268343cf-ebff-47ff-8ac9-f65faeb58856}">
<Declaration><![CDATA[{attribute 'pack_mode' := '1'}
TYPE ST_KACU_PCU :
STRUCT
ePCUState : E_KACO_PCU_STATE;
ePCUError : E_KACO_PCU_ERROR;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_SunspecInverterThreePhase" Id="{f9acf95c-14fe-4c1e-9c73-dff4af6d43b5}">
<Declaration><![CDATA[// Sunspec register 40.070 - 40.120 (Size 52)
TYPE ST_SunspecInverterThreePhase :
STRUCT
// Model value
uiID : UINT;
// Model length
uiL : UINT;
// AC current. Sum of active phases
iA : INT;
// AC current. Phase A
iAphA : INT;
// AC current. Phase B
iAphB : INT;
// AC current. Phase C
iAphC : INT;
// AC current scaling factor
iASF : INT;
// Phase voltage AB
uiPPVphAB : UINT;
// Phase voltage BC
uiPPVphBC : UINT;
// Phase voltage CA
uiPPVphCA : UINT;
// Phase voltage AN
uiPhVphA : UINT;
// Phase voltage BN
uiPhVphB : UINT;
// Phase voltage CN
uiPhVphC : UINT;
// Phase voltage scaling factor
iVSF : INT;
// AC Power
iW : INT;
// AC power scaling factor
iWSF : INT;
// Line frequency
uiHz : UINT;
// Line frequency scaling factor
iHzSF : INT;
// AC apparent power
iVA : INT;
// AC apparent power scaling factor
iVASF : INT;
// AC reactive power
iVAr : INT;
// AC reactive power scaling factor
iVArSF : INT;
// AC power factor
iPF : INT;
// AC power factor scaling factor
iPFSF : INT;
// AC Energy
udiWH : UDINT;
// AC Energy scaling factor
iWHSF : INT;
// DC current
uiDCA : UINT;
// DC current scaling factor
iDCASF : INT;
// DC voltage
uiDCV : UINT;
// DC voltage scaling factor
iDCVSF : INT;
// DC power
iDCW : INT;
// DC power scaling factor
iDCWSF : INT;
// Cabinet temperature
iTmpCab : INT;
// Heat sink temperature
iTmpSnk : INT;
// Transformer temperature
iTmpTrns : INT;
// Other temperature
iTmpOt : INT;
// Temperature scaling factor
iTmpSF : INT;
// Operating state
wSt : WORD;
// Vendor specific operating state
wStVnd : WORD;
// Bitmask value. Event fields.
dwEvt1 : DWORD;
// Reserved for future use
dwEvt2 : DWORD;
// Vendor defined events 1
dwEvtVnd1 : DWORD;
// Vendor defined events 2
dwEvtVnd2 : DWORD;
// Vendor defined events 3
dwEvtVnd3 : DWORD;
// Vendor defined events 4
dwEvtVnd4 : DWORD;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_SunspecNameplateRatings" Id="{d43d4b8b-dd50-4ed8-ac51-53563f3eb7b3}">
<Declaration><![CDATA[// Sunspec register 40.122 - 40.149 (Size 28)
TYPE ST_SunspecNameplateRatings :
STRUCT
// Model value
uiID : UINT;
// Model length
uiL : UINT;
// Type of DER device
wDERTyp : WORD;
// Continuous power output capability of the inverter
uiWRtg : UINT;
// Continuous power output capability of the inverter scaling factor
uiWRtgSF : INT;
// Continuous volt-ampere output capability of the inverter
uiVARtg : UINT;
// Continuous volt-ampere output capability of the inverter scaling factor
uiVARtgSF : INT;
// Continuous VAR capability of the inverter in quadrant 1
iVArRtgQ1 : INT;
// Continuous VAR capability of the inverter in quadrant 2
iVArRtgQ2 : INT;
// Continuous VAR capability of the inverter in quadrant 3
iVArRtgQ3 : INT;
// Continuous VAR capability of the inverter in quadrant 4
iVArRtgQ4 : INT;
// Continuous VAR capability of the inverter in quadrant 1-4 scaling factor
iVArRtgSF : INT;
// Maximum RMS AC current level capability of the inverter
uiARtg : UINT;
// Maximum RMS AC current level capability of the inverter scaling factor
uiARtgSF : INT;
// Minimum power factor capability of the inverter in quadrant 1
iPFRtgQ1 : INT;
// Minimum power factor capability of the inverter in quadrant 2
iPFRtgQ2 : INT;
// Minimum power factor capability of the inverter in quadrant 3
iPFRtgQ3 : INT;
// Minimum power factor capability of the inverter in quadrant 4
iPFRtgQ4 : INT;
// Minimum power factor capability of the inverter in quadrant 1-4 scaling factor
iPFRtgSF : INT;
// Nominal energy rating of storage device
uiWHRtg : UINT;
// Nominal energy rating of storage device scaling factor
uiWHRtgSF : INT;
// The usable capacity of the battery
uiAhrRtg : UINT;
// The usable capacity of the battery scaling factor
uiAhrRtgSF : INT;
// Maximum rate of energy transfer into the storage device
uiMaxChaRte : UINT;
// Maximum rate of energy transfer into the storage device scaling factor
uiMaxChaRteSF : INT;
// Maximum rate of energy transfer out of the storage device
uiMaxDisChaRte : UINT;
// Maximum rate of energy transfer out of the storage device scaling factor
uiMaxDisChaRteSF : INT;
// Padding register
wPad : WORD;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="ST_SUNSPEC_CURRENT_VALUES" Id="{429ce2f6-f580-460c-8eb4-3ddb289effd4}">
<Declaration><![CDATA[TYPE ST_SUNSPEC_CURRENT_VALUES :
STRUCT
// Current DC current (A)
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
rActDCCurrent : REAL;
// Current DC voltage (V)
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
rActDCVoltage : REAL;
// Current DC power (W)
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
rActDCPower : REAL;
// Current AC current. Sum of active phases (A)
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
rActACCurrent : REAL;
// Current AC current. Phase A (A)
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
rActtACPhaseACurrent : REAL;
// Current AC current. Phase B (A)
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
rActtACPhaseBCurrent : REAL;
// Current AC current. Phase C (A)
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
rActtACPhaseCCurrent : REAL;
// Current AC power (W)
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
rActACPower : REAL;
// Current AC frequency (Hz)
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
rActACFreq : REAL;
// Current AC apparent power (VA)
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
rActApparentPower : REAL;
// Current AC reactive power (VAr)
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
rActReactivePower : REAL;
// Current AC power factor
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
rActPowerFactor : REAL;
// Current inverter status
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.Access' := '1'}
{attribute 'analysis' := '-33'}
uiStatus : UINT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<DUT Name="U_SUNSPEC_ERROR" Id="{4000836c-9d7f-470c-9b50-f6d22b3eac05}">
<Declaration><![CDATA[TYPE U_SUNSPEC_ERROR :
UNION
xGroundFault : BOOL;
xDCOverVoltage : BOOL;
xACDisconnected : BOOL;
xDCDisconnected : BOOL;
xGridDisconnected : BOOL;
xCabinetOpen : BOOL;
xManualShutdown : BOOL;
xOverTemp : BOOL;
xOverFrequency : BOOL;
xUnderFrequency : BOOL;
xACOverVoltage : BOOL;
xACUnderVoltage : BOOL;
xBlownStringFuse : BOOL;
xUnderTemp : BOOL;
xMemoryLoss : BOOL;
xHWTestFailure : BOOL;
xOtherAlarm : BOOL;
xOtherWarning : BOOL;
END_UNION
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<POU Name="FB_Limit" Id="{d4518907-6b63-4dbf-8339-7e925234f00a}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_Limit
VAR_INPUT
rIn : REAL;
rMin : REAL;
rMax : REAL;
END_VAR
VAR_OUTPUT
rOut : REAL;
xClamped : BOOL;
END_VAR
VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[IF rIn > rMax THEN
rOut := rMax;
xClamped := TRUE;
ELSIF rIn < rMin THEN
rOut := rMin;
xClamped := TRUE;
ELSE
rOut := rIn;
xClamped := FALSE;
END_IF]]></ST>
</Implementation>
</POU>
</TcPlcObject>

View File

@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<POU Name="FB_PI" Id="{8fe95419-3a89-4668-8d22-4f91ef3ca204}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_PI
VAR_INPUT
rSP : REAL;
rPV : REAL;
rKp : REAL;
rTn : REAL;
xEnable : BOOL;
xSaturated : BOOL := FALSE;
END_VAR
VAR_OUTPUT
rMV : REAL;
END_VAR
VAR
_rError : REAL := 0.0;
_rIntegral : REAL := 0.0;
_rProportinal : REAL := 0.0;
_rErrorSign : REAL;
_xHoldIntegrator : BOOL;
_fbGetCurTaskIdx : GETCURTASKINDEX;
_rT : REAL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Calculate error
_rError := rSP - rPV;
// Calculate proportinal part
_rProportinal := rKp * _rError;
// Calculate controller output
IF xEnable THEN
rMV := _rProportinal + _rIntegral;
ELSE
rMV := 0.0;
END_IF
_rErrorSign := _rError * rMV;
_xHoldIntegrator := xSaturated AND (_rErrorSign > 0);
// Stop integrator if saturated
IF (NOT _xHoldIntegrator) AND (rTn <> 0) THEN
_rIntegral := _rIntegral + (rKp * _rT / rTn) * _rError;
END_IF
// Reset integral with deactivated integral time
IF (rTn = 0.0) AND (_rIntegral <> 0) THEN
_rIntegral := 0.0;
END_IF]]></ST>
</Implementation>
<Method Name="FB_init" Id="{58ddb3c6-73d3-470a-927d-f677bf66bbfe}">
<Declaration><![CDATA[//FB_Init ist immer implizit verfügbar und wird primär für die Initialisierung verwendet.
//Der Rückgabewert wird nicht ausgewertet. Für gezielte Einflussnahme können Sie
//die Methoden explizit deklarieren und darin mit dem Standard-Initialisierungscode
//zusätzlichen Code bereitstellen. Sie können den Rückgabewert auswerten.
METHOD FB_Init: BOOL
VAR_INPUT
bInitRetains: BOOL; // TRUE: Die Retain-Variablen werden initialisiert (Reset warm / Reset kalt)
bInCopyCode: BOOL; // TRUE: Die Instanz wird danach in den Kopiercode kopiert (Online-Change)
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[// Get current task time
_fbGetCurTaskIdx();
_rT := LREAL_TO_REAL(UDINT_TO_LREAL(TwinCAT_SystemInfoVarList._TASKInfo[_fbGetCurTaskIdx.index].CycleTime) * 10E-5);]]></ST>
</Implementation>
</Method>
<Action Name="Reset" Id="{4227580c-e163-4250-9575-dd60ff3083af}">
<Implementation>
<ST><![CDATA[_rIntegral := 0.0;]]></ST>
</Implementation>
</Action>
</POU>
</TcPlcObject>

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<POU Name="FB_PT1Filter" Id="{bdcdd199-96b1-43e5-8e4f-5515b0a2225d}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_PT1Filter
VAR_INPUT
rInput : REAL;
timT : TIME := T#100MS;
END_VAR
VAR_OUTPUT
rOutput : REAL;
END_VAR
VAR
_rOutputLast : REAL := 0.0;
_fbGetCurTaskIdx : GETCURTASKINDEX;
_rT : REAL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Calculate output
rOutput := LREAL_TO_REAL(_rOutputLast + (rInput - _rOutputLast) * (_rT / (TIME_TO_LREAL(timT) + _rT)));
// Save last output
_rOutputLast := rOutput;]]></ST>
</Implementation>
<Method Name="FB_init" Id="{8cf1c8f8-42a3-4c2a-b0ef-f9c06ee7877f}">
<Declaration><![CDATA[//FB_Init ist immer implizit verfügbar und wird primär für die Initialisierung verwendet.
//Der Rückgabewert wird nicht ausgewertet. Für gezielte Einflussnahme können Sie
//die Methoden explizit deklarieren und darin mit dem Standard-Initialisierungscode
//zusätzlichen Code bereitstellen. Sie können den Rückgabewert auswerten.
METHOD FB_Init: BOOL
VAR_INPUT
bInitRetains: BOOL; // TRUE: Die Retain-Variablen werden initialisiert (Reset warm / Reset kalt)
bInCopyCode: BOOL; // TRUE: Die Instanz wird danach in den Kopiercode kopiert (Online-Change)
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[// Get current task time
_fbGetCurTaskIdx();
_rT := LREAL_TO_REAL(UDINT_TO_LREAL(TwinCAT_SystemInfoVarList._TASKInfo[_fbGetCurTaskIdx.index].CycleTime) * 10E-5);]]></ST>
</Implementation>
</Method>
</POU>
</TcPlcObject>

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4026.12">
<POU Name="FB_AlarmMessage" Id="{4e628f13-10b9-47d9-8d26-ceb4bcb9bf43}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_AlarmMessage
VAR_INPUT
xActive : BOOL;
xAcknowledge : BOOL;
END_VAR
VAR_OUTPUT
END_VAR
VAR
_fbAlarmMessage : Fb_TcAlarm;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[IF xActive AND (NOT _fbAlarmMessage.bRaised) THEN
_fbAlarmMessage.Raise();
END_IF
IF (NOT xActive) AND (_fbAlarmMessage.bRaised) THEN
_fbAlarmMessage.Clear(0);
END_IF
IF _fbAlarmMessage.eConfirmationState = TcEventConfirmationState.WaitForConfirmation AND xAcknowledge THEN
_fbAlarmMessage.Confirm(0);
END_IF]]></ST>
</Implementation>
<Property Name="Arguments" Id="{f40c819a-ad71-4e81-830e-67d02b4e9e2f}">
<Declaration><![CDATA[PROPERTY PUBLIC Arguments : I_TcArguments]]></Declaration>
<Get Name="Get" Id="{c1b8ca1b-cb6c-4841-8282-61423914cb4e}">
<Declaration><![CDATA[VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[Arguments := _fbAlarmMessage.ipArguments;]]></ST>
</Implementation>
</Get>
</Property>
<Property Name="ClearedAndConfirmed" Id="{4e7fa79e-e44f-42ff-ab45-0e14a9921a12}">
<Declaration><![CDATA[PROPERTY ClearedAndConfirmed : BOOL]]></Declaration>
<Get Name="Get" Id="{70df159d-fc9d-44c5-ae42-7d731a5dae12}">
<Declaration><![CDATA[VAR
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[ClearedAndConfirmed := (NOT _fbAlarmMessage.bRaised) AND (_fbAlarmMessage.eConfirmationState <> TcEventConfirmationState.WaitForConfirmation);]]></ST>
</Implementation>
</Get>
</Property>
<Method Name="Init" Id="{c066689c-dd69-4f09-b5b0-76b34267abac}">
<Declaration><![CDATA[METHOD Init : BOOL
VAR_INPUT
stEventType : TcEventEntry;
xWithConfirmation : BOOL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[_fbAlarmMessage.CreateEx(stEventEntry := stEventType, bWithConfirmation := xWithConfirmation);]]></ST>
</Implementation>
</Method>
</POU>
</TcPlcObject>

17
PLC/PlcTask.TcTTO Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<Task Name="PlcTask" Id="{13b7271a-7fe7-45e4-a613-10870835774e}">
<!--CycleTime in micro seconds.-->
<CycleTime>10000</CycleTime>
<Priority>20</Priority>
<PouCall>
<Name>MAIN</Name>
</PouCall>
<TaskFBGuid>{ffdacf88-4402-4cda-9656-2a188e28ec71}</TaskFBGuid>
<Fb_init>{0eaf59ea-61db-47c0-9b16-500c1d3c6c82}</Fb_init>
<Fb_exit>{f41aba84-dc9f-4b62-bb12-30d3e8314fa6}</Fb_exit>
<CycleUpdate>{347af9e1-a730-412d-bdd1-dba423bbf20a}</CycleUpdate>
<PostCycleUpdate>{10f1bd59-1481-4492-b627-08c962a0f93d}</PostCycleUpdate>
<ObjectProperties />
</Task>
</TcPlcObject>

Binary file not shown.

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_MODULE_ERROR" Id="{f48f024b-dcdb-4f15-9afc-badf412ed600}">
<Declaration><![CDATA[TYPE ST_MODULE_ERROR :
STRUCT
// Unit error array
astUnitErrors : ARRAY[0..3] OF ST_UNIT_ERROR;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<DUT Name="ST_STRING_ERROR" Id="{269f429d-5923-4dac-b08e-323d4429d2dd}">
<Declaration><![CDATA[TYPE ST_STRING_ERROR :
STRUCT
// Module error array
stModuleError : ARRAY[0..2] OF ST_MODULE_ERROR;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

Some files were not shown because too many files have changed in this diff Show More