Modifiche
This commit is contained in:
parent
15f0d7c510
commit
97f4c9e975
|
|
@ -4,6 +4,7 @@ sidebar_position: 0
|
||||||
title: Architettura ScadaInterface
|
title: Architettura ScadaInterface
|
||||||
sidebar_label: Scada Interface
|
sidebar_label: Scada Interface
|
||||||
pagination_prev: null
|
pagination_prev: null
|
||||||
|
hide_table_of_contents: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# 🛠️ Architettura ScadaInterface
|
# 🛠️ Architettura ScadaInterface
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ sidebar_position: 1
|
||||||
title: Sotto Struttura ScadaInterface
|
title: Sotto Struttura ScadaInterface
|
||||||
sidebar_label: Scada Interface Sotto Strutture
|
sidebar_label: Scada Interface Sotto Strutture
|
||||||
pagination_prev: null
|
pagination_prev: null
|
||||||
|
hide_table_of_contents: true
|
||||||
---
|
---
|
||||||
|
|
||||||
## Sotto-Strutture di `ScadaInterface`
|
## Sotto-Strutture di `ScadaInterface`
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ sidebar_position: 2
|
||||||
title: Statistiche Allarmi
|
title: Statistiche Allarmi
|
||||||
sidebar_label: Scada Interface Allarmi Statistiche
|
sidebar_label: Scada Interface Allarmi Statistiche
|
||||||
pagination_prev: null
|
pagination_prev: null
|
||||||
|
hide_table_of_contents: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# Strutture per le Statistiche degli Allarmi
|
# Strutture per le Statistiche degli Allarmi
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ sidebar_position: 3
|
||||||
title: Statistiche Flowpack
|
title: Statistiche Flowpack
|
||||||
sidebar_label: Scada Interface Flowpack Statistiche
|
sidebar_label: Scada Interface Flowpack Statistiche
|
||||||
pagination_prev: null
|
pagination_prev: null
|
||||||
|
hide_table_of_contents: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# Strutture per le Statistiche della Flowpack
|
# Strutture per le Statistiche della Flowpack
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ sidebar_position: 4
|
||||||
title: Statistiche Row Distribution
|
title: Statistiche Row Distribution
|
||||||
sidebar_label: Scada Interface RowDistribution Statistiche
|
sidebar_label: Scada Interface RowDistribution Statistiche
|
||||||
pagination_prev: null
|
pagination_prev: null
|
||||||
|
hide_table_of_contents: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# Strutture per le Statistiche di Produzione
|
# Strutture per le Statistiche di Produzione
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ sidebar_position: 5
|
||||||
title: Flusso di Scambio Dati (PLC-HMI-SCADA)
|
title: Flusso di Scambio Dati (PLC-HMI-SCADA)
|
||||||
sidebar_label: Flusso di Comunicazione
|
sidebar_label: Flusso di Comunicazione
|
||||||
pagination_prev: null
|
pagination_prev: null
|
||||||
|
hide_table_of_contents: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# Flusso di Scambio Dati (PLC-HMI-SCADA)
|
# Flusso di Scambio Dati (PLC-HMI-SCADA)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
@ -2,82 +2,50 @@ import { themes as prismThemes } from "prism-react-renderer";
|
||||||
import type { Config } from "@docusaurus/types";
|
import type { Config } from "@docusaurus/types";
|
||||||
import type * as Preset from "@docusaurus/preset-classic";
|
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 = {
|
const config: Config = {
|
||||||
title: "TP-Docs",
|
title: "TP-Docs",
|
||||||
tagline: "Your Source of Truth for Engineering Docs",
|
tagline: "Your Source of Truth for Engineering Docs",
|
||||||
favicon: "img/favicon.png",
|
favicon: "img/favicon.png",
|
||||||
|
|
||||||
// Future flags, see https://docusaurus.io/docs/api/docusaurus-config#future
|
future: { v4: true },
|
||||||
future: {
|
|
||||||
v4: true, // Improve compatibility with the upcoming Docusaurus v4
|
|
||||||
},
|
|
||||||
|
|
||||||
// Set the production url of your site here
|
url: "https://docs.dffm.it",
|
||||||
url: 'https://docs.dffm.it',
|
baseUrl: "/",
|
||||||
baseUrl: '/',
|
|
||||||
|
|
||||||
// GitHub pages deployment config.
|
organizationName: "marco.costalunga",
|
||||||
// If you aren't using GitHub pages, you don't need these.
|
projectName: "tp-docs",
|
||||||
organizationName: "marco.costalunga", // Usually your GitHub org/user name.
|
|
||||||
projectName: "tp-docs", // Usually your repo name.
|
|
||||||
|
|
||||||
onBrokenLinks: "throw",
|
onBrokenLinks: "throw",
|
||||||
onBrokenMarkdownLinks: "warn",
|
onBrokenMarkdownLinks: "warn",
|
||||||
|
|
||||||
// Even if you don't use internationalization, you can use this field to set
|
i18n: { defaultLocale: "it", locales: ["it"] },
|
||||||
// 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"],
|
|
||||||
},
|
|
||||||
|
|
||||||
presets: [
|
presets: [
|
||||||
[
|
[
|
||||||
"classic",
|
"classic",
|
||||||
{
|
{
|
||||||
theme: {
|
theme: { customCss: "./src/css/custom.css" },
|
||||||
customCss: "./src/css/custom.css",
|
|
||||||
},
|
|
||||||
|
|
||||||
docs: {
|
docs: {
|
||||||
sidebarPath: "./sidebars.ts",
|
sidebarPath: "./sidebars.ts",
|
||||||
// Please change this to your repo.
|
editUrl: "https://gitlab.dffm.it/giuseppe/docs/-/edit/main/",
|
||||||
// Remove this to remove the "edit this page" links.
|
|
||||||
editUrl:
|
|
||||||
"https://gitlab.dffm.it/giuseppe/docs/-/edit/main/",
|
|
||||||
},
|
},
|
||||||
blog: {
|
blog: {
|
||||||
showReadingTime: true,
|
showReadingTime: true,
|
||||||
feedOptions: {
|
feedOptions: { type: ["rss", "atom"], xslt: true },
|
||||||
type: ['rss', 'atom'],
|
editUrl: "https://gitlab.dffm.it/giuseppe/docs/-/edit/main/",
|
||||||
xslt: true,
|
onInlineTags: "warn",
|
||||||
},
|
onInlineAuthors: "warn",
|
||||||
// Please change this to your repo.
|
onUntruncatedBlogPosts: "warn",
|
||||||
// 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",
|
|
||||||
},
|
},
|
||||||
} satisfies Preset.Options,
|
} satisfies Preset.Options,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
themes: [
|
themes: [
|
||||||
|
"@docusaurus/theme-mermaid", // ✅ aggiunta qui
|
||||||
[
|
[
|
||||||
require.resolve("@easyops-cn/docusaurus-search-local"),
|
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",
|
"@docusaurus/plugin-pwa",
|
||||||
{
|
{
|
||||||
debug: true,
|
debug: true,
|
||||||
offlineModeActivationStrategies: [
|
offlineModeActivationStrategies: ["appInstalled", "standalone", "queryString"],
|
||||||
"appInstalled",
|
|
||||||
"standalone",
|
|
||||||
"queryString",
|
|
||||||
],
|
|
||||||
pwaHead: [
|
pwaHead: [
|
||||||
{
|
{ tagName: "link", rel: "icon", href: "/img/favicon.png" },
|
||||||
tagName: "link",
|
{ tagName: "link", rel: "manifest", href: "/manifest.json" },
|
||||||
rel: "icon",
|
{ tagName: "meta", name: "theme-color", content: "rgb(37, 194, 160)" },
|
||||||
href: "/img/favicon.png",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
tagName: "link",
|
|
||||||
rel: "manifest",
|
|
||||||
href: "/manifest.json", // your PWA manifest
|
|
||||||
},
|
|
||||||
{
|
|
||||||
tagName: "meta",
|
|
||||||
name: "theme-color",
|
|
||||||
content: "rgb(37, 194, 160)",
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
|
markdown: { mermaid: true }, // ✅ abilita parsing mermaid nei .md/.mdx
|
||||||
|
|
||||||
themeConfig: {
|
themeConfig: {
|
||||||
// Replace with your project's social card
|
|
||||||
image: "img/docusaurus-social-card.jpg",
|
image: "img/docusaurus-social-card.jpg",
|
||||||
navbar: {
|
navbar: {
|
||||||
title: "TP-Docs",
|
title: "TP-Docs",
|
||||||
logo: {
|
logo: { alt: "My Site Logo", src: "img/favicon.png" },
|
||||||
alt: "My Site Logo",
|
|
||||||
src: "img/favicon.png",
|
|
||||||
},
|
|
||||||
items: [
|
items: [
|
||||||
{
|
{ type: "docSidebar", sidebarId: "docSidebar", position: "left", label: "Documentazione" },
|
||||||
type: "docSidebar",
|
{ to: "/blog", label: "Blog", position: "left" },
|
||||||
sidebarId: "docSidebar",
|
|
||||||
position: "left",
|
|
||||||
label: "Documentazione",
|
|
||||||
}, //,
|
|
||||||
{ to: '/blog', label: 'Blog', position: 'left' },
|
|
||||||
/*{
|
|
||||||
href: 'https://github.com/facebook/docusaurus',
|
|
||||||
label: 'GitHub',
|
|
||||||
position: 'right',
|
|
||||||
},*/
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
footer: {
|
footer: {
|
||||||
style: "dark",
|
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.`,
|
copyright: `Copyright © ${new Date().getFullYear()} Tecno Pack SPA. Built with Docusaurus.`,
|
||||||
},
|
},
|
||||||
prism: {
|
prism: {
|
||||||
theme: prismThemes.github,
|
theme: prismThemes.github,
|
||||||
darkTheme: prismThemes.vsDark,
|
darkTheme: prismThemes.vsDark,
|
||||||
additionalLanguages: ['yaml', 'csharp', 'iecst', 'bash']
|
additionalLanguages: ["yaml", "csharp", "iecst", "bash"],
|
||||||
},
|
},
|
||||||
} satisfies Preset.ThemeConfig,
|
} satisfies Preset.ThemeConfig,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -19,6 +19,7 @@
|
||||||
"@docusaurus/plugin-pwa": "^3.8.1",
|
"@docusaurus/plugin-pwa": "^3.8.1",
|
||||||
"@docusaurus/preset-classic": "^3.8.1",
|
"@docusaurus/preset-classic": "^3.8.1",
|
||||||
"@docusaurus/theme-classic": "^3.8.1",
|
"@docusaurus/theme-classic": "^3.8.1",
|
||||||
|
"@docusaurus/theme-mermaid": "^3.8.1",
|
||||||
"@easyops-cn/docusaurus-search-local": "^0.52.1",
|
"@easyops-cn/docusaurus-search-local": "^0.52.1",
|
||||||
"@mdx-js/react": "^3.0.0",
|
"@mdx-js/react": "^3.0.0",
|
||||||
"clsx": "^2.0.0",
|
"clsx": "^2.0.0",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue