Created
November 2, 2025 15:29
-
-
Save kumajaya/18b3e37182d5aba39207dbc3ee743853 to your computer and use it in GitHub Desktop.
Determistic First Trip Logic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "id": "b8c9fadb", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "%pip install matplotlib seaborn" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "6a3dac81", | |
| "metadata": {}, | |
| "source": [ | |
| "# Function Block Description — `K_FTL`\n", | |
| "\n", | |
| "---\n", | |
| "\n", | |
| "## Overview\n", | |
| "`K_FTL` (*First Trip Logic*) digunakan untuk **menentukan sinyal trip pertama yang terjadi** di antara sekumpulan input digital. \n", | |
| "Blok ini *melock* (menahan) hasil deteksi hingga sinyal reset aktif. Cocok untuk analisis *root cause shutdown* atau *trip sequence capture*.\n", | |
| "\n", | |
| "---\n", | |
| "\n", | |
| "## Interface\n", | |
| "\n", | |
| "| **I/O** | **Name** | **Type** | **Description** |\n", | |
| "|:--------|:----------|:----------|:----------------|\n", | |
| "| **Input** | `RunInputs[8]` | `BOOL` | Status input digital (mis. trip per channel) |\n", | |
| "| | `Reset` | `BOOL` | Reset seluruh latch dan status lock |\n", | |
| "| **Output** | `FirstTripIndex` | `INT` | Nomor input pertama yang terdeteksi trip (1-based) |\n", | |
| "| | `TripLatched[8]` | `BOOL` | Status latched untuk tiap channel trip |\n", | |
| "| **Internal** | `TripTime[8]` | `REAL (epoch)` | Waktu trip masing-masing channel dalam format UNIX time |\n", | |
| "| | `TripLocked` | `BOOL` | Menandakan bahwa first trip sudah dikunci |\n", | |
| "| | `PrevInputs[8]` | `BOOL` | Nilai input sebelumnya, untuk deteksi *rising edge* |\n", | |
| "| | `ResetLatch` | `BOOL` | Status reset latch (TRUE saat reset berlangsung) |\n", | |
| "\n", | |
| "---\n", | |
| "\n", | |
| "## Algorithm\n", | |
| "\n", | |
| "1. Jika `Reset` = TRUE \n", | |
| " → Semua latch (`TripLatched`), waktu trip (`TripTime`), dan `TripLocked` direset.\n", | |
| "\n", | |
| "2. Jika `TripLocked` = FALSE \n", | |
| " - Deteksi perubahan dari FALSE → TRUE pada setiap `RunInputs[i]`. \n", | |
| " - Saat deteksi pertama muncul: \n", | |
| " - Simpan waktu trip (`TripTime[i] = time.time()`), \n", | |
| " - Set `TripLatched[i] = TRUE`, \n", | |
| " - Set `FirstTripIndex = i + 1`, \n", | |
| " - Set `TripLocked = TRUE`.\n", | |
| "\n", | |
| "3. Jika `TripLocked` = TRUE \n", | |
| " - Tidak ada perubahan indeks trip, meskipun ada input lain yang menyusul.\n", | |
| "\n", | |
| "4. Nilai `TripLatched` tetap tersimpan hingga `Reset` aktif kembali.\n", | |
| "\n", | |
| "---\n", | |
| "\n", | |
| "## Notes\n", | |
| "\n", | |
| "- Output `FirstTripIndex = 0` berarti belum ada trip terdeteksi. \n", | |
| "- Timestamp dapat dikonversi dengan `datetime.fromtimestamp(TripTime[i])` untuk logging timeline. \n", | |
| "- Ukuran array `RunInputs` dapat diubah sesuai kebutuhan, misalnya 16 atau 32 channel. \n", | |
| "- Dapat diperluas untuk menyimpan *trip source name* atau *message*.\n", | |
| "\n", | |
| "---\n", | |
| "\n", | |
| "## Example Usage\n", | |
| "\n", | |
| "```python\n", | |
| "ftl = K_FTL(n=8)\n", | |
| "\n", | |
| "# Simulasi input trip\n", | |
| "inputs = [False, False, True, False, False, False, False, False]\n", | |
| "ftl.update(inputs)\n", | |
| "print(ftl.FirstTripIndex) # -> 3\n", | |
| "\n", | |
| "# Trip baru tidak memengaruhi hasil\n", | |
| "inputs = [False, False, True, True, False, False, False, False]\n", | |
| "ftl.update(inputs)\n", | |
| "print(ftl.FirstTripIndex) # -> tetap 3\n", | |
| "\n", | |
| "# Reset\n", | |
| "ftl.update(inputs, reset=True)\n", | |
| "print(ftl.FirstTripIndex) # -> 0\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "id": "7984d923", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import time\n", | |
| "from datetime import datetime\n", | |
| "\n", | |
| "class K_FTL:\n", | |
| " \"\"\"\n", | |
| " K_FTL — First Trip Logic Deterministik\n", | |
| "\n", | |
| " Simulasi Function Block (FB) untuk mendeteksi sinyal trip pertama\n", | |
| " di antara beberapa input digital, lalu mengunci (lock) hasilnya\n", | |
| " agar tetap konsisten sampai di-reset.\n", | |
| " \"\"\"\n", | |
| "\n", | |
| " def __init__(self):\n", | |
| " # --- Variabel internal ---\n", | |
| " self.FirstTripIndex = 0 # Channel pertama yang trip (1-based)\n", | |
| " self.TripLatched = [False] * 8 # Status latched tiap channel\n", | |
| " self.TripTime = [None] * 8 # Timestamp trip per channel\n", | |
| " self.PrevInputs = [False] * 8 # Nilai input sebelumnya\n", | |
| " self.TripLocked = False # Lock ketika first trip sudah ditentukan\n", | |
| " self.ResetLatch = False # Status reset terakhir\n", | |
| "\n", | |
| " def execute(self, RunInputs, Reset):\n", | |
| " \"\"\"\n", | |
| " Jalankan logika FTL.\n", | |
| " RunInputs: list[bool] panjang 8 — status input digital\n", | |
| " Reset: bool — sinyal reset latch\n", | |
| " \"\"\"\n", | |
| " current_real_time = time.time()\n", | |
| "\n", | |
| " if Reset:\n", | |
| " # Reset semua status internal\n", | |
| " self.FirstTripIndex = 0\n", | |
| " self.TripLocked = False\n", | |
| " self.ResetLatch = True\n", | |
| " for i in range(8):\n", | |
| " self.TripLatched[i] = False\n", | |
| " self.TripTime[i] = None\n", | |
| " self.PrevInputs[i] = RunInputs[i]\n", | |
| " else:\n", | |
| " self.ResetLatch = False\n", | |
| " for i in range(8):\n", | |
| " # Deteksi rising edge: FALSE → TRUE\n", | |
| " if not self.ResetLatch and RunInputs[i] and not self.PrevInputs[i]:\n", | |
| " self.TripLatched[i] = True\n", | |
| " self.TripTime[i] = current_real_time\n", | |
| " # Catat trip pertama hanya sekali\n", | |
| " if not self.TripLocked:\n", | |
| " self.FirstTripIndex = i + 1\n", | |
| " self.TripLocked = True\n", | |
| " self.PrevInputs[i] = RunInputs[i]\n", | |
| "\n", | |
| "\n", | |
| "def print_status(ftl, test_name):\n", | |
| " \"\"\"\n", | |
| " Print status internal FB dengan format waktu yang mudah dibaca.\n", | |
| " \"\"\"\n", | |
| " print(f\"\\n{test_name}:\")\n", | |
| " print(f\" FirstTripIndex: {ftl.FirstTripIndex}\")\n", | |
| " print(f\" TripLatched : {ftl.TripLatched}\")\n", | |
| " formatted_times = [\n", | |
| " datetime.fromtimestamp(t).strftime('%Y-%m-%d %H:%M:%S')\n", | |
| " if t else '1970-01-01' for t in ftl.TripTime\n", | |
| " ]\n", | |
| " print(f\" TripTime : {formatted_times}\")\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "id": "03e5e958", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import random, time\n", | |
| "from datetime import datetime\n", | |
| "\n", | |
| "# ----------------- Simulasi FTL -----------------\n", | |
| "ftl = K_FTL()\n", | |
| "\n", | |
| "# Test 1: Reset Awal\n", | |
| "RunInputs = [False] * 8\n", | |
| "ftl.execute(RunInputs, True)\n", | |
| "print_status(ftl, \"Test 1 - Reset Awal\")\n", | |
| "\n", | |
| "# Test 2: No Trip\n", | |
| "ftl.execute(RunInputs, False)\n", | |
| "print_status(ftl, \"Test 2 - No Trip\")\n", | |
| "\n", | |
| "# Test 3: Single Trip (ubah channel sesuai kebutuhan)\n", | |
| "trip_channel = 5\n", | |
| "RunInputs[trip_channel - 1] = True\n", | |
| "ftl.execute(RunInputs, False)\n", | |
| "print_status(ftl, f\"Test 3 - Single Trip Channel {trip_channel}\")\n", | |
| "\n", | |
| "# Test 4: Multiple Trip dengan delay acak 0.3–1.5s\n", | |
| "for ch in range(8):\n", | |
| " if not ftl.TripLatched[ch]:\n", | |
| " RunInputs[ch] = True\n", | |
| " delay = random.uniform(0.3, 1.5)\n", | |
| " time.sleep(delay)\n", | |
| " ftl.execute(RunInputs, False)\n", | |
| " print(f\" Tripped ch{ch+1} after {delay:.2f}s at {datetime.now().strftime('%H:%M:%S.%f')[:-3]}\")\n", | |
| "print_status(ftl, \"Test 4 - Multiple Trip (random delay 0.3–1.5s)\")\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "id": "31fcab1b", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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191gC1KGGV1Vo0YNSU/fW+gYL7883RaaOnbsbC+//fZ8mTbtBfu12U+3bt3tcHBz/86du8jy5UvtbevXr7W39+1r/n2/U777bpODzwwAAADc5pRGSjVs2FA++ugjqVKlin0X9+DBg/aPYQAAUDpmRJL5MPLz82XKlMly8cWXSYcOncLbbNq00U6lmzRpqr08ZMjD4du6d78m/A7axx//U3JyciQ1tU349v3798miRQtk1qz54euuueb68NdmlFSdOken5xlmqt727dskGAxKUlItueGGm+S8886XDz/8QB588D6ZPftNiY+Pj9jzAQAAAPc65el7piD1zTffyDXXXGOHkU2ZQq8JlCdMnYIWsoejzNT/0kz/Nz2fHn54qC34pKUNCN/n889Xy8iRw2TgwAelZcuWJd5/3rzXZfHiRfL0089JfHylQv2qLr20q9SsmVTs/UzxKXSeoc8+n1e8Xo889dTE8Ha/+c0lMmPGVPnmm//KL3/5q9I+fES5o3nxlTrnQFkhe9BA7qDF46LsnVajc9NLau3atbJo0SK55557ZMWKFVKzZs3CO/bFiM+bLy5oFo9ywyO+SnHaJwFXInswq6QcbUqZlFRFkpMTT7jt1q1bZcCA26Vz584ydOjQcK+AN954QyZMmCDjx4+Xjh07Fntf06h85MiRsmbNGnnzzTelUaOjo65CTJ+p0aNHl3gODRrUl/z8w+HbDx/OkKZNG4nXmy8LFiyQ/v37h7c1xapataqd9PHAXVJSumifAlyK7EEDuYOWFJdk77SKUrGxZulzkeuuu05efvll+fe//y2XX355kXdizao+gUDZnChQGiZ3blihAOUP2YP5987k4MCBw5KenlXidvv2pUvfvrdIr163So8eN8qBA9n2+iVLFsvUqc/J5MkvSpMmTUvcx+jRo2TXrh/sdh5PjOzdmxnOXmZmpuzY8YPUrdukxPtfeGEnef31udK27a/s6nzLli2XMWPGS05OUF58cZo0aNDU9rf69NOP5dChw1KvXsnnAvcxGc/NzZVKlSrxOw+OInvQQO6gJRgl2SvNG5unVJT617/+JS+++KK89NJL4etMb6lq1aoV2ZbV96CyAloBK6DBeWQPxzKz436aIVesefPmSkbGQTv1znwYZgrfrl077R8gI0YMC29rpuGZ4pVpdN6pUxdp3LipLFnyjjRo0FDu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hfqGht50fP/99+WLL75QPjtEuxo1ahS63KJFC1uMNyvf8jsPkeodagZchApSRrNmzWTXrl2q5wX3+Mc//iHnnXeeLchHuzKdvmfeuTDFKPPH8rFN4sw7uWaZdACItpEDZlj3hAkTXPEuBsqHHTt2yN13323fPQv56quv7AszXpwhUsy0FTNlyvRXMR+mn5n5MF8DkX5hZhazMVP4QsyUZVOo4nceIuWcc86xhU/Tz+zYlZePLVIBkbR27Vr51a9+JW5QppUi02T6mmuusctUmydxxYoVMmPGDOndu3dZHgYAysVKQM8995zcdtttdpVRMyo09AFEknmjp23btnZxh02bNsmHH35oR+rdcccd2qeGKGZeiDVp0iT8UaVKFfthvgYiyYzOMyNWhg8fbosC5nee6SfVv39/7VNDFGvevLn85je/sVNEzQrzpjg6depUuemmm7RPDS6xceNG16x0W6bT9wzzg2uKUn369LHLaN5zzz3StWvXsj4MAKhauXKl+P1+ef755+3Hsb755hu180L0M/1TTEHUTB39v//7P/uGUK9evXgDCEBUMq8npk+fLo8//rhcd911thh64403UpRCxJlVHs2/taYQZf6tvfnmm+2/t4AT0tPTXdMCyRM0bd0BAAAAAAAAB9HoCQAAAAAAAI6jKAUAAAAAAADHUZQCAAAAAACA4yhKAQAAAAAAwHEUpQAAAAAAAOA4ilIAAAAAAABwHEUpAAAAAAAAOI6iFAAAKFdycnJk79692qcR9bZv3659CgAAwOUoSgEAgDJzxhlnyDnnnCPt2rWTX/7yl3LBBRfI3XffLVu3bi31Pnr27Cmff/65/XrRokVy/fXX268XLFggV1111Wmd1+233y7PPvvsad23f//+MnPmzCLXm8cY+mjdurWcddZZ4csvvPBCke2PfSyn4tNPP7XP67HHO//88+Xee++VPXv2nNZj+uCDD+TOO+88rfsCAACUlZgy2xMAAICIzJo1yxZojIMHD9oCjSk0LVy4UGrXrn3S+5v7hPz+97+3H5qmTZtW7PVffPFF+GtTLOvXr59ce+21Je7nf3ksCQkJhY6XnZ0tDz30kNx///3y+uuvn/L+zHMcDAZP61wAAADKCiOlAABAxNSoUUOGDBkizZo1k5dffjl8/RtvvCGXX365tG/f3hZzvv/+e3v9HXfcITt37pRB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", | |
| "text/plain": [ | |
| "<Figure size 1200x600 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "import matplotlib.pyplot as plt\n", | |
| "from matplotlib.lines import Line2D\n", | |
| "import seaborn as sns\n", | |
| "from datetime import datetime\n", | |
| "\n", | |
| "# ----------------- Style Global -----------------\n", | |
| "# Font lebih ringan dan proporsional\n", | |
| "plt.rcParams['svg.fonttype'] = 'none' # simpan teks sebagai teks, bukan path\n", | |
| "plt.rcParams['font.family'] = 'sans-serif'\n", | |
| "plt.rcParams['font.sans-serif'] = ['DejaVu Sans', 'Arial']\n", | |
| "plt.rcParams['font.size'] = 10 # basis font size lebih kecil\n", | |
| "sns.set_style(\"whitegrid\")\n", | |
| "plt.style.use('seaborn-v0_8-darkgrid')\n", | |
| "\n", | |
| "# ----------------- Plot Timeline Trip Dinamis -----------------\n", | |
| "tripped_indices = [i for i, v in enumerate(ftl.TripLatched) if v]\n", | |
| "if not tripped_indices:\n", | |
| " raise ValueError(\"Belum ada trip terjadi, tidak bisa plotting.\")\n", | |
| "\n", | |
| "first_idx = ftl.FirstTripIndex - 1\n", | |
| "first_time = ftl.TripTime[first_idx]\n", | |
| "\n", | |
| "# Waktu relatif dari trip pertama\n", | |
| "rel_times = [ftl.TripTime[i] - first_time if ftl.TripTime[i] else 0.1 for i in range(8)]\n", | |
| "rel_times = [max(0.1, t) for t in rel_times] # minimal 0.1s agar terlihat\n", | |
| "\n", | |
| "channels = list(range(1, 9))\n", | |
| "y_pos = range(len(channels))\n", | |
| "\n", | |
| "fig, ax = plt.subplots(figsize=(12, 6))\n", | |
| "colors = sns.color_palette(\"Spectral\", n_colors=8)\n", | |
| "colors[first_idx] = 'red'\n", | |
| "\n", | |
| "# Plot bar per channel\n", | |
| "for i in range(8):\n", | |
| " edge_c = 'darkred' if i == first_idx else 'navy'\n", | |
| " lw = 1.8 if i == first_idx else 1.0\n", | |
| " ax.barh(i, rel_times[i], color=colors[i], alpha=0.9, edgecolor=edge_c, linewidth=lw)\n", | |
| "\n", | |
| "# Anotasi First Trip (lebih ringan dan proporsional)\n", | |
| "ax.annotate(\n", | |
| " f'First Trip (Ch {ftl.FirstTripIndex})',\n", | |
| " xy=(rel_times[first_idx] + 0.4, first_idx),\n", | |
| " xytext=(rel_times[first_idx] + 1.2, first_idx + 0.05),\n", | |
| " arrowprops=dict(facecolor='black', shrink=0.05, width=1.5, headwidth=6),\n", | |
| " fontsize=9, ha='left', color='red', weight='normal'\n", | |
| ")\n", | |
| "\n", | |
| "# Label HH:MM:SS asli di ujung bar\n", | |
| "for i in range(8):\n", | |
| " if ftl.TripTime[i]:\n", | |
| " label = datetime.fromtimestamp(ftl.TripTime[i]).strftime('%H:%M:%S')\n", | |
| " ax.text(rel_times[i] + 0.05, i, label, va='center', ha='left', fontsize=8.5)\n", | |
| "\n", | |
| "# Styling sumbu dan judul\n", | |
| "ax.set_yticks(y_pos)\n", | |
| "ax.set_yticklabels(channels, fontsize=9)\n", | |
| "ax.set_xlabel('Detik dari Trip Pertama', fontsize=9.5)\n", | |
| "ax.set_title(f'Timeline Trip per Channel (First Trip: Ch {ftl.FirstTripIndex})',\n", | |
| " fontsize=10.5, weight='medium')\n", | |
| "ax.invert_yaxis()\n", | |
| "ax.grid(axis='x', linestyle='--', alpha=0.45, color='gray')\n", | |
| "ax.set_xlim(0, max(rel_times) + 1)\n", | |
| "\n", | |
| "# Legend per channel\n", | |
| "legend_elements = [\n", | |
| " Line2D([0], [0], color=colors[i], lw=3, label=f'Ch {ch}')\n", | |
| " for i, ch in enumerate(channels)\n", | |
| "]\n", | |
| "ax.legend(handles=legend_elements, loc='upper right', fontsize=8.5,\n", | |
| " fancybox=True, shadow=True)\n", | |
| "\n", | |
| "plt.tight_layout()\n", | |
| "\n", | |
| "# Simpan file\n", | |
| "plt.savefig(\"Trip_Timeline.svg\", format='svg')\n", | |
| "plt.savefig(\"Trip_Timeline.png\", format='png')\n", | |
| "plt.show()\n" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.13.3" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 5 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment