From a5b6e6a0b0ae65b11dd2a3ab8b42e4bc19815990 Mon Sep 17 00:00:00 2001 From: DFFM-maker Date: Fri, 26 Dec 2025 13:01:45 +0100 Subject: [PATCH] postgress --- .../2212451a-6b27-48af-a2cb-ab12ad972ae9.txt | 310 ------------------ __pycache__/app.cpython-310.pyc | Bin 5273 -> 5454 bytes app.py | 2 +- 3 files changed, 1 insertion(+), 311 deletions(-) delete mode 100644 .files/332f3b7e-fd00-428b-b4d9-327130a0e2d8/2212451a-6b27-48af-a2cb-ab12ad972ae9.txt diff --git a/.files/332f3b7e-fd00-428b-b4d9-327130a0e2d8/2212451a-6b27-48af-a2cb-ab12ad972ae9.txt b/.files/332f3b7e-fd00-428b-b4d9-327130a0e2d8/2212451a-6b27-48af-a2cb-ab12ad972ae9.txt deleted file mode 100644 index 0c1ca348..00000000 --- a/.files/332f3b7e-fd00-428b-b4d9-327130a0e2d8/2212451a-6b27-48af-a2cb-ab12ad972ae9.txt +++ /dev/null @@ -1,310 +0,0 @@ -VAR Internal -Idecon FB_IDECON_Client False False -Enable BOOL True False False -MsgFilter UINT 17 False False -fbTcpConnect SktTCPConnect False False -fbSocketSend SktTCPSend False False -fbSocketRcv SktTCPRcv False False -fbClose SktClose False False -Config _sSOCKET_ADDRESS (PortNo := 50000, IpAdr := '172.16.224.200') False False -SocketID_Int _sSOCKET False False -tmpIpAddress STRING[256] False False -tmpPort UINT False False -Connected BOOL False False -bConnectDone BOOL False False -bConnectBusy BOOL False False -bConnectError BOOL False False -wConnectErrorID WORD False False -bSendDone BOOL False False -bSendBusy BOOL False False -bSendError BOOL False False -wSendErrorID WORD False False -bRcvDone BOOL False False -bRcvBusy BOOL False False -bRcvError BOOL False False -wRcvErrorID WORD False False -RxChunk ARRAY[0..511] OF BYTE False False -RxChunkLen UINT False False -RxChunkValid BOOL False False -RcvTimeout UINT 50 False False -TxConsumed BOOL False False -prevTxOutValid BOOL False False -sendTrigger BOOL False False -Command STRING[255] False False -CommandTrigger BOOL False False -prevCommandTrigger BOOL False False -tonPollingSTATSV TON False False -tonPollingSTATP TON False False -prevPollSVQ BOOL False False -prevPollPQ BOOL False False -pollResetSV BOOL False False -pollResetP BOOL False False -prevLastMessage STRING[512] False False -newMsg BOOL False False -newWeightMsg BOOL False False -prevWeightMsg BOOL False False -totalRejected DINT False False -TxChunk ARRAY[0..511] OF BYTE False False -TxChunkLen UINT False False -iTx UINT False False -TxBuffer ARRAY[0..511] OF BYTE False False -tmpWeightData Idecon_WeightData False False -tmpStatPData Idecon_StatPData False False -rTrigRcv R_TRIG False False -bExecuteRcv BOOL False False -iRcvState INT False False - -END VAR - -VAR External -G_Idecon_Config False -G_System_Error False -G_ProgressiveID False -G_OPCUA_Idecon False -G_Idecon_StatP False -G_Idecon_LastWeight False -G_Idecon_LastSTATSV False -G_Idecon_WorkMode False -G_Idecon_BatchCode False -G_Idecon_ProductionOrder False -END VAR - -// ---------- Program ProcessIdecon---------------// - - -IF NOT Enable THEN - Connected := FALSE; - RxChunkLen := 0; - RxChunkValid := FALSE; - TxConsumed := FALSE; - Command := ''; - CommandTrigger := FALSE; - prevCommandTrigger := FALSE; - prevTxOutValid := FALSE; - pollResetSV := FALSE; - pollResetP := FALSE; -END_IF; - -tmpIpAddress := Config.IpAdr; -tmpPort := Config.PortNo; - -fbTcpConnect( - Execute := (Enable AND NOT Connected), - DstAdr := tmpIpAddress, // Passiamo la variabile semplice (FIX per "Member of structure") - DstTcpPort := tmpPort, // Passiamo la variabile semplice - SrcTcpPort := 0, // (Opzionale) 0 = Assegnazione automatica porta locale - Socket => SocketID_Int, - Done => bConnectDone, - Busy => bConnectBusy, - Error => bConnectError, - ErrorID => wConnectErrorID -); -IF bConnectDone THEN - Connected := TRUE; -END_IF; - -IF bConnectError THEN - Connected := FALSE; -END_IF; - -// --------------------------------------------------------- -// MACCHINA A STATI "INFINITY LOOP" (Per lettura continua) -// --------------------------------------------------------- - -CASE iRcvState OF - 0: // STATO IDLE: Pronti a ricevere? - // Se siamo connessi e il blocco non è occupato o in errore... - IF Connected AND NOT bRcvBusy AND NOT bRcvError THEN - bExecuteRcv := TRUE; // ALZA IL FRONTE DI SALITA - iRcvState := 10; // Passa in attesa - END_IF; - - 10: // STATO WAIT: Aspetta i dati - IF bRcvDone THEN - // Dati ricevuti! Andiamo a resettare - iRcvState := 20; - ELSIF bRcvError OR NOT Connected THEN - // Se cade la connessione o c'è errore socket - iRcvState := 99; - END_IF; - - 20: // STATO RESET (FONDAMENTALE PER LEGGERE IL SUCCESSIVO) - bExecuteRcv := FALSE; // Abbassa Execute - - // Aspettiamo che il blocco confermi di essersi spento (Done deve tornare False) - // Senza questo check, il riarmo è troppo veloce e fallisce! - IF NOT bRcvDone AND NOT bRcvBusy THEN - iRcvState := 0; // Torna all'inizio per leggere il prossimo - END_IF; - - 99: // STATO ERRORE - bExecuteRcv := FALSE; - // Se l'errore sparisce o la connessione cade, resetta la macchina - IF NOT bRcvError THEN - iRcvState := 0; - END_IF; -END_CASE; - -// --- Chiamata al Blocco (Fuori dal CASE) --- -fbSocketRcv( - Execute := bExecuteRcv, - Socket := SocketID_Int, - TimeOut := 1, //RcvTimeout, // Assicurati sia basso (es. 10 o 50 ms) - Size := UINT#512, - RcvDat := RxChunk[0], - Done => bRcvDone, - Busy => bRcvBusy, - Error => bRcvError, - ErrorID => wRcvErrorID, - RcvSize => RxChunkLen -); - -rTrigRcv(CLK := bRcvDone); -RxChunkValid := rTrigRcv.Q AND (RxChunkLen > 0); - -// Gestione disconnessione su errore grave -IF bRcvError THEN - Connected := FALSE; - iRcvState := 99; -END_IF; - -tonPollingSTATSV(IN := (Enable AND Connected AND NOT pollResetSV), PT := T#2S); -tonPollingSTATP(IN := (Enable AND Connected AND NOT pollResetP), PT := T#5S); - -pollResetSV := FALSE; -pollResetP := FALSE; - -CommandTrigger := FALSE; -IF tonPollingSTATSV.Q AND NOT prevPollSVQ THEN - Command := 'STATSV'; - CommandTrigger := TRUE; - pollResetSV := TRUE; -ELSIF tonPollingSTATP.Q AND NOT prevPollPQ THEN - Command := 'STATREQ'; - CommandTrigger := TRUE; - pollResetP := TRUE; -END_IF; -prevPollSVQ := tonPollingSTATSV.Q; -prevPollPQ := tonPollingSTATP.Q; - -Idecon( - Enable := Enable, - MsgFilter := MsgFilter, - RxIn := RxChunk, - RxInLen := RxChunkLen, - RxInValid := RxChunkValid, - TxConsumed := TxConsumed, - Command := Command, - CommandTrigger := CommandTrigger -); -tmpWeightData := Idecon.Weight; -tmpStatPData := Idecon.StatP; -// Gestione Messaggi -newMsg := (Idecon.LastMessage <> prevLastMessage); -prevLastMessage := Idecon.LastMessage; - -newWeightMsg := newMsg AND IDECON_StartsWith(Idecon.LastMessage, 'WEIGHT='); - -IF newWeightMsg AND NOT prevWeightMsg THEN - G_ProgressiveID := G_ProgressiveID + 1; -END_IF; -prevWeightMsg := newWeightMsg; -G_Idecon_LastSTATSV := Idecon.LastSTATSV; - - -IF tmpWeightData.Valid THEN - G_Idecon_LastWeight.DateTimeText := tmpWeightData.DateTimeText; - G_Idecon_LastWeight.ProductionOrder := tmpWeightData.ProductionOrder; - G_Idecon_LastWeight.BatchCode := tmpWeightData.BatchCode; - G_Idecon_LastWeight.RecipeName := tmpWeightData.RecipeName; - G_Idecon_LastWeight.LineCode := tmpWeightData.LineCode; - G_Idecon_LastWeight.SerialNumber := tmpWeightData.SerialNumber; - G_Idecon_LastWeight.WeightMg := tmpWeightData.WeightMg; - G_Idecon_LastWeight.DeltaToNominalMg:= tmpWeightData.DeltaToNominalMg; - G_Idecon_LastWeight.Classification := tmpWeightData.Classification; - G_Idecon_LastWeight.Valid := TRUE; -END_IF; - -// --- E anche qui usiamo tmpStatPData --- -IF tmpStatPData.Valid THEN - G_Idecon_StatP.TotalProducts := tmpStatPData.TotalProducts; - G_Idecon_StatP.TotalAccepted := tmpStatPData.TotalAccepted; - G_Idecon_StatP.RejectedMinus := tmpStatPData.RejectedMinus; - G_Idecon_StatP.RejectedMinusMinus := tmpStatPData.RejectedMinusMinus; - G_Idecon_StatP.RejectedPlus := tmpStatPData.RejectedPlus; - G_Idecon_StatP.RejectedPlusPlus := tmpStatPData.RejectedPlusPlus; - G_Idecon_StatP.CannotBeWeighed := tmpStatPData.CannotBeWeighed; - G_Idecon_StatP.MetalCategory := tmpStatPData.MetalCategory; - G_Idecon_StatP.Valid := TRUE; -END_IF; - - -G_System_Error := bConnectError OR bSendError OR bRcvError OR Idecon.Error; - -IF G_Idecon_StatP.Valid AND (G_Idecon_StatP.TotalProducts >= G_Idecon_StatP.TotalAccepted) THEN - totalRejected := G_Idecon_StatP.TotalProducts - G_Idecon_StatP.TotalAccepted; -ELSE - totalRejected := 0; -END_IF; - -// OPC UA Mapping -G_OPCUA_Idecon.Connected := Connected; -G_OPCUA_Idecon.WorkMode := G_Idecon_WorkMode; -G_OPCUA_Idecon.LastSTATSV := G_Idecon_LastSTATSV; -G_OPCUA_Idecon.BatchCode := G_Idecon_BatchCode; -G_OPCUA_Idecon.ProductionOrder := G_Idecon_ProductionOrder; -G_OPCUA_Idecon.Error := G_System_Error; -G_OPCUA_Idecon.ErrorId := UINT_TO_UDINT(WORD_TO_UINT(wConnectErrorID)); - -G_OPCUA_Idecon.LastWeight.ProgressiveId := G_ProgressiveID; -G_OPCUA_Idecon.LastWeight.TimestampText := G_Idecon_LastWeight.DateTimeText; -G_OPCUA_Idecon.LastWeight.ProductionOrder := G_Idecon_LastWeight.ProductionOrder; -G_OPCUA_Idecon.LastWeight.BatchCode := G_Idecon_LastWeight.BatchCode; -G_OPCUA_Idecon.LastWeight.RecipeName := G_Idecon_LastWeight.RecipeName; -G_OPCUA_Idecon.LastWeight.LineCode := G_Idecon_LastWeight.LineCode; -G_OPCUA_Idecon.LastWeight.SerialNumber := G_Idecon_LastWeight.SerialNumber; -G_OPCUA_Idecon.LastWeight.Weight_g := DINT_TO_LREAL(G_Idecon_LastWeight.WeightMg) / LREAL#1000.0; -G_OPCUA_Idecon.LastWeight.Delta_g := DINT_TO_LREAL(G_Idecon_LastWeight.DeltaToNominalMg) / LREAL#1000.0; -G_OPCUA_Idecon.LastWeight.Classification := G_Idecon_LastWeight.Classification; -G_OPCUA_Idecon.LastWeight.Expelled := FALSE; -G_OPCUA_Idecon.LastWeight.Valid := G_Idecon_LastWeight.Valid; - -G_OPCUA_Idecon.Stats.TotalProducts := G_Idecon_StatP.TotalProducts; -G_OPCUA_Idecon.Stats.TotalAccepted := G_Idecon_StatP.TotalAccepted; -G_OPCUA_Idecon.Stats.TotalRejected := totalRejected; -G_OPCUA_Idecon.Stats.RejectedPlusPlus := G_Idecon_StatP.RejectedPlusPlus; -G_OPCUA_Idecon.Stats.CannotBeWeighed := G_Idecon_StatP.CannotBeWeighed; -G_OPCUA_Idecon.Stats.MetalCategory := G_Idecon_StatP.MetalCategory; -G_OPCUA_Idecon.Stats.Valid := G_Idecon_StatP.Valid; - -// Invio Socket -sendTrigger := (Idecon.TxOutValid AND NOT prevTxOutValid); -prevTxOutValid := Idecon.TxOutValid; - -IF sendTrigger THEN - // Copiamo i dati dall'output dell'FB al buffer LOCALE - // Questo evita l'errore "Member of function block instance variable" - TxBuffer := Idecon.TxOut; -END_IF; - -fbSocketSend( - Execute := (Enable AND Connected AND sendTrigger), - Socket := SocketID_Int, - SendDat := TxBuffer[0], // --- CORREZIONE 2: Usa buffer locale --- - Size := Idecon.TxOutLen, - Done => bSendDone, - Busy => bSendBusy, - Error => bSendError, - ErrorID => wSendErrorID -); - -TxConsumed := bSendDone; - -IF bSendError THEN - Connected := FALSE; -END_IF; - -fbClose( - Execute := (Enable AND NOT Connected), - Socket := SocketID_Int -); diff --git a/__pycache__/app.cpython-310.pyc b/__pycache__/app.cpython-310.pyc index cfd1d1221761653ccbd14e6978ae4d38f35e7e8e..5da320f8526c6ea47e6ede3c4cce8d16cc9411fd 100644 GIT binary patch delta 1499 zcmZ8hO>7%Q6!z?of7X8++i~hNah#+jvYjT-CQzjb#54&~u@V|5MJ$5t#xpnz>s@Dd zP3j1#NTdf22%(OxKx5NZ%x&bJ$&=c+xO*jj#C^dq9J*r;68N#xaYNxd{3gNJ(k~C3q(b z431$1$8iEDzm&8rPH8!u#_C~68^i-R!^b?%;v64`@F33f@f04yr}$XF1w72hVIsVL z8lT1^hoMi9Ho|A4coY|dSrH?t5h{-zJzRggjQnilYQ1JPcS*aqVt7W~=n;BwspGg_ zixPLwsv2(3ZgyG=v$I{7(1niSy88~r%THVu=I1V)pEXR~^$gE+>^sO8yVN>fMjHs_ z*cZY?c7iM5MmeNV0;Q1jnC96}!jEc_n`jCk4WP0kv4FDdu2_xdz!1P7`%TP`PVu>$ z;Q&jhC?O<}@>mkpza^25vz+wK%rg<(%}-ip+w}BZ)AbzMdjZ1391=WSLi8;AN;;4! z)Wk~i=W3age!Bm1-k0;EFG3LH6h2mXkSa<@;NgjXB$-x^AIftGO|q#-*I%)3^j7_`cUS^+0rqI&ycaa7vKF1w?7dezg3f1`XUYF1w zUErJ+*+lF{xC(TMeI1*uLTP^3=yZsU=}Tb02mmscK?h_(JcEj_U_~&{5`3V zOAOlF)%P$pY;TJ>%4_Hf`$4(2oZ#NR-0Bk7qi29i)Un7x>`h`doi>>+JwoGm5UoMB zn6GR%RyXy{jrwYXLS6iDKZ>uM%W|s4_xmAw+iji9uQYcJ54whW`|OW+0bM(eB)Vdy z4r{#5;UK%sJFWz|OSa>c-gCNqx9jkG8sH53HeIO{fd-|BzF=Z4{2^)bBd0512UW{L zASk`e9;F|IgVk&7fm%c}>@T%a3PJ^6vW+$gn$eH(7UyllMd6_}_R2t^{st^|6(HE* z7O-uA^8gnB<^awD>;RnXZLnPj7-ruLl*3CvtL&G7Np%%yaE4ca)mS()H9gL$FRhst z@uNG2OM>b)xv@M%b#McDDKs9J;jPU4IBbJH53t5Ti*_8-_H+~ba=_>!yO$ZCzXbo{ zO$QTw$8wqBAZ`rc|2-0Ff4%g8>@^ujpdi!Ci~IjQGrj8y5{l VQIy|xKp1oIY{&^wl2|WS`WJsrVrKvV delta 1339 zcmZux&2Jk;6!)yx>-E~+`Xf$aJ4B9Ck*2sYtXZ4yYO-gw+4S2QG*Me?X5M_RNJN{{S#=T&WP@!*AZak9qI?-t)fh{OH)U zShP~|xBJC@FrIs9&!JymF5l~CTpJrWi%p!v)+^mThx2X;7jW@;$}M9XpOa?=mvC90 zRb0VUc~0ReT$5)FPvaSRP803^44%dH=c#XyJ1cK>+`vtBYhct(Idj5B`{SR`0YYVw zO}DGFvJ!4euu%coNdKEv#ntrB9Vn6I0SW*`35iZmNt9$Bvmhppk?1{&2`h=VzT7T@ zlY$C(mbw3kcwqNp>Kz9I@{XW-6U~cn^*gI)oQs1X3}Wvj;4x)Smt;IQBot&pI$~`x zof%~vl%$7jAimFhw*(%OT>nbgqftb9F{FElnIFX~;=0j9&bV)^A=DDDvYpEpptOw2 zmY9t2QyOuSAaeFGyH8?|ghvG9AnNlg;;-xy+8n=YcG3KK`Nkh<2~L_pAxY-pkg%uh zvXog<{E&NMI3R9{nzgvR1|EigDtW_f9rPan0HsdewN$7VlP9sHv1i>~+yLuYdN}b} z@8nHe*TnDEF4_|-`4`2U^iDGUA>lDw5WnOb^(}Zfmsq#EJBQxk!Hu0RgA(LS|IBai zmZa$BACp0khQteb|73d3~g8oc|N zgi-Z2C#=QjfV3hSw~pyhHhTli9e@SVEOk0f5LJ2UL<_KMJd)F*jC~AxAl1;*WB2{8{KPy_G* zjsX-g+hT3%;KAANCwn`