Modifiche

This commit is contained in:
Giuseppe De Franceschi 2025-08-25 08:40:55 +02:00
parent 15f0d7c510
commit 97f4c9e975
11 changed files with 3855 additions and 1556 deletions

View File

@ -4,6 +4,7 @@ sidebar_position: 0
title: Architettura ScadaInterface
sidebar_label: Scada Interface
pagination_prev: null
hide_table_of_contents: true
---
# 🛠️ Architettura ScadaInterface

View File

@ -4,6 +4,7 @@ sidebar_position: 1
title: Sotto Struttura ScadaInterface
sidebar_label: Scada Interface Sotto Strutture
pagination_prev: null
hide_table_of_contents: true
---
## Sotto-Strutture di `ScadaInterface`

View File

@ -4,6 +4,7 @@ sidebar_position: 2
title: Statistiche Allarmi
sidebar_label: Scada Interface Allarmi Statistiche
pagination_prev: null
hide_table_of_contents: true
---
# Strutture per le Statistiche degli Allarmi

View File

@ -4,6 +4,7 @@ sidebar_position: 3
title: Statistiche Flowpack
sidebar_label: Scada Interface Flowpack Statistiche
pagination_prev: null
hide_table_of_contents: true
---
# Strutture per le Statistiche della Flowpack

View File

@ -4,6 +4,7 @@ sidebar_position: 4
title: Statistiche Row Distribution
sidebar_label: Scada Interface RowDistribution Statistiche
pagination_prev: null
hide_table_of_contents: true
---
# Strutture per le Statistiche di Produzione

View File

@ -4,6 +4,7 @@ sidebar_position: 5
title: Flusso di Scambio Dati (PLC-HMI-SCADA)
sidebar_label: Flusso di Comunicazione
pagination_prev: null
hide_table_of_contents: true
---
# Flusso di Scambio Dati (PLC-HMI-SCADA)

View File

@ -0,0 +1,98 @@
---
id: flusso-comunicazione
title: Flusso di Scambio Dati (PLC-HMI-SCADA)
sidebar_label: Flusso Comunicazione
hide_table_of_contents: true
sidebar_position: 6
---
# Flusso di Scambio Dati (PLC - HMI - SCADA)
Questo documento descrive il processo di scambio dati tra PLC, HMI e SCADA
per la gestione del **cambio ricetta** e del **meccanismo di heartbeat (watchdog)**.
---
## Sequence Diagram Cambio Ricetta e Heartbeat
```mermaid
sequenceDiagram
autonumber
participant HMI as HMI (Operatore)
participant PLC as PLC
participant SCADA as SCADA
Note over HMI: Operatore abilita controllo remoto
HMI->>PLC: RemoteControlEn = TRUE
Note over SCADA: Invio nuova produzione (indice ricetta, lotto, …)
SCADA->>PLC: ProductionChangeRequest = TRUE
PLC-->>SCADA: AckChangeRecipe = TRUE
SCADA-->>PLC: ProductionChangeRequest = FALSE
PLC-->>SCADA: AckChangeRecipe = FALSE
PLC-->>HMI: AckChangeRecipeToHMI = TRUE (apri pop-up)
alt Operatore ACCETTA
HMI->>PLC: RecipeChangeOk = TRUE
PLC->>PLC: Carica ricetta / aggiorna dati
PLC-->>SCADA: RecipeChangeOK = TRUE (2s)
else Operatore RIFIUTA (o chiude)
HMI->>PLC: RejectRecipeChange = TRUE (o CloseMESWindow)
PLC-->>SCADA: RecipeChangeReject = TRUE (2s)
else Operatore POSTICIPA
HMI->>PLC: BatchChangePopupDismiss = TRUE
PLC->>PLC: Avvia timer 30s
PLC-->>SCADA: RecipeChangePostpone = TRUE
PLC-->>HMI: (allo scadere 30s) ri-apri pop-up
end
par Heartbeat / Watchdog
loop ogni 1s
PLC-->>SCADA: PlcHeartbeat_Toggle (inverti bit)
SCADA-->>PLC: ScadaHeartbeat_Echo = PlcHeartbeat_Toggle
end
PLC->>PLC: Se mismatch > 3s ⇒ MesCommunicationFault = TRUE
end
```
---
## State Diagram Macchina a stati (S60_RecipeManagement)
```mermaid
stateDiagram-v2
[*] --> Idle
Idle --> Handshake_In: ProductionChangeRequest ↑
Handshake_In --> Wait_Request_Low: AckChangeRecipe = TRUE
Wait_Request_Low --> Popup_To_HMI: ProductionChangeRequest = FALSE, AckChangeRecipe = FALSE
Popup_To_HMI --> Wait_Operator: AckChangeRecipeToHMI = TRUE
state Wait_Operator {
[*] --> AwaitChoice
AwaitChoice --> ApplyRecipe: RecipeChangeOk = TRUE
AwaitChoice --> RejectRecipe: RejectRecipeChange = TRUE
AwaitChoice --> Postpone: BatchChangePopupDismiss = TRUE
ApplyRecipe --> ReportOK: (carica/aggiorna dati)
ReportOK --> [*]
RejectRecipe --> ReportReject
ReportReject --> [*]
Postpone --> Timer30s
Timer30s --> Popup_To_HMI: allo scadere 30s (riapri pop-up)
}
note right of ReportOK
Egress.RecipeChangeOK = TRUE (2s)
end note
note right of ReportReject
Egress.RecipeChangeReject = TRUE (2s)
end note
```

View File

@ -2,82 +2,50 @@ import { themes as prismThemes } from "prism-react-renderer";
import type { Config } from "@docusaurus/types";
import type * as Preset from "@docusaurus/preset-classic";
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
const config: Config = {
title: "TP-Docs",
tagline: "Your Source of Truth for Engineering Docs",
favicon: "img/favicon.png",
// Future flags, see https://docusaurus.io/docs/api/docusaurus-config#future
future: {
v4: true, // Improve compatibility with the upcoming Docusaurus v4
},
future: { v4: true },
// Set the production url of your site here
url: 'https://docs.dffm.it',
baseUrl: '/',
url: "https://docs.dffm.it",
baseUrl: "/",
// GitHub pages deployment config.
// If you aren't using GitHub pages, you don't need these.
organizationName: "marco.costalunga", // Usually your GitHub org/user name.
projectName: "tp-docs", // Usually your repo name.
organizationName: "marco.costalunga",
projectName: "tp-docs",
onBrokenLinks: "throw",
onBrokenMarkdownLinks: "warn",
// Even if you don't use internationalization, you can use this field to set
// useful metadata like html lang. For example, if your site is Chinese, you
// may want to replace "en" with "zh-Hans".
i18n: {
defaultLocale: "it",
locales: ["it"],
},
i18n: { defaultLocale: "it", locales: ["it"] },
presets: [
[
"classic",
{
theme: {
customCss: "./src/css/custom.css",
},
theme: { customCss: "./src/css/custom.css" },
docs: {
sidebarPath: "./sidebars.ts",
// Please change this to your repo.
// Remove this to remove the "edit this page" links.
editUrl:
"https://gitlab.dffm.it/giuseppe/docs/-/edit/main/",
editUrl: "https://gitlab.dffm.it/giuseppe/docs/-/edit/main/",
},
blog: {
showReadingTime: true,
feedOptions: {
type: ['rss', 'atom'],
xslt: true,
},
// Please change this to your repo.
// Remove this to remove the "edit this page" links.
editUrl:
"https://gitlab.dffm.it/giuseppe/docs/-/edit/main/",
// Useful options to enforce blogging best practices
onInlineTags: 'warn',
onInlineAuthors: 'warn',
onUntruncatedBlogPosts: 'warn',
},
theme: {
customCss: "./src/css/custom.css",
feedOptions: { type: ["rss", "atom"], xslt: true },
editUrl: "https://gitlab.dffm.it/giuseppe/docs/-/edit/main/",
onInlineTags: "warn",
onInlineAuthors: "warn",
onUntruncatedBlogPosts: "warn",
},
} satisfies Preset.Options,
],
],
themes: [
"@docusaurus/theme-mermaid", // ✅ aggiunta qui
[
require.resolve("@easyops-cn/docusaurus-search-local"),
{
hashed: true,
language: ["it"],
},
{ hashed: true, language: ["it"] },
],
],
@ -86,105 +54,36 @@ const config: Config = {
"@docusaurus/plugin-pwa",
{
debug: true,
offlineModeActivationStrategies: [
"appInstalled",
"standalone",
"queryString",
],
offlineModeActivationStrategies: ["appInstalled", "standalone", "queryString"],
pwaHead: [
{
tagName: "link",
rel: "icon",
href: "/img/favicon.png",
},
{
tagName: "link",
rel: "manifest",
href: "/manifest.json", // your PWA manifest
},
{
tagName: "meta",
name: "theme-color",
content: "rgb(37, 194, 160)",
},
{ tagName: "link", rel: "icon", href: "/img/favicon.png" },
{ tagName: "link", rel: "manifest", href: "/manifest.json" },
{ tagName: "meta", name: "theme-color", content: "rgb(37, 194, 160)" },
],
},
],
],
markdown: { mermaid: true }, // ✅ abilita parsing mermaid nei .md/.mdx
themeConfig: {
// Replace with your project's social card
image: "img/docusaurus-social-card.jpg",
navbar: {
title: "TP-Docs",
logo: {
alt: "My Site Logo",
src: "img/favicon.png",
},
logo: { alt: "My Site Logo", src: "img/favicon.png" },
items: [
{
type: "docSidebar",
sidebarId: "docSidebar",
position: "left",
label: "Documentazione",
}, //,
{ to: '/blog', label: 'Blog', position: 'left' },
/*{
href: 'https://github.com/facebook/docusaurus',
label: 'GitHub',
position: 'right',
},*/
{ type: "docSidebar", sidebarId: "docSidebar", position: "left", label: "Documentazione" },
{ to: "/blog", label: "Blog", position: "left" },
],
},
footer: {
style: "dark",
links: [
/*{
title: 'Docs',
items: [
{
label: 'Tutorial',
to: '/docs/intro',
},
],
},
{
title: 'Community',
items: [
{
label: 'Stack Overflow',
href: 'https://stackoverflow.com/questions/tagged/docusaurus',
},
{
label: 'Discord',
href: 'https://discordapp.com/invite/docusaurus',
},
{
label: 'X',
href: 'https://x.com/docusaurus',
},
],
},
{
title: 'More',
items: [
{
label: 'Blog',
to: '/blog',
},
{
label: 'GitHub',
href: 'https://github.com/facebook/docusaurus',
},
],
},*/
],
copyright: `Copyright © ${new Date().getFullYear()} Tecno Pack SPA. Built with Docusaurus.`,
},
prism: {
theme: prismThemes.github,
darkTheme: prismThemes.vsDark,
additionalLanguages: ['yaml', 'csharp', 'iecst', 'bash']
additionalLanguages: ["yaml", "csharp", "iecst", "bash"],
},
} satisfies Preset.ThemeConfig,
};

1326
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -19,6 +19,7 @@
"@docusaurus/plugin-pwa": "^3.8.1",
"@docusaurus/preset-classic": "^3.8.1",
"@docusaurus/theme-classic": "^3.8.1",
"@docusaurus/theme-mermaid": "^3.8.1",
"@easyops-cn/docusaurus-search-local": "^0.52.1",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",

3829
yarn.lock

File diff suppressed because it is too large Load Diff