| | <!DOCTYPE html> |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | is a PLAIN-ENGLISH EXPLANATION for you. |
| | - Everything inside <pre class="code"> ... </pre> is the ACTUAL CODE. |
| | - The yellow boxes are IMPORTANT NOTES. |
| | - The green boxes are "what this does in plain English". |
| |
|
| | WHERE THIS CODE LIVES IN THE ORIGINAL FILE: |
| | Original file: notes.txt |
| | Lines: 1 — 186 |
| |
|
| | ================================================================================ |
| | --> |
| | <html> |
| | <head> |
| | <meta charset="UTF-8"> |
| | <title>01 — Config Variables | Siemens Configurator</title> |
| | <style> |
| | body { font-family: Arial, sans-serif; background: #f5f5f5; color: #222; margin: 20px; } |
| | h1 { color: #003366; border-bottom: 3px solid #003366; padding-bottom: 6px; } |
| | h2 { color: #005599; margin-top: 30px; } |
| | h3 { color: #007733; } |
| | pre.code { background: #1e1e1e; color: #d4d4d4; padding: 16px; border-radius: 6px; |
| | font-family: Consolas, monospace; font-size: 13px; overflow-x: auto; |
| | border-left: 4px solid #569cd6; white-space: pre-wrap; } |
| | .comment { color: #6a9955; } |
| | .keyword { color: #569cd6; } |
| | .string { color: #ce9178; } |
| | .number { color: #b5cea8; } |
| | .note { background: #fff8dc; border: 2px solid #f0c040; border-radius: 6px; |
| | padding: 12px; margin: 10px 0; } |
| | .explain { background: #e8f5e9; border: 2px solid #4caf50; border-radius: 6px; |
| | padding: 12px; margin: 10px 0; } |
| | .warn { background: #fff3e0; border: 2px solid #ff9800; border-radius: 6px; |
| | padding: 12px; margin: 10px 0; } |
| | nav { background: #003366; padding: 10px; border-radius: 6px; } |
| | nav a { color: #fff; text-decoration: none; margin-right: 18px; font-size: 14px; } |
| | nav a:hover { text-decoration: underline; } |
| | table { border-collapse: collapse; width: 100%; margin: 10px 0; } |
| | th { background: #003366; color: white; padding: 8px; } |
| | td { border: 1px solid #ccc; padding: 7px; vertical-align: top; } |
| | tr:nth-child(even) td { background: #f0f0f0; } |
| | </style> |
| | </head> |
| | <body> |
| |
|
| | <nav> |
| | <a href="index.html">📋 README</a> |
| | <a href="01_config_variables.html">① Config</a> |
| | <a href="02_utility_functions.html">② Utilities</a> |
| | <a href="03_drive_configuration.html">③ Drive Config</a> |
| | <a href="04_ui_html_builder.html">④ HTML Builder</a> |
| | <a href="05_event_handlers.html">⑤ Event Handlers</a> |
| | <a href="06_machine_data.html">⑥ Machine Data</a> |
| | </nav> |
| |
|
| | <h1>① Global Configuration Variables</h1> |
| | <p> |
| | This is the <strong>first section</strong> of the script. It runs once when the script starts. |
| | Think of it as the <em>"settings file"</em> — everything that controls how the script behaves |
| | is set here. A commissioning engineer or developer would change values here to adapt the |
| | script to a different machine. |
| | </p> |
| | <p> |
| | In VBScript, lines beginning with a single quote <code>'</code> are <em>comments</em> — they |
| | are ignored by the computer and only exist to explain the code. |
| | </p> |
| |
|
| | |
| | |
| | |
| | |
| | <h2>Section 1 — Version & Mode Flags</h2> |
| |
|
| | <div class="explain"> |
| | <strong>What this does:</strong> Sets the script version number and controls |
| | whether the Unwind/Rewind drives use <em>Servo mode</em> or <em>Vector mode</em>. |
| | This version code (<code>S53b</code>) also appears in the on-screen title bar. |
| | </div> |
| |
|
| | <pre class="code"><span class="keyword">If True Then</span> <span class="comment">' This "If True" block is just used to group the variable definitions together. |
| | ' It always runs — it's not a real condition.</span> |
| |
|
| | ConfigVersion=<span class="string">"S53b"</span> <span class="comment">' Version string shown in the HTML title. Change this if you update the script.</span> |
| | <span class="comment">' History: S48=Nov2023, S49=Feb2024, S50=Apr2024, S51-S53=mid-2024</span> |
| |
|
| | <span class="comment">' S48 Revision - Part 'a' - Nov 2023 - Revised for vector mode support</span> |
| | VectorMode=<span class="keyword">True</span> <span class="comment">' True = the script includes vector-mode drive support (for winders)</span> |
| | </pre> |
| |
|
| | |
| | |
| | |
| | <h2>Section 2 — Machine Type & PLC Type</h2> |
| |
|
| | <div class="explain"> |
| | <strong>What this does:</strong> Selects which type of machine this script is configured for. |
| | Machine type affects how the <strong>Emergency Stop (E-stop)</strong> is handled. |
| | PLC type affects the bit-width used for speed feedback signals. |
| | </div> |
| |
|
| | <table> |
| | <tr><th>Variable</th><th>Value</th><th>Meaning</th></tr> |
| | <tr><td><code>ConfigMachineType</code></td><td>1</td><td>K5 Standard — instantaneous E-stop</td></tr> |
| | <tr><td><code>ConfigMachineType</code></td><td>2</td><td>K5 Vision & Expert — timed E-stop</td></tr> |
| | <tr><td><code>ConfigMachineType</code></td><td>3</td><td>Selectable — engineer picks from UI dropdown</td></tr> |
| | <tr><td><code>ConfigMachinePlcType</code></td><td>1</td><td>S7 Classic — 16-bit speed feedback</td></tr> |
| | <tr><td><code>ConfigMachinePlcType</code></td><td>2</td><td>TIA Portal — 32-bit speed feedback</td></tr> |
| | <tr><td><code>ConfigMachinePlcType</code></td><td>3</td><td>Selectable — engineer picks from UI dropdown</td></tr> |
| | </table> |
| |
|
| | <pre class="code"> ConfigMachineType=<span class="number">3</span> <span class="comment">' ← CHANGE THIS to 1, 2, or 3 to hard-code the machine type |
| | ' or leave as 3 to let the engineer choose in the UI</span> |
| | ConfigMachinePlcType=<span class="number">3</span> <span class="comment">' ← CHANGE THIS to 1 or 2 to hard-code PLC type |
| | ' or leave as 3 to let the engineer choose in the UI</span> |
| | </pre> |
| |
|
| | |
| | |
| | |
| | <h2>Section 3 — Option Flags</h2> |
| |
|
| | <div class="explain"> |
| | <strong>What this does:</strong> Toggles optional features on or off. |
| | </div> |
| |
|
| | <pre class="code"> ConfigOption01_SetupComms=<span class="keyword">True</span> <span class="comment">' True = automatically configure communications telegram on the CU320 |
| | ' False = skip comms setup (useful if comms is pre-configured)</span> |
| |
|
| | TelegramIsConfigured=<span class="keyword">False</span> <span class="comment">' Internal tracking flag. Set to False at start. |
| | ' Set to True by SetupComms() after it runs. |
| | ' Used in UpdateStatusDisplay to show "Complete" on step 3.</span> |
| |
|
| | ConfigOption02_Logfile=<span class="keyword">True</span> <span class="comment">' True = write a log script in Starter showing every parameter changed |
| | ' The log is stored as a script called "LogFile" in the Starter project. |
| | ' Very useful for auditing what the script changed.</span> |
| | </pre> |
| |
|
| | |
| | |
| | |
| | <h2>Section 4 — Winder Drive Type</h2> |
| |
|
| | <pre class="code"> ConfigWinderDriveType=<span class="number">3</span> |
| | <span class="comment">' 1 = Servo mode — high-precision position/speed control (default for winders) |
| | ' 2 = Vector mode — torque-focused control (used for larger winder motors) |
| | ' 3 = Selectable — engineer picks in the UI at commissioning time |
| | ' |
| | ' NOTE: Changing winder type requires a factory reset of the Unwind and Rewind drives. |
| | ' The gains also change: Vector = Kp 5 / Ti 200ms, Servo = Kp 90 / Ti 50ms</span> |
| | </pre> |
| |
|
| | |
| | |
| | |
| | <h2>Section 5 — Logging / Debug Options</h2> |
| |
|
| | <pre class="code"> APP.LogActive = <span class="keyword">True</span> <span class="comment">' Enable Starter's internal application log</span> |
| | APP.LogMode=<span class="string">"1"</span> <span class="comment">' Log mode 1 = errors only</span> |
| | On Error GoTo 0 <span class="comment">' If there is a script error, stop and show the error to the user</span> |
| | Set ThisProject=PROJ <span class="comment">' PROJ is the current open Starter project. We store a reference to it here.</span> |
| |
|
| | ParameterEchoToScreen=<span class="keyword">False</span> <span class="comment">' True = print every parameter write to the HTML status bar (very noisy, for debug only)</span> |
| | CompressedCSVLogfile=<span class="keyword">False</span> <span class="comment">' True = remove spacing from log file (compact CSV format) |
| | ' False = padded columns for easy reading</span> |
| | LogfilePadLength=<span class="number">15</span> <span class="comment">' If CompressedCSVLogfile=False, each column in the log file is padded to 15 characters wide</span> |
| | ExtendedDiag = <span class="keyword">True</span> <span class="comment">' True = print extra diagnostic messages to the HTML status bar during configuration</span> |
| | </pre> |
| |
|
| | |
| | |
| | |
| | <h2>Section 6 — Drive Count & Drive List</h2> |
| |
|
| | <div class="explain"> |
| | <strong>What this does:</strong> Defines how many drives the script knows about |
| | and assigns each one a name, a flag for whether it is a "line drive" (follows web speed), |
| | and a communications slot number on the CU320. |
| | </div> |
| |
|
| | <div class="note"> |
| | <strong>🔑 Key Rule:</strong> The <code>DriveList</code> names MUST exactly match |
| | the Technology Object (TO) names inside the Starter project after the Identify Drives step. |
| | If they don't match, the script cannot configure that drive. |
| | </div> |
| |
|
| | <pre class="code"> NumDrives=<span class="number">13</span> <span class="comment">' Total number of drives in this project (changed from 8 → 12 → 13 over revisions) |
| | ' If you add a new drive, increment this and add a DriveList entry below.</span> |
| |
|
| | NumIdentList=<span class="number">16</span> <span class="comment">' Maximum rows in the Drive Identification table (allows up to 16 physical drives to appear)</span> |
| |
|
| | <span class="comment">' ── Drive List Definition ────────────────────────────────────────────────────────────────────── |
| | ' Each drive gets 3 things assigned: |
| | ' DriveList(n) = The name the drive must have in Starter (must match TO name) |
| | ' LineDrive(n) = True → drive speed is proportional to line (web) speed |
| | ' False → drive is a layarm (position-controlled, independent of line speed) |
| | ' DriveCommSlot(n) = Which slot on the CU320 this drive uses for communications |
| | ' (slots 1-10 are used; 0 = no comms needed) |
| | ' ──────────────────────────────────────────────────────────────────────────────────────────────</span> |
| |
|
| | DriveList(<span class="number">1</span>)=<span class="string">"Unwind"</span> : LineDrive(<span class="number">1</span>)=<span class="keyword">True</span> : DriveCommSlot(<span class="number">1</span>)=<span class="number">3</span> <span class="comment">'CU1 drive 1 (Unwind = winder, follows line)</span> |
| | DriveList(<span class="number">2</span>)=<span class="string">"Draw"</span> : LineDrive(<span class="number">2</span>)=<span class="keyword">True</span> : DriveCommSlot(<span class="number">2</span>)=<span class="number">7</span> <span class="comment">'CU2 drive 5 (Draw = pulls web)</span> |
| | DriveList(<span class="number">3</span>)=<span class="string">"Drum"</span> : LineDrive(<span class="number">3</span>)=<span class="keyword">True</span> : DriveCommSlot(<span class="number">3</span>)=<span class="number">3</span> <span class="comment">'CU2 drive 1 (Drum = main tension drum)</span> |
| | DriveList(<span class="number">4</span>)=<span class="string">"DTR1wcr"</span> : LineDrive(<span class="number">4</span>)=<span class="keyword">True</span> : DriveCommSlot(<span class="number">4</span>)=<span class="number">8</span> <span class="comment">'CU2 drive 6 (DTR1 = Draw Tension Roller 1)</span> |
| | DriveList(<span class="number">5</span>)=<span class="string">"DTR2cork"</span> : LineDrive(<span class="number">5</span>)=<span class="keyword">True</span> : DriveCommSlot(<span class="number">5</span>)=<span class="number">6</span> <span class="comment">'CU2 drive 4 (DTR2 = Draw Tension Roller 2)</span> |
| | DriveList(<span class="number">6</span>)=<span class="string">"Rewind"</span> : LineDrive(<span class="number">6</span>)=<span class="keyword">True</span> : DriveCommSlot(<span class="number">6</span>)=<span class="number">4</span> <span class="comment">'CU1 drive 2 (Rewind = winder, follows line)</span> |
| | DriveList(<span class="number">7</span>)=<span class="string">"UnwindLayarm"</span> : LineDrive(<span class="number">7</span>)=<span class="keyword">False</span> : DriveCommSlot(<span class="number">7</span>)=<span class="number">4</span> <span class="comment">'CU2 drive 2 (Unwind Layarm = arm, NOT a line drive)</span> |
| | DriveList(<span class="number">8</span>)=<span class="string">"RewindLayarm"</span> : LineDrive(<span class="number">8</span>)=<span class="keyword">False</span> : DriveCommSlot(<span class="number">8</span>)=<span class="number">5</span> <span class="comment">'CU2 drive 3 (Rewind Layarm = arm, NOT a line drive)</span> |
| | DriveList(<span class="number">9</span>)=<span class="string">"Draw2"</span> : LineDrive(<span class="number">9</span>)=<span class="keyword">True</span> : DriveCommSlot(<span class="number">9</span>)=<span class="number">10</span> <span class="comment">'CU2 drive 8 (added for Atom machine)</span> |
| | DriveList(<span class="number">10</span>)=<span class="string">"Draw3"</span> : LineDrive(<span class="number">10</span>)=<span class="keyword">True</span> : DriveCommSlot(<span class="number">10</span>)=<span class="number">4</span> <span class="comment">'CU3 drive 2</span> |
| | DriveList(<span class="number">11</span>)=<span class="string">"Drum2"</span> : LineDrive(<span class="number">11</span>)=<span class="keyword">True</span> : DriveCommSlot(<span class="number">11</span>)=<span class="number">9</span> <span class="comment">'CU2 drive 7</span> |
| | DriveList(<span class="number">12</span>)=<span class="string">"Drum3"</span> : LineDrive(<span class="number">12</span>)=<span class="keyword">True</span> : DriveCommSlot(<span class="number">12</span>)=<span class="number">3</span> <span class="comment">'CU3 drive 1</span> |
| | DriveList(<span class="number">13</span>)=<span class="string">"Draw4"</span> : LineDrive(<span class="number">13</span>)=<span class="keyword">True</span> : DriveCommSlot(<span class="number">13</span>)=<span class="number">5</span> <span class="comment">'CU3 drive 3 (added for Barbaro machine extra drives)</span> |
| | </pre> |
| |
|
| | |
| | |
| | |
| | <h2>Section 7 — Setup Step List</h2> |
| |
|
| | <div class="explain"> |
| | <strong>What this does:</strong> Defines the names of the 11 buttons shown |
| | in the main HTML UI, in order from Step 0 to Step 10. |
| | Each button triggers a specific action. |
| | </div> |
| |
|
| | <pre class="code"> NumSteps=<span class="number">10</span> <span class="comment">' Number of steps (0 through 10) — changed from fewer steps in earlier revisions</span> |
| |
|
| | StepList(<span class="number">0</span>)=<span class="string">"Automatic Controller Reset"</span> <span class="comment">' Not a script step — reminder to run Starter's auto-reset</span> |
| | StepList(<span class="number">1</span>)=<span class="string">"Identify Drives"</span> <span class="comment">' Shows drive table, lets engineer assign function names to drives</span> |
| | StepList(<span class="number">2</span>)=<span class="string">"Edit Machine Data"</span> <span class="comment">' Shows machine data form (gear ratios, diameters etc.)</span> |
| | StepList(<span class="number">3</span>)=<span class="string">"Config Infeed and CUs"</span> <span class="comment">' Runs ConfigureAllCUs() — sets up CU320 and infeed parameters</span> |
| | StepList(<span class="number">4</span>)=<span class="string">"Config Drives"</span> <span class="comment">' Runs ConfigureAllDrives() — sets drive-specific parameters</span> |
| | StepList(<span class="number">5</span>)=<span class="string">"Download"</span> <span class="comment">' Goes online and downloads all parameters to physical drives</span> |
| | StepList(<span class="number">6</span>)=<span class="string">"Safety Integrated Setup"</span> <span class="comment">' Reminder step — engineer must do this manually in Starter</span> |
| | StepList(<span class="number">7</span>)=<span class="string">"Motor Identification"</span> <span class="comment">' Reminder step — engineer must run motor ID routine manually</span> |
| | StepList(<span class="number">8</span>)=<span class="string">"Post ID Drive Config"</span> <span class="comment">' Fixes parameters that motor ID overwrites (speed loop gains etc.)</span> |
| | StepList(<span class="number">9</span>)=<span class="string">"Ram to Rom, Upload & Save"</span> <span class="comment">' Copies drive RAM → ROM, then uploads from drives back to Starter project</span> |
| | StepList(<span class="number">10</span>)=<span class="string">"Export File to HMI"</span> <span class="comment">' (Added in S53) Saves machine data to a file for the HMI panel</span> |
| | </pre> |
| |
|
| | |
| | |
| | |
| | <h2>Section 8 — Non Drive-Cliq Motor List</h2> |
| |
|
| | <div class="explain"> |
| | <strong>What this does:</strong> Registers known motor types that don't have |
| | DriveCliq (Siemens' plug-and-play motor interface). The script cannot auto-detect these, |
| | so they must be listed here. Add new motors here if needed. |
| | </div> |
| |
|
| | <pre class="code"> NumSiemensMotorList=<span class="number">2</span> <span class="comment">' How many non-cliq motors are listed below (change if you add more)</span> |
| |
|
| | <span class="comment">' Format: Code = Siemens motor order code. Description = model number string.</span> |
| | <span class="comment">' Ratings are shown in the comment for reference only — not used by the script.</span> |
| | SiemensMotorList_Code(<span class="number">1</span>)=<span class="number">28643</span> : SiemensMotorList_Description(<span class="number">1</span>)=<span class="string">"1FW6150-0xx05-4Fxx"</span> <span class="comment">'Ratings: 360 Nm, 20.3 kW</span> |
| | SiemensMotorList_Code(<span class="number">2</span>)=<span class="number">28661</span> : SiemensMotorList_Description(<span class="number">2</span>)=<span class="string">"1FW6160-xxx10-2Pxx"</span> <span class="comment">'Ratings: 933 Nm, 38.9 kW</span> |
| | </pre> |
| |
|
| | |
| | |
| | |
| | <h2>Section 9 — Machine Default Data Tables</h2> |
| |
|
| | <div class="explain"> |
| | <strong>What this does:</strong> Stores pre-defined gear ratio and roller diameter values |
| | for known machine types (K5 Expert, K5 Vision, Barbaro, Master). |
| | If <code>DefaultingMode=1</code>, these values are loaded automatically when the script runs |
| | for the first time on a fresh project — saving the engineer from typing everything manually. |
| | </div> |
| |
|
| | <div class="warn"> |
| | <strong>⚠️ Note:</strong> <code>DefaultingMode</code> is currently set to <code>0</code> |
| | (blank on first startup). Set it to <code>1</code> to use the tables below as defaults. |
| | Change <code>MachineModel</code> to select which machine's data to use (0=Custom, 1=K5 Expert, |
| | 2=K5 Vision, 3=Barbaro, 4=Master). |
| | </div> |
| |
|
| | <pre class="code"> MachineModel = <span class="number">1</span> <span class="comment">' 0=Custom, 1=K5 Expert, 2=K5 Vision, 3=Barbaro, 4=Master</span> |
| | DefaultingMode = <span class="number">0</span> <span class="comment">' 0=Blank on first startup, 1=Use table below on first startup</span> |
| |
|
| | <span class="comment">' Columns below correspond to drives: |
| | ' UNW DRAW DRUM DTR1 DTR2 REW ULAY RLAY DRAW2 DRAW3 DRUM2 DRUM3 DRAW4 |
| | ' [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]</span> |
| |
|
| | MachineK5EGearData = Array( <span class="number">1.0</span>, <span class="number">1.0</span>, <span class="number">2.857</span>, <span class="number">1.1</span>, <span class="number">1.0</span>, <span class="number">1.0</span>, <span class="number">89.2</span>, <span class="number">41.43</span>, <span class="number">1.0</span>, <span class="number">1.0</span>, <span class="number">2.857</span>, <span class="number">2.857</span>, <span class="number">1.0</span>) |
| | MachineK5EDiamData = Array( <span class="number">165</span>, <span class="number">194</span>, <span class="number">700.0</span>, <span class="number">250</span>, <span class="number">326.2</span>, <span class="number">165</span>, <span class="number">81.49</span>, <span class="number">101.86</span>, <span class="number">197.4</span>, <span class="number">197.4</span>, <span class="number">900.0</span>, <span class="number">900.0</span>, <span class="number">197.4</span>) |
| | <span class="comment">' ↑ K5 Expert defaults: Drum gear=2.857x, Layarms have high ratios (89x / 41x), etc.</span> |
| |
|
| | MachineK5vGearData = Array( <span class="number">1.0</span>, <span class="number">1.0</span>, <span class="number">2.857</span>, <span class="number">1.1</span>, <span class="number">1.0</span>, <span class="number">1.0</span>, <span class="number">89.2</span>, <span class="number">160.0</span>, <span class="number">1.0</span>, <span class="number">1.0</span>, <span class="number">2.857</span>, <span class="number">2.857</span>, <span class="number">1.0</span>) |
| | MachineK5vDiamData = Array( <span class="number">165</span>, <span class="number">193.2</span>, <span class="number">700.0</span>, <span class="number">251.2</span>, <span class="number">184.2</span>, <span class="number">165</span>, <span class="number">81.49</span>, <span class="number">101.86</span>, <span class="number">197.4</span>, <span class="number">197.4</span>, <span class="number">900.0</span>, <span class="number">900.0</span>, <span class="number">197.4</span>) |
| | <span class="comment">' ↑ K5 Vision: Rewind layarm gear ratio is 160 (different from Expert's 41.43)</span> |
| | <span class="keyword">End If</span> <span class="comment">' End of the "If True" grouping block</span> |
| | </pre> |
| |
|
| | |
| | |
| | |
| | <h2>Section 10 — Main Script Startup Sequence</h2> |
| |
|
| | <div class="explain"> |
| | <strong>What this does:</strong> After all variable definitions, these lines actually |
| | <em>run the script</em> in order. Think of them as the "main function" of the program. |
| | </div> |
| |
|
| | <pre class="code"><span class="comment">' ─────────────── START OF MAIN SCRIPT ───────────────</span> |
| |
|
| | CreateMainPage <span class="comment">' Opens an Internet Explorer (MSIE) window to host the HTML UI</span> |
| | CreateMainPageDocument <span class="comment">' Writes all the HTML (buttons, tables, forms) into that window</span> |
| | CheckMachineDataExists <span class="comment">' Checks if machine data was saved from a previous session and loads it</span> |
| | CreateLogFile <span class="comment">' Creates a VBScript log file called "LogFile" inside Starter</span> |
| | PrintToLogFile(<span class="string">"* Test log file ---- Date: "</span>&Date) <span class="comment">' Writes today's date as the first log entry</span> |
| | UpdateStatusDisplay <span class="comment">' Refreshes which buttons are greyed out / active based on current state</span> |
| | EventHandler(MainPage) <span class="comment">' Enters the event loop — waits indefinitely for the user to click buttons</span> |
| |
|
| | <span class="comment">' ─────────────── END OF MAIN SCRIPT ───────────────── |
| | ' After EventHandler() returns (user closed the window), the script ends.</span> |
| | </pre> |
| |
|
| | <hr> |
| | <p style="color:#888; font-size:12px;"> |
| | ← This file only covers lines 1–201 of the original notes.txt. |
| | Continue to <a href="02_utility_functions.html">② Utility Functions</a>. |
| | </p> |
| |
|
| | </body> |
| | </html> |
| |
|