logi.CAD3 → logi.CLOUD
An expe ri en ce rep or t on migratj ng a n i nd ust r ia l -gra de ID E t o the Cl o ud u si ng t he Ec li pse e cosys tem
logi.CAD3 logi.CLOUD An expe ri en ce rep or t on migratj ng a - - PowerPoint PPT Presentation
logi.CAD3 logi.CLOUD An expe ri en ce rep or t on migratj ng a n i nd ust r ia l -gra de ID E t o the Cl o ud u si ng t he Ec li pse e cosys tem Agenda of this Talk Introductjon (7 Minutes) Goal Company focus (products,
An expe ri en ce rep or t on migratj ng a n i nd ust r ia l -gra de ID E t o the Cl o ud u si ng t he Ec li pse e cosys tem
FOUNDED
EMPLOYEES
OFFICES
Overview: Our (Original) Goal IDE for Programmable Logic Controllers
ext (ST)
Overview: Our (Original) Goal IDE for Programmable Logic Controllers
AUTOMOTIVE
80% of all buses in Europe
BUILDING
Thousands of controllers for security and comfort in modern ships
ENERGY
30% of all hydro- electric power plants
SYSTEM
Projects with 6 million I/O and communication data points
Controllers for ofg-highway and agricultural machines
MOBILE AUTOMATION
logi.cals Austria
Europaplatz 7/1 3100 St. Pölten Austria +43 5 77147-0
logi.cals Germany
Postfach 1306 40738 Langenfeld Germany +49 2173 9191-0 germany@logicals.com www.logicals.com Follow us on social media:
Overview: Current State High-Level Architecture
logi.CAD3
ST-/FBD-editor Target Communication
logi.RTS
Scheduler Target-Binary (Shared Object) Target-Binary (Shared Object) TCF Binary Build Infrastructure
Architecture of logi.Cloud Architecture and Components
Build Server LC3 Server Target Comm Server Targets Engineering Theia IDE Backend Theia IDE Frontend
logi.cals Austria
Europaplatz 7/1 3100 St. Pölten Austria +43 5 77147-0
logi.cals Germany
Postfach 1306 40738 Langenfeld Germany +49 2173 9191-0 germany@logicals.com www.logicals.com Follow us on social media:
Structure of logi.CAD3 Architecture and Components
Formatter Validator Project Index Target Proxy Platform Toolkits Binary Code Generation FBD-Editor EMF Model Elements (EObjects) Instance View C-Code Generator Resolver Synchronizer/ Transformer BuiltInPlc Project Database Gateway .c/.h files ST-Editor Xtext Xcore Model Variable Values View OEM SDK
Structure of logi.CAD3 What will be re-used for the Cloud?
Formatter Validator Project Index Target Proxy Platform Toolkits Binary Code Generation FBD-Editor EMF Model Elements (EObjects) Instance View C-Code Generator Resolver Synchronizer/ Transformer BuiltInPlc Project Database Gateway .c/.h files ST-Editor Xtext Xcore Model Variable Values View OEM SDK
BUILD EDIT COMM
Structure of logi.CAD3 What will be re-used for the Cloud?
Formatter Validator Project Index Target Proxy Platform Toolkits Binary Code Generation FBD-Editor EMF Model Elements (EObjects) Instance View C-Code Generator Resolver Synchronizer/ Transformer BuiltInPlc Project Database Gateway .c/.h files ST-Editor Xtext Xcore Model Variable Values View OEM SDK
Architecture of logi.Cloud Architecture and Components
Architecture of logi.Cloud Architecture and Components
Server Browser Theia Backend LC Server
… (Theia core stufg ) IEC Language Backend LC API Service Backend LC3 API Server IEC support Xtext via LSP4J
Theia Frontend
… (Theia core stufg ) IEC Language Frontend Instance View LC3 Service
HTTP GET Web Socket LSP over Web Socket Web Socket
...
Read & listen Write into DB Project Index
Build Service LC Build Service Backend LC Build Server
Web Socket
Target Com Service LC Target Com Backend LC Target Com Server
Web Socket
IEC FBD Backend IEC FBD Frontend
GLSP over Web Socket
IEC FBD
via GLSP
R e a d
Key Enablers Making logi.CAD3 ready for the Cloud
Challenges: Dependency Categorizatjon Making logi.CAD3 ready for the Cloud
Challenges: Dependencies Making logi.CAD3 ready for the Cloud
http://www.dependency-analyzer.org/
Challenges: Dependency Categorizatjon Making logi.CAD3 ready for the Cloud
Challenges: Workspace handling Making logi.CAD3 ready for the Cloud
Challenges: Workspace handling Making logi.CAD3 ready for the Cloud
arget Comm Server: none needed
Summary Findings, Recommendatjons
https://docs.google.com/document/d/1aodR1LJEF_zu7xBis2MjpHRyv7JKJzW7EWI9XRYCt48/
https://eclipsesource.com/blogs
logi.cals Austria
Europaplatz 7/1 3100 St. Pölten Austria +43 5 77147-0
logi.cals Germany
Postfach 1306 40738 Langenfeld Germany +49 2173 9191-0 germany@logicals.com www.logicals.com Follow us on social media:
logi.cals Austria
Europaplatz 7/1 3100 St. Pölten Austria +43 5 77147-0
logi.cals Germany
Postfach 1306 40738 Langenfeld Germany +49 2173 9191-0 germany@logicals.com www.logicals.com Follow us on social media:
logi.cals Austria
Europaplatz 7/1 3100 St. Pölten Austria +43 5 77147-0
logi.cals Germany
Postfach 1306 40738 Langenfeld Germany +49 2173 9191-0 germany@logicals.com www.logicals.com Follow us on social media:
Challenges: Additjonal concerns Making logi.CAD3 ready for the Cloud
public interface Lc3Project extends Comparable<Lc3Project> { [...] File getFile(String name); }
LC3/logi.CLOUD: General interface of LC3 projects:
Challenges: Additjonal concerns Making logi.CAD3 ready for the Cloud
@Override public File getFile(fjnal String name) { fjnal IFile eclipseFile = this.eclipseProject.getFile(name); return new File(eclipseFile.getLocation().toOSString()); } @Override public File getFile(fjnal String name) { fjnal URI baseDir = this.projectManager.getBaseDir(); return new File(baseDir.toFileString() + name); }
LC3: Using Eclipse IProject to retrieve fjles logi.CLOUD: Using Language Server Project Manager to retrieve fjles (LC3 Server; JAVA)
Challenges: Additjonal concerns Making logi.CAD3 ready for the Cloud
private void initializeProjects() { fjnal IProject[] iProjects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); for (fjnal IProject iProject : iProjects) { if (iProject.isOpen() && IECProjectNature.isIECProject(iProject)) { fjnal Lc3Project project = new Lc3ProjectImpl(iProject); projects.put(project.getName(), project); } } }
LC3: Using Eclipse Workspace and Projects to initjalize Project Index
Challenges: Additjonal concerns Making logi.CAD3 ready for the Cloud
private void initializeProjects() { for (fjnal ProjectManager projectManager : workspaceManager.getProjectManagers()) { if (projectManager.getBaseDir() != null) { fjnal Lc3Project project = new LC3CloudProject(projectManager); projects.put(project.getName(), project); } } }
logi.CLOUD: Use Language Server Workspace Manager and Project Manager to initjalize Project Index (LC3 Server; JAVA)
Challenges: Additjonal concerns Making logi.CAD3 ready for the Cloud
protected void buildAndLoadApplication(fjnal ActionEvent event) { T argetSession targetSession = T argetProxy.getT argetSessionForUI(resource); new BuildProgramJob(targetSession.getResource(), new BuildOptions()).schedule(); new UploadProgramJob(targetSession).schedule(); } public static NormalizedFile getT argetOutputDirectory(IProject project) { return new NormalizedFile(project.getLocation().toFile()).append("target"); }
LC3: Build and Upload Program triggered by client
Challenges: Additjonal concerns Making logi.CAD3 ready for the Cloud
async buildAndLoadApplication(connectionInfo: Lc3ResourceConnectionInfo): Promise<void> { const jobId = await this.buildService.buildWithProgress(connectionInfo.resource.instancePath); await this.buildService.onJobFinished(jobId); const buildLocation = await this.buildService.getBuildLocation(); return this.targetService.upload(connectionInfo, buildLocation); }
logi.CLOUD: Build and Upload Program triggered by client (Theia Backend; TypeScript)
public NormalizedFile getT argetOutputDirectory(String buildLocation, String projectName) { return new NormalizedFile(buildLocation).append(projectName).append("target"); }
logi.CLOUD: Determining the actual build locatjon (LC3 Build Server; JAVA)
Overview: PLC-Programming Programming Languages: ST (IEC61131-3)