Added minimal functionality for Robot teaching

- Added minimal HMI
- Added possibility to open and close all chamber doors
This commit is contained in:
2026-01-17 09:20:39 +01:00
parent 9f058db2a3
commit 2d11c43579
2274 changed files with 912690 additions and 162 deletions

View File

@@ -0,0 +1,8 @@
{
"$schema": "../../../TwinCAT-HMI-Common/JsonSchemas/Language.Schema.json",
"locale": "de",
"localizedText": {
"ButtonApprove": "Bestätigen",
"CheckboxDontShowAgain": "Nicht erneut anzeigen"
}
}

View File

@@ -0,0 +1,8 @@
{
"$schema": "../../../TwinCAT-HMI-Common/JsonSchemas/Language.Schema.json",
"locale": "en",
"localizedText": {
"ButtonApprove": "Approve",
"CheckboxDontShowAgain": "Don't show again"
}
}

View File

@@ -0,0 +1,71 @@
.TcHmi_Controls_Helpers_Banner {
display: flex;
flex-direction: column;
box-sizing: border-box;
overflow: hidden;
position: absolute;
height: auto;
top: 0;
margin: 10%;
max-width: 80%;
padding: 16px;
}
.TcHmi_Controls_Helpers_Banner-content
.TcHmi_Controls_System_TcHmiControl:not(.TcHmi_Controls_System_TcHmiControl .TcHmi_Controls_System_TcHmiControl) {
position: relative;
}
.TcHmi_Controls_Helpers_Banner-header-container {
position: relative;
display: grid;
grid-template-columns: auto min-content;
margin-top: 0px;
min-height: 26px;
padding: 5px 10px;
}
.TcHmi_Controls_Helpers_Banner-header-container > h1 {
margin: 0;
white-space: nowrap;
overflow: hidden;
margin-left: 40px;
}
.TcHmi_Controls_Helpers_Banner-content {
position: relative;
flex-grow: 1;
flex-shrink: 1;
overflow: auto;
padding: 10px;
}
.TcHmi_Controls_Helpers_Banner-label-block {
display: block;
white-space: pre;
margin-bottom: 2px;
}
.TcHmi_Controls_Helpers_Banner-label-block:not(:first-child) {
margin-top: 10px;
}
.TcHmi_Controls_Helpers_Banner-footer {
position: relative;
display: grid;
grid-template-columns: auto 60px;
}
.TcHmi_Controls_Helpers_Banner-footer:not(:empty) {
padding-left: 10px;
padding-right: 10px;
padding-bottom: 10px;
}
.TcHmi_Controls_Helpers_Banner-footer .TcHmi_Controls_System_TcHmiControl {
position: relative;
}
.TcHmi_Controls_Helpers_Banner-footer .TcHmi_Controls_System_TcHmiControl:not(:first-child) {
margin-left: 5px;
}

View File

@@ -0,0 +1,125 @@
// Compatibility file for non-module typescript compiles without adjustments.
// Use the following line for modern code (needs adjustments to tsconfig.json#configOptions/paths)
// import { TcHmiControl } from "Beckhoff.TwinCAT.HMI.Framework/index.esm.js";
// ***************************************************************************
export declare class ApprovalBanner extends Banner {
protected readonly __parentControl?: (TcHmiControl.Control | null) | undefined;
protected __approveButton: TcHmiButton;
protected __repetitionCheckbox: TcHmiCheckbox;
protected __storage: TcHmi.LocalStorage<{
dontShowAgain: boolean;
}> | undefined;
/**
* Creates a new Banner instance.
* @param targetElement The element the banner is placed over.
* @param storageId The storage id to rember if the banner should not be displayed anymore
* @param __parentControl The control which owns the Banner.
*/
constructor(targetElement: HTMLElement, storageId: string | null, __parentControl?: (TcHmiControl.Control | null) | undefined);
show(): void;
/**
* Handler for the onPressed event of the OK button.
*/
protected __onApproved(): void;
/**
* Sets texts which can either be localizable or static.
*/
setTexts(texts: Partial<ApprovalBanner.LocalizableTexts>): void;
}
export declare namespace ApprovalBanner {
interface LocalizableTexts extends Banner.LocalizableTexts {
buttonText: TcHmi.Localizable;
checkboxText: TcHmi.Localizable;
}
}
import _ApprovalBanner = ApprovalBanner;
declare global {
namespace TcHmi.Controls.Helpers {
let ApprovalBanner: typeof _ApprovalBanner;
type ApprovalBanner = _ApprovalBanner;
namespace ApprovalBanner {
type LocalizableTexts = _ApprovalBanner.LocalizableTexts;
}
}
}
export declare class Banner {
#private;
protected readonly __parentControl?: (TcHmi.Controls.System.TcHmiControl | null) | undefined;
protected __name: string;
protected __targetElement: HTMLElement;
protected __element: HTMLDivElement;
protected __elementHeaderContainer: HTMLDivElement;
protected __elementHeader: HTMLHeadingElement;
protected __elementContent: HTMLDivElement;
protected __elementFooter: HTMLDivElement;
/** Controls in this array will be destroyed automatically when the popup is destroyed */
protected __childControls: TcHmi.Controls.System.TcHmiControl[];
/** Destroyers in this array will be called automatically when the popup is destroyed */
protected __destroyers: TcHmi.DestroyFunction[];
protected __isShowing: boolean;
protected __localizationSymbols: Map<string, {
symbol: TcHmi.Symbol<string>;
destroyWatch: TcHmi.DestroyFunction;
}>;
protected readonly __className = "TcHmi_Controls_Helpers_Banner";
/**
* Creates a new Banner instance.
* @param targetElement The element the banner is placed over.
* @param __parentControl The control which owns the Banner.
*/
constructor(targetElement: HTMLElement, __parentControl?: (TcHmi.Controls.System.TcHmiControl | null) | undefined);
/**
* Gets a value indicating if the banner is currently shown to the user.
*/
isShowing(): boolean;
/**
* Shows the banner.
*/
show(): void;
/**
* Hides the banner.
*/
hide(): void;
/**
* Destroys the banner and all its controls.
* @param force If true, child controls will be removed from the parent control before destruction, to ensure destruction in case of keepAlive === true.
*/
destroy(force?: boolean): void;
/**
* Watch the given symbol and call the onChange callback every time it changes with the resolved and formatted symbol value.
* @param name The name for this symbol. Must be unique across all inheritance layers and further calls for the same localization must use the same name.
* @param localization The localization to watch.
* @param onChange The callback that is called with the localized and formatted text as a parameter.
*/
protected __watchLocalization(name: string, localization: TcHmi.FormattedLocalizable, onChange: (localizedText: string) => void): void;
/**
* Destroys the localization watch with the given name, if it exists.
* @param name The name that was used with __watchLoclalization to start watching the symbol.
*/
protected __unwatchLocalization(name: string): void;
/**
* Sets texts which can either be localizable or static.
*/
setTexts(texts: Partial<Banner.LocalizableTexts>): void;
}
export declare namespace Banner {
interface LocalizableTexts {
headerText: TcHmi.Localizable;
contentText: TcHmi.Localizable;
}
}
import _Banner = Banner;
declare global {
namespace TcHmi.Controls.Helpers {
let Banner: typeof _Banner;
type Banner = _Banner;
namespace Banner {
type LocalizableTexts = _Banner.LocalizableTexts;
}
}
}

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="pfade" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="80px" height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<path fill="none" stroke="#1A171B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M44.532,59.876"/>
<g>
<polygon fill="none" stroke="#F39200" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
64.432,61.593 13.874,61.593 39.243,18.619 "/>
<g>
<path fill="#F39200" d="M39.153,54.644c-1.387,0-2.455-1.126-2.455-2.424c0-1.387,1.068-2.457,2.455-2.457
c1.357,0,2.427,1.098,2.427,2.457C41.58,53.518,40.482,54.644,39.153,54.644z M40.569,46.071
c-0.059,0.548-0.174,0.522-0.606,0.522h-1.646c-0.434,0-0.55,0.026-0.606-0.522l-0.637-11.27
c-0.028-0.491-0.028-0.533-0.028-0.703c0-0.379,0.287-0.505,0.519-0.505h3.091c0.231,0,0.577,0.14,0.577,0.516
c0,0.172,0,0.129-0.028,0.621L40.569,46.071z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,10 @@
/** TcHmiBanners theme dependend style for theme: Base-Dark */
.TcHmi_Controls_Helpers_Banner {
background: #1b1b1f;
box-shadow: rgba(89, 89, 89, 0.75) 0 1px 10px 2px;
}
.TcHmi_Controls_Helpers_Banner-header-container {
background: url(Images/warning.svg) no-repeat 0% 0%;
background-size: 48px;
}

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="pfade" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="80px" height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<path fill="none" stroke="#1A171B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M44.532,59.876"/>
<g>
<polygon fill="none" stroke="#F39200" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
64.432,61.593 13.874,61.593 39.243,18.619 "/>
<g>
<path fill="#F39200" d="M39.153,54.644c-1.387,0-2.455-1.126-2.455-2.424c0-1.387,1.068-2.457,2.455-2.457
c1.357,0,2.427,1.098,2.427,2.457C41.58,53.518,40.482,54.644,39.153,54.644z M40.569,46.071
c-0.059,0.548-0.174,0.522-0.606,0.522h-1.646c-0.434,0-0.55,0.026-0.606-0.522l-0.637-11.27
c-0.028-0.491-0.028-0.533-0.028-0.703c0-0.379,0.287-0.505,0.519-0.505h3.091c0.231,0,0.577,0.14,0.577,0.516
c0,0.172,0,0.129-0.028,0.621L40.569,46.071z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,10 @@
/** TcHmiBanners theme dependend style for theme: Base */
.TcHmi_Controls_Helpers_Banner {
background: #f6f7f8;
box-shadow: rgba(0, 0, 0, 0.2) 0 1px 10px 2px;
}
.TcHmi_Controls_Helpers_Banner-header-container {
background: url(Images/warning.svg) no-repeat 0% 0%;
background-size: 48px;
}