Files
m.heisig 2d11c43579 Added minimal functionality for Robot teaching
- Added minimal HMI
- Added possibility to open and close all chamber doors
2026-01-17 09:20:39 +01:00

1 line
17 KiB
JavaScript

var __runInitializers=this&&this.__runInitializers||function(thisArg,initializers,value){for(var useValue=arguments.length>2,i=0;i<initializers.length;i++)value=useValue?initializers[i].call(thisArg,value):initializers[i].call(thisArg);return useValue?value:void 0},__esDecorate=this&&this.__esDecorate||function(ctor,descriptorIn,decorators,contextIn,initializers,extraInitializers){function accept(f){if(void 0!==f&&"function"!=typeof f)throw new TypeError("Function expected");return f}for(var _,kind=contextIn.kind,key="getter"===kind?"get":"setter"===kind?"set":"value",target=!descriptorIn&&ctor?contextIn.static?ctor:ctor.prototype:null,descriptor=descriptorIn||(target?Object.getOwnPropertyDescriptor(target,contextIn.name):{}),done=!1,i=decorators.length-1;i>=0;i--){var context={};for(var p in contextIn)context[p]="access"===p?{}:contextIn[p];for(var p in contextIn.access)context.access[p]=contextIn.access[p];context.addInitializer=function(f){if(done)throw new TypeError("Cannot add initializers after decoration has completed");extraInitializers.push(accept(f||null))};var result=(0,decorators[i])("accessor"===kind?{get:descriptor.get,set:descriptor.set}:descriptor[key],context);if("accessor"===kind){if(void 0===result)continue;if(null===result||"object"!=typeof result)throw new TypeError("Object expected");(_=accept(result.get))&&(descriptor.get=_),(_=accept(result.set))&&(descriptor.set=_),(_=accept(result.init))&&initializers.unshift(_)}else(_=accept(result))&&("field"===kind?initializers.unshift(_):descriptor[key]=_)}target&&Object.defineProperty(target,contextIn.name,descriptor),done=!0};import{TcHmiControl}from"Beckhoff.TwinCAT.HMI.Framework/index.esm.js";let TcHmiAudio=(()=>{var _a;let ___onLoadedData_decorators,___onError_decorators,___onVolumeChange_decorators,___onDurationChange_decorators,___onEnded_decorators,___onPlayingChange_decorators,___onRateChange_decorators,___onTimeUpdate_decorators,___onResolverForSrcListWatchCallback_decorators,_classSuper=TcHmiControl.Control,_instanceExtraInitializers=[];return class TcHmiAudio extends _classSuper{static{const _metadata="function"==typeof Symbol&&Symbol.metadata?Object.create(_classSuper[Symbol.metadata]??null):void 0;___onLoadedData_decorators=[TcHmi.EventHandler()],___onError_decorators=[TcHmi.EventHandler()],___onVolumeChange_decorators=[TcHmi.EventHandler()],___onDurationChange_decorators=[TcHmi.EventHandler()],___onEnded_decorators=[TcHmi.EventHandler()],___onPlayingChange_decorators=[TcHmi.EventHandler()],___onRateChange_decorators=[TcHmi.EventHandler()],___onTimeUpdate_decorators=[TcHmi.EventHandler()],___onResolverForSrcListWatchCallback_decorators=[(_a=TcHmi).CallbackMethod.bind(_a)],__esDecorate(this,null,___onLoadedData_decorators,{kind:"method",name:"__onLoadedData",static:!1,private:!1,access:{has:obj=>"__onLoadedData"in obj,get:obj=>obj.__onLoadedData},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,___onError_decorators,{kind:"method",name:"__onError",static:!1,private:!1,access:{has:obj=>"__onError"in obj,get:obj=>obj.__onError},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,___onVolumeChange_decorators,{kind:"method",name:"__onVolumeChange",static:!1,private:!1,access:{has:obj=>"__onVolumeChange"in obj,get:obj=>obj.__onVolumeChange},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,___onDurationChange_decorators,{kind:"method",name:"__onDurationChange",static:!1,private:!1,access:{has:obj=>"__onDurationChange"in obj,get:obj=>obj.__onDurationChange},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,___onEnded_decorators,{kind:"method",name:"__onEnded",static:!1,private:!1,access:{has:obj=>"__onEnded"in obj,get:obj=>obj.__onEnded},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,___onPlayingChange_decorators,{kind:"method",name:"__onPlayingChange",static:!1,private:!1,access:{has:obj=>"__onPlayingChange"in obj,get:obj=>obj.__onPlayingChange},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,___onRateChange_decorators,{kind:"method",name:"__onRateChange",static:!1,private:!1,access:{has:obj=>"__onRateChange"in obj,get:obj=>obj.__onRateChange},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,___onTimeUpdate_decorators,{kind:"method",name:"__onTimeUpdate",static:!1,private:!1,access:{has:obj=>"__onTimeUpdate"in obj,get:obj=>obj.__onTimeUpdate},metadata:_metadata},null,_instanceExtraInitializers),__esDecorate(this,null,___onResolverForSrcListWatchCallback_decorators,{kind:"method",name:"__onResolverForSrcListWatchCallback",static:!1,private:!1,access:{has:obj=>"__onResolverForSrcListWatchCallback"in obj,get:obj=>obj.__onResolverForSrcListWatchCallback},metadata:_metadata},null,_instanceExtraInitializers),_metadata&&Object.defineProperty(this,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:_metadata})}static#tchmiFQN="TcHmi.Controls.Beckhoff."+this.name;constructor(element,pcElement,attrs){super(element,pcElement,attrs)}__elementTemplateRoot=__runInitializers(this,_instanceExtraInitializers);__elementBorder;__elementFocusBorder;__elemAudio;__srcList;__controls;__volume;__autoplay;__mute;__loop;__playbackrate;__duration=0;__currentTime=0;__previnit(){this.__elementTemplateRoot=this.__element.find(".TcHmi_Controls_Beckhoff_TcHmiAudio-template"),this.__elementBorder=this.__elementTemplateRoot.find(".TcHmi_Controls_Beckhoff_TcHmiAudio-template-border"),this.__elementFocusBorder=this.__elementTemplateRoot.find(".TcHmi_Controls_Beckhoff_TcHmiAudio-template-focus-border");let elemAudio=this.__elementTemplateRoot.find(".TcHmi_Controls_Beckhoff_TcHmiAudio-template-content");if(0===this.__elementTemplateRoot.length||0===this.__elementBorder.length||0===this.__elementFocusBorder.length||0===elemAudio.length)throw new Error("Invalid Template.html");this.__elemAudio=elemAudio[0],super.__previnit()}__init(){super.__init(),this.__destroyOnDestroy.push(TcHmi.EventProvider.registerDomEvent(this.__elemAudio,"loadeddata",this.__onLoadedData),TcHmi.EventProvider.registerDomEvent(this.__elemAudio,"error",this.__onError),TcHmi.EventProvider.registerDomEvent(this.__elemAudio,"volumechange",this.__onVolumeChange),TcHmi.EventProvider.registerDomEvent(this.__elemAudio,"ratechange",this.__onRateChange),TcHmi.EventProvider.registerDomEvent(this.__elemAudio,"durationchange",this.__onDurationChange),TcHmi.EventProvider.registerDomEvent(this.__elemAudio,"timeupdate",this.__onTimeUpdate),TcHmi.EventProvider.registerDomEvent(this.__elemAudio,"ended",this.__onEnded),TcHmi.EventProvider.registerDomEvent(this.__elemAudio,"playing",this.__onPlayingChange),TcHmi.EventProvider.registerDomEvent(this.__elemAudio,"pause",this.__onPlayingChange))}__attach(){super.__attach(),this.__processControls(),TcHmi.Access.checkAccess(this,"observe")&&this.getIsEnabled()&&this.__elemAudio.load()}__detach(){super.__detach()}destroy(){if(!this.__keepAlive){for(const child of this.__elemAudio.children)child.removeEventListener("error",this.__onError);super.destroy()}}__processAccessConfig(){super.__processAccessConfig(),this.__processSrcList()}__processIsEnabled(){super.__processIsEnabled(),this.__processSrcList()}__onLoadedData(_event){void 0!==this.__playbackrate&&null!==this.__playbackrate&&this.__processPlaybackrate(),TcHmi.EventProvider.raise(this.__id+".onLoadedData"),TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"CurrentTime"}),TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"IsPlaying"})}__onError(event){event.currentTarget instanceof HTMLElement&&(event.currentTarget instanceof HTMLSourceElement&&event.currentTarget.nextElementSibling&&event.currentTarget.nextElementSibling instanceof HTMLSourceElement||(TcHmi.Log.Controls.error(this,TcHmiAudio.#tchmiFQN,"Could not load or play any requested audio files. Perhaps the file format is not supported on this device."),this.getIsEnabled()&&(TcHmi.EventProvider.raise(this.__id+".onError",event),TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"CurrentTime"}),TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"IsPlaying"}))))}__onVolumeChange(_event){let volume=this.__elemAudio.volume,mute=this.__elemAudio.muted;mute!==this.__mute&&(this.__mute=mute,TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"Mute"})),volume!==this.__volume&&(this.__volume=volume,TcHmi.EventProvider.raise(this.__id+".onVolumeChange",this.__volume),TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"Volume"}),this.__volume>0&&this.__mute?(this.__mute=!1,TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"Mute"})):0===this.__volume&&this.__mute&&(this.__mute=!0,TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"Mute"})))}__onDurationChange(_event){this.__duration=this.__elemAudio.duration,isNaN(this.__duration)&&(this.__duration=0),TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"Duration"}),TcHmi.EventProvider.raise(this.__id+".onDurationChange",this.__duration)}__onEnded(_event){TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"IsEnded"}),TcHmi.EventProvider.raise(this.__id+".onIsEndedChange",this.__elemAudio.ended)}__onPlayingChange(_event){TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"CurrentTime"}),TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"IsPlaying"}),TcHmi.EventProvider.raise(this.__id+".onIsPlayingChange",!this.__elemAudio.paused)}__onRateChange(_event){this.__playbackrate=this.__elemAudio.playbackRate,TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"Playbackrate"})}__onTimeUpdate(_event){this.__currentTime=this.__elemAudio.currentTime,TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"CurrentTime"}),TcHmi.EventProvider.raise(this.__id+".onTimeUpdate")}getDuration(){return this.__duration}getIsEnded(){return this.__elemAudio.ended}getIsPlaying(){return!this.__elemAudio.paused}setSrcList(valueNew){let convertedValue=TcHmi.ValueConverter.toObject(valueNew);null===convertedValue&&(convertedValue=this.getAttributeDefaultValueInternal("SrcList"));let resolverInfo=this.__objectResolvers.get("srcList");resolverInfo&&(resolverInfo.watchDestroyer&&resolverInfo.watchDestroyer(),resolverInfo.resolver.destroy());let resolver=new TcHmi.Symbol.ObjectResolver(convertedValue,{parentControl:this,type:this.getAttributeDescription("SrcList")?.type});this.__objectResolvers.set("srcList",{resolver,watchCallback:this.__onResolverForSrcListWatchCallback,watchDestroyer:resolver.watch(this.__onResolverForSrcListWatchCallback)})}__onResolverForSrcListWatchCallback(data){this.__isAttached||this.__suspendObjectResolver("srcList"),data.error===TcHmi.Errors.NONE?tchmi_equal(data.value,this.__srcList)||(this.__srcList=data.value,TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"SrcList"}),this.__processSrcList()):TcHmi.Log.Controls.error(this,TcHmiAudio.#tchmiFQN,{Attribute:"SrcList"},`Resolving symbols from object failed with error: ${TcHmi.Log.buildMessage(data.details)}`)}getSrcList(){return this.__srcList}__processSrcList(){if(TCHMI_DESIGNER)return;let removeSources=()=>{for(;this.__elemAudio.firstChild;)this.__elemAudio.firstChild.removeEventListener("error",this.__onError),this.__elemAudio.removeChild(this.__elemAudio.firstChild)};if(!0!==TcHmi.Access.checkAccess(this,"observe"))return void removeSources();if(!this.getIsEnabled())return void removeSources();let loadNeeded=!1;if(this.__srcList){let ii=this.__srcList.length;for(;this.__elemAudio.childElementCount>ii;)this.__elemAudio.lastElementChild?.removeEventListener("error",this.__onError),this.__elemAudio.removeChild(this.__elemAudio.lastElementChild);for(let i=0;i<ii;i++){let currentSourceElem,vs=this.__srcList[i];i<this.__elemAudio.childElementCount?currentSourceElem=this.__elemAudio.children[i]:(currentSourceElem=document.createElement("source"),currentSourceElem.addEventListener("error",this.__onError)),vs.source!==currentSourceElem.getAttribute("src")&&(currentSourceElem.src=tchmi_path(vs.source),loadNeeded=!0),vs.type!==currentSourceElem.type&&(currentSourceElem.type=vs.type??"",loadNeeded=!0),currentSourceElem.parentElement||this.__elemAudio.insertBefore(currentSourceElem,this.__elemAudio.lastElementChild?this.__elemAudio.lastElementChild.nextSibling:null)}this.__elemAudio.lastChild&&this.__elemAudio.lastChild.nodeType!==Node.TEXT_NODE&&this.__elemAudio.appendChild(document.createTextNode("HTML5 Audio support is missing..."))}else this.__elemAudio.childElementCount&&(loadNeeded=!0,removeSources());loadNeeded&&this.__elemAudio.load(),TcHmi.EventProvider.raise(this.__id+".onIsPlayingChange",!this.__elemAudio.paused)}play(){!0===TcHmi.Access.checkAccess(this,"operate")&&this.getIsEnabled()&&this.__elemAudio.play().then(result=>{}).catch(error=>{TcHmi.Log.Controls.warn(this,TcHmiAudio.#tchmiFQN,{Attribute:"SrcList"},"Audio playback was prevented. Please set audio control to mute or activate audio with user interaction.")})}pause(){!0===TcHmi.Access.checkAccess(this,"operate")&&this.getIsEnabled()&&this.__elemAudio.pause()}stop(){!0===TcHmi.Access.checkAccess(this,"operate")&&this.getIsEnabled()&&(this.__elemAudio.load(),TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"CurrentTime"}),TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"IsPlaying"}),TcHmi.EventProvider.raise(this.__id+".onIsPlayingChange",!this.__elemAudio.paused))}skipBackward(valueNew){!0===TcHmi.Access.checkAccess(this,"operate")&&this.getIsEnabled()&&null!=valueNew&&(isNaN(valueNew)||(this.__elemAudio.currentTime-=valueNew))}skipForward(valueNew){!0===TcHmi.Access.checkAccess(this,"operate")&&this.getIsEnabled()&&null!=valueNew&&(isNaN(valueNew)||(this.__elemAudio.currentTime+=valueNew))}setCurrentTime(valueNew){if(!0!==TcHmi.Access.checkAccess(this,"operate"))return;if(!this.getIsEnabled())return;let convertedValue=TcHmi.ValueConverter.toNumber(valueNew);null===convertedValue&&(convertedValue=this.getAttributeDefaultValueInternal("CurrentTime")),convertedValue!==this.__currentTime&&null!==convertedValue&&(this.__currentTime=convertedValue,TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"CurrentTime"}),this.__processCurrentTime())}getCurrentTime(){return this.__currentTime}__processCurrentTime(){this.__elemAudio.currentTime=this.__currentTime}setControls(valueNew){let convertedValue=TcHmi.ValueConverter.toBoolean(valueNew);null===convertedValue&&(convertedValue=this.getAttributeDefaultValueInternal("Controls")),convertedValue!==this.__controls&&(this.__controls=convertedValue,TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"Controls"}),this.__processControls())}getControls(){return this.__controls}__processControls(){void 0!==this.__controls&&(!0===TcHmi.Access.checkAccess(this,"operate")?this.__elemAudio.controls=this.__controls:this.__elemAudio.controls=!1)}setVolume(valueNew){let convertedValue=TcHmi.ValueConverter.toNumber(valueNew);null===convertedValue&&(convertedValue=this.getAttributeDefaultValueInternal("Volume")),convertedValue!==this.__volume&&(this.__volume=convertedValue,TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"Volume"}),this.__processVolume())}getVolume(){return this.__volume}__processVolume(){if(void 0===this.__volume)return;let volume=this.__volume;volume=volume<0?0:volume,volume=volume>1?1:volume,this.__elemAudio.volume=volume}setAutoplay(valueNew){let convertedValue=TcHmi.ValueConverter.toBoolean(valueNew);null===convertedValue&&(convertedValue=this.getAttributeDefaultValueInternal("Autoplay")),convertedValue!==this.__autoplay&&(this.__autoplay=convertedValue,TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"Autoplay"}),this.__processAutoplay())}getAutoplay(){return this.__autoplay}__processAutoplay(){void 0!==this.__autoplay&&(this.__elemAudio.autoplay=this.__autoplay)}setMute(valueNew){let convertedValue=TcHmi.ValueConverter.toBoolean(valueNew);null===convertedValue&&(convertedValue=this.getAttributeDefaultValueInternal("Mute")),convertedValue!==this.__mute&&(this.__mute=convertedValue,TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"Mute"}),this.__processMute())}getMute(){return this.__mute}__processMute(){void 0!==this.__mute&&(this.__elemAudio.muted=this.__mute)}setLoop(valueNew){let convertedValue=TcHmi.ValueConverter.toBoolean(valueNew);null===convertedValue&&(convertedValue=this.getAttributeDefaultValueInternal("Loop")),convertedValue!==this.__loop&&(this.__loop=convertedValue,TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"Loop"}),this.__processLoop())}getLoop(){return this.__loop}__processLoop(){void 0!==this.__loop&&(this.__elemAudio.loop=this.__loop)}setPlaybackrate(valueNew){let convertedValue=TcHmi.ValueConverter.toNumber(valueNew);null===convertedValue&&(convertedValue=this.getAttributeDefaultValueInternal("Playbackrate")),convertedValue!==this.__playbackrate&&(this.__playbackrate=convertedValue,TcHmi.EventProvider.raise(this.__id+".onPropertyChanged",{propertyName:"Playbackrate"}),this.__processPlaybackrate())}getPlaybackrate(){return this.__playbackrate}__processPlaybackrate(){if(null!==this.__playbackrate&&void 0!==this.__playbackrate)try{this.__elemAudio.playbackRate=this.__playbackrate}catch(ex){}}}})();TcHmi.Controls.registerEx("TcHmiAudio","TcHmi.Controls.Beckhoff",TcHmiAudio,{injectInGlobalObject:!0});export{TcHmiAudio as Control};