From a9cd0d724fb18804e403da5077dfce57e0561c24 Mon Sep 17 00:00:00 2001 From: John Helfrich Date: Tue, 11 Nov 2025 08:38:13 -0800 Subject: [PATCH 1/2] Fix: Add tightlist command definition for pandoc PDF generation --- gh_pages/assets/pdf-template/template.tex | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gh_pages/assets/pdf-template/template.tex b/gh_pages/assets/pdf-template/template.tex index 21525bd..5121a5f 100644 --- a/gh_pages/assets/pdf-template/template.tex +++ b/gh_pages/assets/pdf-template/template.tex @@ -109,6 +109,10 @@ $highlighting-macros$ $endif$ +% Define tightlist command for pandoc lists +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} + % Document metadata $if(title)$ \title{$title$} From d5e3c77b2939362d32ce51471367119ceef2a321 Mon Sep 17 00:00:00 2001 From: John Helfrich Date: Tue, 11 Nov 2025 09:42:26 -0800 Subject: [PATCH 2/2] Updating documentation scripts to convert md to pdf --- gh_pages/assets/pdf-template/template.tex | 20 +- .../assets/pdf/complete-documentation.pdf | Bin 0 -> 72226 bytes gh_pages/assets/pdf/getting-started.pdf | Bin 0 -> 11125 bytes gh_pages/assets/pdf/hmi-usage.pdf | Bin 0 -> 23505 bytes gh_pages/assets/pdf/plc-usage.pdf | Bin 0 -> 19981 bytes gh_pages/assets/pdf/service-config.pdf | Bin 0 -> 22847 bytes tcpkg/README.md | 33 ++- tcpkg/convert_to_pdf.py | 257 +++++++++++++++++ .../EventVideoPlayback.XAE.Workload.nuspec | 4 +- .../EventVideoPlayback.Documentation.nuspec | 4 +- .../bin/AddToExist.md | 50 ---- .../bin/FirstProgram.md | 146 ---------- .../bin/Installation.md | 53 ---- .../bin/Introduction.md | 19 -- .../bin/Licenses.md | 259 ------------------ .../bin/ServiceDoc.md | 70 ----- .../bin/SystemRequirements.md | 33 --- tcpkg/release/checksums.md | 16 +- 18 files changed, 315 insertions(+), 649 deletions(-) create mode 100644 gh_pages/assets/pdf/complete-documentation.pdf create mode 100644 gh_pages/assets/pdf/getting-started.pdf create mode 100644 gh_pages/assets/pdf/hmi-usage.pdf create mode 100644 gh_pages/assets/pdf/plc-usage.pdf create mode 100644 gh_pages/assets/pdf/service-config.pdf create mode 100644 tcpkg/convert_to_pdf.py delete mode 100644 tcpkg/packages/EventvideoPlayback.Documentation/bin/AddToExist.md delete mode 100644 tcpkg/packages/EventvideoPlayback.Documentation/bin/FirstProgram.md delete mode 100644 tcpkg/packages/EventvideoPlayback.Documentation/bin/Installation.md delete mode 100644 tcpkg/packages/EventvideoPlayback.Documentation/bin/Introduction.md delete mode 100644 tcpkg/packages/EventvideoPlayback.Documentation/bin/Licenses.md delete mode 100644 tcpkg/packages/EventvideoPlayback.Documentation/bin/ServiceDoc.md delete mode 100644 tcpkg/packages/EventvideoPlayback.Documentation/bin/SystemRequirements.md diff --git a/gh_pages/assets/pdf-template/template.tex b/gh_pages/assets/pdf-template/template.tex index 5121a5f..04cd561 100644 --- a/gh_pages/assets/pdf-template/template.tex +++ b/gh_pages/assets/pdf-template/template.tex @@ -2,12 +2,24 @@ \documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} % Packages -\usepackage{lmodern} \usepackage{amssymb,amsmath} \usepackage{ifxetex,ifluatex} -\usepackage{fixltx2e} -\usepackage[T1]{fontenc} -\usepackage[utf8]{inputenc} + +% Font setup for XeLaTeX/LuaLaTeX vs pdfLaTeX +\ifxetex + \usepackage{fontspec} + \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} +\else + \ifluatex + \usepackage{fontspec} + \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} + \else + \usepackage{lmodern} + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} + \fi +\fi + \usepackage{microtype} \usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} \usepackage{hyperref} diff --git a/gh_pages/assets/pdf/complete-documentation.pdf b/gh_pages/assets/pdf/complete-documentation.pdf new file mode 100644 index 0000000000000000000000000000000000000000..03741b786bf39e22fe59f47053df57c99a2e69e2 GIT binary patch literal 72226 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

?|GXG=@IsRtANn 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 OiVXX&bh@K!|N1|)AEsIW literal 0 HcmV?d00001 diff --git a/gh_pages/assets/pdf/getting-started.pdf b/gh_pages/assets/pdf/getting-started.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8909ea0e19d486ae2538d3dfbb204ecf5e972e67 GIT binary patch literal 11125 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 literal 0 HcmV?d00001 diff --git a/gh_pages/assets/pdf/plc-usage.pdf b/gh_pages/assets/pdf/plc-usage.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9b59394df970ffef69cd306f2902f0c83c56b47a GIT binary patch literal 19981 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 RRdWBaO#GG23X|Sn|1W%}E_eU{ literal 0 HcmV?d00001 diff --git a/gh_pages/assets/pdf/service-config.pdf b/gh_pages/assets/pdf/service-config.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4120b0f4306af52815aadec03390e32cc130d47c GIT binary patch literal 22847 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 IWbu#xAJ{r8-2eap literal 0 HcmV?d00001 diff --git a/tcpkg/README.md b/tcpkg/README.md index 6b0a08e..5ec18ad 100644 --- a/tcpkg/README.md +++ b/tcpkg/README.md @@ -20,25 +20,43 @@ tcpkg/ │ ├── BUILD_INSTRUCTIONS.md │ └── QUICK_REFERENCE.txt ├── Build.ps1 # Convenience wrapper (run from here) -└── Build.bat # Convenience wrapper (double-click) +├── Build.bat # Convenience wrapper (double-click) +└── convert_to_pdf.py # Generate documentation PDFs (Python) ``` ## Quick Start -### Option 1: PowerShell (Recommended) +### Build TwinCAT Packages + +#### Option 1: PowerShell (Recommended) ```powershell .\Build.ps1 -CleanBuild ``` -### Option 2: Batch File +#### Option 2: Batch File Double-click `Build.bat` -### Option 3: From Scripts Directory +#### Option 3: From Scripts Directory ```powershell cd scripts .\Build-TcPackages.ps1 -CleanBuild ``` +### Generate Documentation PDFs + +To generate PDF documentation from the markdown files: + +```bash +python convert_to_pdf.py +``` + +This script: +- Automatically installs required Python packages (markdown, weasyprint) +- Converts all markdown files from `gh_pages\_docs\` to PDFs +- Outputs individual PDFs to `packages\EventvideoPlayback.Documentation\bin\` +- Creates a combined `complete-documentation.pdf` with all documentation +- No external dependencies needed (no LaTeX or pandoc required!) + ## Adding New Packages To add a new package to the build: @@ -75,10 +93,17 @@ For complete documentation, see: ## Requirements +### For Building TwinCAT Packages - TwinCAT tcpkg tool (installed with TwinCAT XAE) - PowerShell 5.1 or higher - Windows 10/11 +### For PDF Generation (Optional) +- Python 3.6+ +- Python packages (automatically installed by script): + - `markdown` - Markdown parser + - `xhtml2pdf` - HTML to PDF converter (pure Python, no external dependencies) + ## Support For issues or questions, review the documentation in the `scripts/` directory or check the console output for specific error messages. diff --git a/tcpkg/convert_to_pdf.py b/tcpkg/convert_to_pdf.py new file mode 100644 index 0000000..507673a --- /dev/null +++ b/tcpkg/convert_to_pdf.py @@ -0,0 +1,257 @@ +#!/usr/bin/env python3 +"""Convert markdown documentation to PDF using Python libraries""" + +import sys +import os +from pathlib import Path + +# Force UTF-8 encoding for console output on Windows +if sys.platform == 'win32': + sys.stdout.reconfigure(encoding='utf-8') + sys.stderr.reconfigure(encoding='utf-8') + +def check_dependencies(): + """Check if required packages are installed""" + try: + import markdown + except ImportError: + print("Installing required package: markdown...") + import subprocess + subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'markdown']) + import markdown + + try: + import xhtml2pdf + except ImportError: + print("Installing required package: xhtml2pdf...") + import subprocess + subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'xhtml2pdf']) + import xhtml2pdf + + return True + +def markdown_to_html(md_content, title="Documentation"): + """Convert markdown to HTML with styling""" + import markdown + + # Convert markdown to HTML + md = markdown.Markdown(extensions=[ + 'extra', + 'codehilite', + 'toc', + 'tables', + 'fenced_code' + ]) + html_content = md.convert(md_content) + + # Create full HTML document with CSS + html = f""" + + + + + {title} + + + + {html_content} + + +""" + return html + +def convert_md_to_pdf(md_file, output_file): + """Convert a single markdown file to PDF""" + from xhtml2pdf import pisa + + # Read markdown file + with open(md_file, 'r', encoding='utf-8') as f: + md_content = f.read() + + # Get title from filename + title = md_file.stem.replace('-', ' ').replace('_', ' ').title() + title = f"Event Video Playback - {title}" + + # Convert to HTML + html = markdown_to_html(md_content, title) + + # Convert HTML to PDF + with open(output_file, 'wb') as pdf_file: + pisa_status = pisa.CreatePDF(html, dest=pdf_file) + + if pisa_status.err: + raise Exception(f"PDF generation failed with {pisa_status.err} errors") + +def main(): + """Main function""" + # Check dependencies + print("Checking dependencies...") + if not check_dependencies(): + return 1 + + print("✓ All dependencies installed\n") + + # Set paths + script_dir = Path(__file__).parent + project_root = script_dir.parent + docs_dir = project_root / 'gh_pages' / '_docs' + output_dir = script_dir / 'packages' / 'EventvideoPlayback.Documentation' / 'bin' + + # Verify input directory exists + if not docs_dir.exists(): + print(f"✗ Documentation directory not found: {docs_dir}") + return 1 + + # Create output directory + output_dir.mkdir(parents=True, exist_ok=True) + + # Get all markdown files + md_files = sorted(docs_dir.glob('*.md')) + + if not md_files: + print(f"✗ No markdown files found in {docs_dir}") + return 1 + + print(f"Found {len(md_files)} markdown files") + print(f"Output directory: {output_dir}\n") + + success = 0 + failed = 0 + + # Convert each file + for md_file in md_files: + pdf_name = md_file.stem + '.pdf' + pdf_path = output_dir / pdf_name + + print(f"Converting {md_file.name}...", end=' ') + + try: + convert_md_to_pdf(md_file, pdf_path) + print("✓") + success += 1 + except Exception as e: + print(f"✗ {e}") + failed += 1 + + # Create combined PDF + print(f"\nCreating combined PDF...", end=' ') + try: + from xhtml2pdf import pisa + + # Combine all markdown content + combined_content = [] + for md_file in md_files: + with open(md_file, 'r', encoding='utf-8') as f: + content = f.read() + # Add a page break between documents + combined_content.append(content) + combined_content.append("\n\n---\n\n") + + # Convert to HTML + html = markdown_to_html(''.join(combined_content), "Event Video Playback - Complete Documentation") + + # Convert to PDF + combined_path = output_dir / 'complete-documentation.pdf' + with open(combined_path, 'wb') as pdf_file: + pisa_status = pisa.CreatePDF(html, dest=pdf_file) + + if pisa_status.err: + raise Exception(f"PDF generation failed with {pisa_status.err} errors") + + print("✓") + success += 1 + except Exception as e: + print(f"✗ {e}") + failed += 1 + + # Summary + print(f"\n{'='*40}") + print(f"Success: {success}, Failed: {failed}") + print(f"{'='*40}") + + if failed == 0: + print("\n✓ All PDFs generated successfully!") + print(f"Output: {output_dir}") + + return 0 if failed == 0 else 1 + +if __name__ == '__main__': + sys.exit(main()) diff --git a/tcpkg/packages/EventVideoPlayback.XAE/EventVideoPlayback.XAE.Workload.nuspec b/tcpkg/packages/EventVideoPlayback.XAE/EventVideoPlayback.XAE.Workload.nuspec index 864529c..5e61eb5 100644 --- a/tcpkg/packages/EventVideoPlayback.XAE/EventVideoPlayback.XAE.Workload.nuspec +++ b/tcpkg/packages/EventVideoPlayback.XAE/EventVideoPlayback.XAE.Workload.nuspec @@ -2,7 +2,7 @@ Beckhoff-USA-Community.EventVideoPlayback.XAE - 2.0.0 + 2.0.1 Event Video Playback Beckhoff Automation LLC true @@ -21,7 +21,7 @@ - + diff --git a/tcpkg/packages/EventvideoPlayback.Documentation/EventVideoPlayback.Documentation.nuspec b/tcpkg/packages/EventvideoPlayback.Documentation/EventVideoPlayback.Documentation.nuspec index 7a1ca90..3a94b03 100644 --- a/tcpkg/packages/EventvideoPlayback.Documentation/EventVideoPlayback.Documentation.nuspec +++ b/tcpkg/packages/EventvideoPlayback.Documentation/EventVideoPlayback.Documentation.nuspec @@ -2,7 +2,7 @@ Beckhoff-USA-Community.XAE.Documentation.EventVideoPlayback - 2.0.0 + 2.0.1 Event Video Playback Documentation Beckhoff Automation LLC https://github.com/Beckhoff-USA-Community/EventVideoPlayback @@ -13,7 +13,7 @@ docs/README.md

Documentation and examples for EventVideoPlayback system Beckhoff TwinCAT - Version 2.0.0 - Complete documentation for EventVideoPlayback 2.0 release + Version 2.0.1 - Complete documentation for EventVideoPlayback 2.0 release EventVideoPlayback Documentation Package - Comprehensive documentation for the EventVideoPlayback system including installation guides, usage instructions, system requirements, and service documentation. diff --git a/tcpkg/packages/EventvideoPlayback.Documentation/bin/AddToExist.md b/tcpkg/packages/EventvideoPlayback.Documentation/bin/AddToExist.md deleted file mode 100644 index 05366bf..0000000 --- a/tcpkg/packages/EventvideoPlayback.Documentation/bin/AddToExist.md +++ /dev/null @@ -1,50 +0,0 @@ -## 4026 XAE Requirements - -The PLC libraries require the PackML TwinCAT package installed. To install, open a Powershell or CMD instance and run the command: -```powershell -tcpkg install TwinCAT.XAE.PLC.Lib.Tc3_PackML_V2 --no-prompt -``` - -## Adapting to Existing Vision Projects - -You can easily make use of this new service with existing TcVision Projects. There are 4 main components that need to be addressed. - -1. Add the SPT Vision Library to the References section of the PLC Project (v3.0.4 or later) - - ![References](../Images/References.png) - -2. Instantiate a new FB_ImageToVideo and TriggerEvent BOOL - - ``` - VAR - // ImageToVideo Instance - Playback : FB_ImageToVideo := (CameraName := 'Camera1', - JsonAttribute := '{CreateVid : 1, CameraName: "Camera1"}', - FramesPerSecond := 10, - TimeBeforeEvent := T#3S, - TimeAfterEvent := T#3S, - VideoOutputDirectory := 'C:\TcAlarmVideos', - ReductionFactor := 0.25); - - // Event Trigger Boolean - TriggerEvent : BOOL; - END_VAR - ``` - -3. Add the CyclicLogic call to the main body of your POU. This **MUST** be called cyclically to work. -``` -Playback.CyclicLogic(); -``` - -4. Add the trigger logic somewhere in your program. The TriggerAlarmForVideoCapture method only needs to be called once to start processing. -``` -IF TriggerEvent THEN - TriggerEvent := FALSE; - Playback.TriggerAlarmForVideoCapture(); -END_IF -``` - -5. Add the AddImage method to your image aquisition loop of your program. This will add an image to the buffer of the Playback block. -``` -Playback.AddImage(ipImageIn := ImageIn); -``` \ No newline at end of file diff --git a/tcpkg/packages/EventvideoPlayback.Documentation/bin/FirstProgram.md b/tcpkg/packages/EventvideoPlayback.Documentation/bin/FirstProgram.md deleted file mode 100644 index 1ccba77..0000000 --- a/tcpkg/packages/EventvideoPlayback.Documentation/bin/FirstProgram.md +++ /dev/null @@ -1,146 +0,0 @@ -## Sample Project Locations - -The sample projects will be installed in these locations: - -Build 4024 TwinCAT - -```C:\TwinCAT\Functions\TcEventVideoPlayback``` - -Build 4026 TwinCAT - -```C:\Program Files (x86)\Beckhoff\TwinCAT\Functions\TcEventVideoPlayback``` - -In the event that the sample files are not located here, and they were selected for install, they can be found under ```C:\Program Files\Beckhoff Automation LLC\TcEventVideoPlayback```. All items selected for install can be located here after running the installer. - -## TcEventVideoPlayback Service - -The TcEventVideoPlayback service is installed by the EXE installer. This service will run in the background of the IPC and convert TwinCAT Vision images to video files when called from the PLC. Proper installation can be verified via the Windows Services. - - - -![WindowsService](../Images/WindowsService.PNG) - -## PLC Project - Quick Start Sample - -For quick start purposes, a PLC sample project and the SPT_Vision library is supplied. To run the sample, follow these steps. - -1. Locate the sample ```C:\TwinCAT\Functions\TcEventVideoPlayback\TcEventVideoPlayback_PLC_Sample.tszip``` - -2. To open the .tszip select open project in Visual Studio or XAE Shell - -3. **For 4026 only** - you will need to update the Visu profile by right-clicking the PLC project and going to the Properties page. - ![PlcVisuProfile](../Images/PlcVisuProfile.png) - -4. Load the included sample images into the TC Vision File Source - - > If using TwinCAT 4026, the files might reject unzipping in the ```C:\Program Files(x86)``` without administrator rights. Simply move the files to a location where you have write access. - -5. Activate the TwinCAT project - -6. Put the PLC into Run state - -7. Open the Visu project and press the Run Vision button to start the vision process - - ![Visu](../Images/Visu.PNG) - -8. Check images are streaming via the TwinCAT -> Windows-> ADS Image Watch - -9. To generate a video, press the Trigger Video button on the Visu - -10. Check that a video was created in the default directory ```C:\TcAlarmVideos``` - -#### Notes on PLC Project - -- The SPT_Vision component FB_ImageAquire and the base Tc3 Vision components are supported. For the sample, the SPT_Vision component FB_ImageAquire is used. The FB_ImageToVideo function does not require FB_ImageAquire to work, and it can also be supplied with standard image pointers from the Tc3 Vision base library. - - - -- The FB_ImageToVideo is configurable. You can set the directory of where the video will be recorded, as well as the Camera name and Event Logger name. - - ![FB_ImageToVideo](../Images/FB_ImageToVideo.PNG) - -#### Common issues running the sample - -##### Build Error - -The first known common issue is when loading the PLC project on a brand new install. If nothing has been loaded on the system before, you will get some Tc2_System library errors like below. - - - -![BuildErrors](../Images/BuildErrors.png) - -To fix this, you will need to right-click the top XAE project node and select -> Unload Project, and then right-click Reload Project. - -![ReloadProject](../Images/ReloadProject.PNG) - -##### Binaries Error - -The second known common issue is the TcVision binaries error when trying to activate the project, as seen below. This is due to a mismatch of the publishing system TcVision version and the one you are using. - -![BinariesError](../Images/BinariesError.png) - -To fix this, you must reload the tmc files for each of the FileSource TcCom objects under Vision. Make sure to do it for both. - -![ReloadTmc](../Images/ReloadTmc.PNG) - - - -## HMI Project - Quick Start Sample - -Included in the package is a NuGet Package for the EventVision component. This package should be installed properly if selected. To install manually, copy the EventVision.'version'.nupkg file to the directory ```C:\TwinCAT\Functions\TE2000-HMI-Engineering\References``` for 4024, or ```C:\ProgramData\Beckhoff\NugetPackages``` for 4026. - -**Running the sample**: - -1. **For 4026 only** - You may need to upgrade the EventLogger control from inside the NugetPackage manager. Search for **Beckhoff.TwinCAT.HMI.EventLogger** package and select **Update** - -2. Simply build the HMI project by right-clicking and selecting rebuild - -3. Launch the HMI project in the browser, not live-view. A full browser is required for playback of the video files. - -> If you get a blank window stating TcHmiSrv Resource is missing, that means the project needs to be rebuilt from step 1 - -3. Toggle the Run Program - - ![RunProgram](../Images/HMIUsage1.png) - - -4. Trigger an event - - ![ToggleEvent](../Images/HMIUsage2.png) - -5. Double click the Video event to play - - ![PlayVideo](../Images/PlayVideo.PNG) - - - -**To configure the project from start to finish**: - -1. Install the **Beckhoff.TwinCAT.HMI.EventLogger** package with the NuGet Package Manager - -2. On the Browse window of the NuGet Package Manager, add the **EventVision** package to the project - - ![NuGet Package](../Images/NugetPackage.PNG) - - > If the package does not appear, double check Package source has TwinCAT HMI Customer profile selected - -3. Set a virtual directory of where the video files exist. Go to Server -> TcHmiSrv -> Virtual directories and add the following entry. Be aware of the Publish Configuration you are selecting. If you are using a Publish Configuration of "Remote" when Publishing the project, make sure you add the virtual directory to the matching Publish Configuration via dropdown menu on the TcHmiSrv page. - - ![VirtDir](../Images/VirtDir.PNG) - -4. On your HMI view, add a new EventVideo Control grid - -5. Modify the top 3 properties and make sure the Virtual Drive matched the Virtual Directory created in Step 3 - - ![Properties](../Images/Properties.PNG) - -6. Launch the HMI in a browser - - > The EventVideoPlayback control will only work in browser launch or fully deployed environment. HMI Live View will not allow you to play video files due to the virtual directory usage. - - -> - If you only see a blank playback window, try adjusting the codec that was used to record the video ->- If you get a "Waiting For Video" in place of "Play Video", try the following: -> - Re-adding the EventVideo Control -> - Completely remove the virtual directory and re-add -> - Make sure Check Retires and Check Delay is set in the properties window of the control diff --git a/tcpkg/packages/EventvideoPlayback.Documentation/bin/Installation.md b/tcpkg/packages/EventvideoPlayback.Documentation/bin/Installation.md deleted file mode 100644 index 19d945b..0000000 --- a/tcpkg/packages/EventvideoPlayback.Documentation/bin/Installation.md +++ /dev/null @@ -1,53 +0,0 @@ -### Installing TcEventVideoPlayback - -Download and run TcEventVideoPlayback.msi on both the Engineering and Runtime systems. -See details below. - -There are four different parts of the project that are installed by default: - -**TwinCAT PLC Libraries** - -Installs the required SPT_Base, SPT_Event_Logger, and SPT_Vision libraries to hard disk and imports them into the PLC library repository - -**TwinCAT HMI Control** - -Installs the EventVideo HMI Control for playback of videos inside Tc HMI - -**TwinCAT Sample Projects** - -Installs the Quick Start sample projects. Located at ```TwinCAT\Functions\TcEventVideoPlayback```. - -**TcEventVideoPlayback Windows Service** - -Installs the Windows Background Worker service for converting images to video files and storing locally - -![InstallSelection](../Images/InstallSelection.png) - -### Installing Runtime Only - -This is what you would select for a TwinCAT XAR only system. Only the service is required to be installed and it will run in the background. - - -![InstallSelectionRuntimeOnly](../Images/InstallSelectionRuntimeOnly.PNG) - -### Installer Notes - -The sample projects, HMI nuget package, and PLC libraries will be installed wherever the user selects for the install process. However, the samples will also be located under: - -Build 4024 TwinCAT - -```C:\TwinCAT\Functions\TcEventVideoPlayback``` - -Build 4026 TwinCAT - -```C:\Program Files (x86)\Beckhoff\TwinCAT\Functions\TcEventVideoPlayback``` - -The installer internally calls the RepTool to install the PLC libraries for you if a PLC XAE profile is available. The installer will also install the HMI nuget package within: - -Build 4024 TwinCAT - -```C:\TwinCAT\Functions\TE2000-HMI-Engineering\References``` - -Build 4026 TwinCAT - -```C:\ProgramData\Beckhoff\NugetPackages``` diff --git a/tcpkg/packages/EventvideoPlayback.Documentation/bin/Introduction.md b/tcpkg/packages/EventvideoPlayback.Documentation/bin/Introduction.md deleted file mode 100644 index a323357..0000000 --- a/tcpkg/packages/EventvideoPlayback.Documentation/bin/Introduction.md +++ /dev/null @@ -1,19 +0,0 @@ - -# Introduction - -This site serves as reference documentation for the TwinCAT Event Video Playback Project. - -#### What is TcEventVideoPlayback and why would I use it? - -Great question! TcEventVideoPlayback provides and easy to use function for transforming cyclical images captured by TwinCAT Vision into video files based on an event input. These video files are logged to the internal Event Logger and can be played back with the included TwinCAT HMI control. - -**Example:** Let’s say you keep having a machine down occurrence on a production machine. You want to see what is going on and why this keeps happening. In comes TcEventVideoPlayback... - -With a TwinCAT enabled camera, and a simple PLC function block, your questions are answered. Images from the camera are continuously buffered. When an event occurs, an event is generated in the HMI Event Log. Then, images from before and after the event are converted to a video file on the hard disk. This video file is name time stamped to coordinate with the event generated in the HMI event log. Selecting the event in the log on the included TwinCAT HMI control, allows the associated video to be viewed. - - - -### Additional Resources - -- [TC_EventVideoPlayback Installer](https://github.com/Beckhoff-USA-Community/TC_EventVideoPlayback/releases) -- [TC_EventVideoPlayback Github](https://github.com/Beckhoff-USA-Community/TC_EventVideoPlayback) diff --git a/tcpkg/packages/EventvideoPlayback.Documentation/bin/Licenses.md b/tcpkg/packages/EventvideoPlayback.Documentation/bin/Licenses.md deleted file mode 100644 index 8977994..0000000 --- a/tcpkg/packages/EventvideoPlayback.Documentation/bin/Licenses.md +++ /dev/null @@ -1,259 +0,0 @@ - -# Licenses and Disclaimers - - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -#### TC_EventVideoPlayback License - -MIT License - -Copyright (c) 2023 Beckhoff Automation LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -#### Openh264 Codec License - -Copyright (c) 2013, Cisco Systems -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#### OpenCV License - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2008 shimat - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/tcpkg/packages/EventvideoPlayback.Documentation/bin/ServiceDoc.md b/tcpkg/packages/EventvideoPlayback.Documentation/bin/ServiceDoc.md deleted file mode 100644 index 3690042..0000000 --- a/tcpkg/packages/EventvideoPlayback.Documentation/bin/ServiceDoc.md +++ /dev/null @@ -1,70 +0,0 @@ - -# Service Documentation - - -## Service Configuration - -To configure the service, you must first stop it from running. You can do this by opening the Windows Services window -> Right-clicking the TcEventVideoPlayback service -> Stop Service. - -The config file is located at ```C:\Program Files\Beckhoff Automation LLC\TcEventVideoPlayback\TcEventVideoPlaybackService\TcEventVideoPlaybackService.config``` - -Open the file with notepad or Visual Studio and you will see the following parameters - -```json -{ - "CodecFourCC": "avc1", - "VideoDeleteTime": 1, - "AdsPort": 26129 -} -``` - -#### CodecFourCC - -This is the codec used to create the video from the service. avc1 is the most common codec that is also compatible with web browsers. For a full list of codecs see below, but not all are web compatible and will display as a black box on Tc HMI. [Check here for appropriate codecs](https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Video_codecs). - -``` -OpenCV: FFMPEG: format mp4 / MP4 (MPEG-4 Part 14) -fourcc tag 0x7634706d/'mp4v' codec_id 000C -fourcc tag 0x31637661/'avc1' codec_id 001B -fourcc tag 0x33637661/'avc3' codec_id 001B -fourcc tag 0x31766568/'hev1' codec_id 00AD -fourcc tag 0x31637668/'hvc1' codec_id 00AD -fourcc tag 0x7634706d/'mp4v' codec_id 0002 -fourcc tag 0x7634706d/'mp4v' codec_id 0001 -fourcc tag 0x7634706d/'mp4v' codec_id 0007 -fourcc tag 0x7634706d/'mp4v' codec_id 003D -fourcc tag 0x7634706d/'mp4v' codec_id 0058 -fourcc tag 0x312d6376/'vc-1' codec_id 0046 -fourcc tag 0x63617264/'drac' codec_id 0074 -fourcc tag 0x7634706d/'mp4v' codec_id 00A3 -fourcc tag 0x39307076/'vp09' codec_id 00A7 -fourcc tag 0x31307661/'av01' codec_id 801D -fourcc tag 0x6134706d/'mp4a' codec_id 15002 -fourcc tag 0x63616c61/'alac' codec_id 15010 -fourcc tag 0x6134706d/'mp4a' codec_id 1502D -fourcc tag 0x6134706d/'mp4a' codec_id 15001 -fourcc tag 0x6134706d/'mp4a' codec_id 15000 -fourcc tag 0x332d6361/'ac-3' codec_id 15003 -fourcc tag 0x332d6365/'ec-3' codec_id 15028 -fourcc tag 0x6134706d/'mp4a' codec_id 15004 -fourcc tag 0x61706c6d/'mlpa' codec_id 1502C -fourcc tag 0x43614c66/'fLaC' codec_id 1500C -fourcc tag 0x7375704f/'Opus' codec_id 1503C -fourcc tag 0x6134706d/'mp4a' codec_id 15005 -fourcc tag 0x6134706d/'mp4a' codec_id 15018 -fourcc tag 0x6134706d/'mp4a' codec_id 15803 -fourcc tag 0x7334706d/'mp4s' codec_id 17000 -fourcc tag 0x67337874/'tx3g' codec_id 17005 -fourcc tag 0x646d7067/'gpmd' codec_id 18807 -fourcc tag 0x316d686d/'mhm1' codec_id 15817 -``` - -#### VideoDeleteTime - -This is the amount of time that the file will stay stored on the system. If the time expired, the service will automatically cleanup old video files. - -The value is a floating point value, and is in units of Days. So for half a day you will need to put 0.5 as the value. - -#### AdsPort - -This is the ADS Port that the service is hosting on. This should remaing at port 26129 at all times in order for the PLC function blocks to work properly. diff --git a/tcpkg/packages/EventvideoPlayback.Documentation/bin/SystemRequirements.md b/tcpkg/packages/EventvideoPlayback.Documentation/bin/SystemRequirements.md deleted file mode 100644 index c03f622..0000000 --- a/tcpkg/packages/EventvideoPlayback.Documentation/bin/SystemRequirements.md +++ /dev/null @@ -1,33 +0,0 @@ - -# Getting Started - -## 4026 XAE Requirements - -The PLC libraries require the PackML TwinCAT package installed. To install, open a Powershell or CMD instance and run the command: -```powershell -tcpkg install TwinCAT.XAE.PLC.Lib.Tc3_PackML_V2 --no-prompt -``` - - - -## Installer Requirements - -- Windows 10 or higher (x64 only) -- TwinCAT XAR 4024.4x or higher (Service Only) -- TwinCAT XAE 4024.4x or higher (PLC and HMI components) -- TE2000 v1.12.760 or higher -- TF2000 v1.12.760 or higher -- TF7000 TcVision - -## Build Project Source Requirements - -These requirements are only if you are looking to build the source code located inside GitHub. - -- VS 2022 Pro with .Net components (System Service) -- VS 2019 Pro (TcHMI Control Extension) -- TwinCAT XAR 4024.4x -- TE2000 v1.12.760 or higher -- Advanced Installer 21.9 (Building MSI) -- Python -- mkdocs -- mkdocs-material diff --git a/tcpkg/release/checksums.md b/tcpkg/release/checksums.md index 6bf4b71..3ddf3fc 100644 --- a/tcpkg/release/checksums.md +++ b/tcpkg/release/checksums.md @@ -1,6 +1,6 @@ -# TwinCAT Package Checksums +# TwinCAT Package Checksums -**Generated:** 2025-11-10 08:39:04 +**Generated:** 2025-11-11 09:30:01 **Release Folder:** C:\GitHub\EventVideoPlayback\tcpkg\.\release This file contains SHA256 checksums for all built packages to ensure integrity and traceability. @@ -10,12 +10,14 @@ This file contains SHA256 checksums for all built packages to ensure integrity a | Package Name | Version | SHA256 Checksum | |--------------|---------|-----------------| | Beckhoff-USA-Community.EventVideoPlayback.XAE | 2.0.0 | `E3D29512A7F60977E2038F2F97777E913339E81AEB72FFC17769C208C317B2DB` | -| Beckhoff-USA-Community.EventVideoPlayback.XAR | 2.0.0 | `301C5BD8BCB1805E71776B5C332ADF707F2EE58053A0C5492FD961BA2625C286` | +| Beckhoff-USA-Community.EventVideoPlayback.XAE | 2.0.1 | `C66B5E77507B593D944217F3D9D1B30E148B6EA097F8ACDF73B24061581B831E` | +| Beckhoff-USA-Community.EventVideoPlayback.XAR | 2.0.0 | `B2D44674BB4F540BA8F9614D76DCC02D6793D8729F278B4828326202474A77FA` | | Beckhoff-USA-Community.XAE.Documentation.EventVideoPlayback | 2.0.0 | `64131561E0EC94E69DF52FCBBF564E003E906561D75A69E640151EF5098A4EF9` | -| Beckhoff-USA-Community.XAE.HMI.EventVisionControl | 1.1.3 | `358440528A73FB627340766FE11300F00E598FFA52EE459851EAB5A32836368B` | -| Beckhoff-USA-Community.XAE.PLC.Lib.EventVideoPlayback | 1.1.1 | `24BFE0AED289F0CF80294C0EE43064ACB040C4B44D10C4D1E80C1BC01DBBE470` | -| Beckhoff-USA-Community.XAR.Service.EventVideoPlayback | 2.0.0 | `97296EF0B207DEFFA13625DDF8C147AC42A19FF9CC0C8F6014F9368F896876D5` | -| Beckhoff.Disclaimer.BetaFeed | 1.0.0 | `45991EBCC3FD10760C73A406C33EC63B2D3ECF9E50B2C8108465D6D9DC09793D` | +| Beckhoff-USA-Community.XAE.Documentation.EventVideoPlayback | 2.0.1 | `603A47E4BBCBB64E24166D8C7412157EF538C95B640DCF5988FAB0E337D25EB4` | +| Beckhoff-USA-Community.XAE.HMI.EventVisionControl | 1.1.3 | `3BD210416439B9AA7E39D15981F2EF3546E51FDF49B758ED4FFF16007C9E9F43` | +| Beckhoff-USA-Community.XAE.PLC.Lib.EventVideoPlayback | 1.1.1 | `192E7A6C33FEB397D2BB8BB6E36BB72B8AD212A40D8EB4F135E53E356C5D45A7` | +| Beckhoff-USA-Community.XAR.Service.EventVideoPlayback | 2.0.0 | `447A0012C5E2C83ABAC3EF37C346FCBED0C8CD294B67C03D996FED11C24EB4AC` | +| Beckhoff.Disclaimer.BetaFeed | 1.0.0 | `401A48CD5C15F0F49F9C373C4AF8CC28E970DC720B8D616C03CF8C98D7262979` | ## Verification Instructions