Skip to content

Contents

About

Version

Contributors

License

Introduction

The HCC2

Engineering Skill Base for the SDK

External References

HCC2 Architecture

System Architecture Overview

Physical System Architecture

Software Architecture

Key concepts for application development

Modbus SDK

Additional Components

Hardware

Libraries

Modbus Application Overview

Modbus Configuration

HCC2 Modbus TCP Server Configuration

Application Modbus TCP Client Configuration

Alarm Configuration

Alarm Mapping

Application Development

Application Running and Testing

Build and Deploy Overview

Building Containers

Example Dockerfile

Creating Images Locally (Docker Desktop)

Container Preparation

Editing docker-compose.yml

REST SDK

Additional Components

Hardware

Libraries

REST Server Implementation

Overview

Introduction

Development Mode & Swagger UI

Application Configuration Editor (ACE)

Development Overview

Workflow

Simple Startup

Simple Reconfiguration/Deployment

Advanced Startup

Advanced Reconfiguration/Deployment

API

Application Creation

Registration

Application Removal (deregistration)

Application Tarball Handling

Run Time Configuration (Provisioning)

Message

Event Management

Data Logger

REST Application Overview

Data Points Configuration

HCC2 Data Points Configuration

Data Points Configuration using ACE

Application Configuration Editor

Data Point Creation using ACE

Data Points Configuration using Swagger

Swagger

Swagger Data Points Creation Workflow

Alarms Access and Configuration

HCC2 Existing Alarms Listing (example)

Alarms Creation

Sample Application Code

Sample Application API Methods

Application Running and Testing

Overview

Functionality

First Time Running

JSON Configuration Settings

app

registration

heartbeat

provisioning

network

rest_api

Tasks

Adding Tasks

Provisioning

Registration

Overview

Managing Data Points

Overview

Subscriptions

Usage

Subscriptions Setup

Docker Setup

Using Environment Variables

Using Docker Volumes

REST Application Overview

Functionality

Expected Data Points

Design

Folder Structure

Core Application Flow

Application Flow Documentation

RunAsync Flow

RunBusinessLogicAsync Flow

Error Handling

Configuration Methods

Further Reading

Configuration Settings

Example Settings for Local Tests

Build and Deploy Overview

Building Containers

Example Dockerfile

Creating Images Locally (Docker Desktop)

Container Preparation

Editing docker-compose.yml

Design Considerations

.NET Version

Docker Image Selection

Programming Techniques

Requirements

Development Machine

Physical Requirements

Software Requirements

VM Deployment Overview

In this section

Hardware Networking Setup

Development SDK VM Creation

Installation Procedure

Software Installation

Linux Development Environment

Windows Development Environment

Installing Development Tools

HCC2 Development Tools and Samples

HCC2 Development Tools and Samples - Modbus

HCC2 Development Tools and Samples - RESTful

Edge SDK Dev Tools Setup

Build and Deploy Overview

Application Signing

Prerequisites

Packaging and Signing

Application Deployment (EPM)

Downloading the EPM Software

Deploying a Signed Application

Should Something Go Wrong

HCC2 Application Signing

Development Mode License

Removal of Development Mode License

HCC2 OEM Signing Keys

User Interfaces

Rules and Best Practices

Rules

Best Practices

TODO

Base Images

C# (.net 8) containers

C# (.net 6) Containers

Python Containers

Google Distroless Images

Chiseled images

Alternatives

Multi-Stage Builds

Docker Labels

Open Container Initiative - Annotations

Static vs. Dynamic

Example

Docker Inspect

Writing Efficient Dockerfiles

Minimize Layers

Use .dockerignore

Package Installation

Ordering of Instructions

Avoid Latest Tags

Further Reading

Resource Limits

Required

Strongly Suggested

Docker Compose File Requirements

Version Specification

Naming

Run the Container in Read Only

Container Restart Policy

Dependencies among Containers

Network Port Mapping

Container Resource Management

Environment Variables

Network and Volume Naming

References

IP Port Considerations

Private Subnet

Other Services

Port Numbers

NAT (Network Address Translation)

Inbound (Internal or Docker Services)

Appendix B - Application Logging

Application Log Format

Rules for Logging

Feedback