Il Bar dell'Ingegneria

Posts written by TDoes

  1. .
    Solitamente il costruttore di uno strumento dovrebbe indicare il consumo di aria compressa, dato utile e necessario sia per l'installatore che l'utilizzatore.
    Comunque mi pare tra i dati manchino tutte le misure delle tubazioni coinvolte (o ugelli se ci sono delle valvole); questi dati (accompagnati - nel caso di valvole - dalle portate misurate dal costruttore della valvola a vari valori di pressione) dovrebbero condurre alla risoluzione del problema.
    Perché si trovano tabelle che indicano le portate dei tubi di aria compressa in funzione del diametro, la lunghezza e la pressione.
    Per la mia scarsa esperienza nel settore il problema si risolve così.
  2. .
    Giusto così per dire: ma califfo, presumo con AddStyle aggiunga uno stile di Word... magari lo fa a livello globale di installazione di Word e non locale solo sul file? Per cui c'è già uno stile globale e non ne può creare uno uguale... magari è cambiata la politica di gestione degli stili in Word con qualche ultimo aggiornamento MS...
    Magari uno potrebbe guardare gli stili globali di Word...
  3. .
    CITAZIONE (wapi51 @ 13/11/2022, 17:16) 
    [...]

    È pubblica invece la relazione della Commissione Ministeriale da cui, in aggiunta, emergono altri dubbi sui contrappesi e relativi finecorsa anche se non è chiara l'origine e l'eventuale impatto sul disastro
    https://digifema.mit.gov.it/pubblicata-la-...23-maggio-2021/

    Premetto che non ho letto il documento linkato da Wapi...

    Comunque se non ricordo male: presumibilmente i forchettoni sono stati esclusi perché il sistema di frenata di emergenza si inseriva a sproposito...
    Quindi se non ho capito male: allorquando la cabina viene frenata dall'emergenza, i contrappesi si muovono, ma se i finecorsa sono inefficaci e non arrestano l'argano motore, la fune traente viene sottoposta ad una "extra trazione", finché forse il motore non viene fermato dal circuito elettrico salvamotore o qualche altra sicurezza... secondo me questo incrementa la fatica nel punto critico dell'attacco alla testa fusa...
    Sbaglio?
  4. .
    Mi ero chiesto la funzione della donna che legge, perché di solito non ci sono orpelli nei rebus... ma ora che per caso rivedo la vignetta, mi sorge il dubbio: che la prima parola si possa desumere da due diverse interpretazioni della vignetta? Può essere?
  5. .
    Ho provato ad implementare un po' di codice inerente al topic, traducendo parte del codice di afazio in PowerShell; l'unico effettivo vantaggio è che crea un file bitmap (anche se un po' troppo piccolo).
    Se lo volete provare (fatti salvi i dubbi che ho messo nel commento) mi raccomando aggiustate la cartella dove salverà il file.
    (nota: ho già scritto nel codice presente qui, come abilitare l'esecuzione di script powershell in windows).

    (nota2: ho corretto il codice postato perché avevo messo quello col bug, su cui sono impazzito da sabato...
    CODICE
    <#
    Ho preso il codice di afazio da https://bar-ingegneria.forumfree.it/?t=79336104&st=15#entry660882152

    ho modificato leggermente il codice perché non mi tornava il risultato...

    ci sono alcuni problemi:
    1) funziona solo per carichi rettangolari...
    2) il risultato è validato solo ad occhio confrontandolo con https://bar-ingegneria.forumfree.it/?t=79336104&st=15#entry660878737
    3) non ho ancora ben capito come fare funzioni in PowerShell che ritornino un valore, quindi ho usato un trucchetto letto su internet
       per cui a funzione non dà un return e uso una variabile globale per memorizzare il valore di return.

    Quindi, per quanto esposto sopra, il codice deve essere sottoposto a revisione critica per la verifica effettiva del funzionamento.

    #>

    cls
    [System.Double]$script:dReturn = 0; #variabile globale dello script
    function sigmaZ_q_trap {
       # definisco parametri
       param(
           [Double]$x,
           [Double]$z,
           [Double]$xi,
           [Double]$xf,
           [Double]$qi,
           [Double]$qf,
           [Double]$zo
           )
       # inizio funzione
       [System.Double] $alFa;
       [System.Double] $bEta1;
       [System.Double] $betA2;
       #[Math]::PI
       if($z -gt $zo) {
           $bEta1 = [Math]::Atan(($x-$xf)/($z-$zo));
           $betA2 = [Math]::Atan(($x-$xi)/($z-$zo));
           $alFa =  $betA2 - $bEta1;
           #parte rettangolare
           $script:dReturn = ($qi * ($alFa + [Math]::Sin($alFa) * [Math]::Cos($alFa + 2 * $bEta1)) / [Math]::PI)
           Return $null
           #parte triangolare
           #$script:dReturn = (($qf - $qi) * (($x - $xi) * $alFa / ($xf - $xi) - 0.5 * [Math]::Sin(2 * $bEta1)) / [Math]::PI)
           #Return $null
           }
       else {
           #vedere meglio cosa accade quando siamo in scavo
           $script:dReturn = (0)
           Return $null
           }
       }
    [System.Double] $xiCoord = 10;
    [System.Double] $xfCoord = 20;
    [System.Double] $qIni = 200;
    [System.Double] $qFin = 200;
    [System.Double] $zetao = 0;
    [System.Double] $dCalc = 0;

    #sigmaZ_q_trap -x (0) -z (1/4) -xi $xiCoord -xf $xfCoord -qi $qIni -qf $qFin -zo $zetao > $null
    #$script:dReturn

    #<#
    [System.String] $ImageFilePath = "C:\Users\Administrator\Pictures\";
    $null=[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
    $bmp = New-Object System.Drawing.Bitmap(120, 120)

    for ([System.Double]$i = 1; $i -le (120); $i++)
    {
      for ([System.Double]$j = 1; $j -le 120; $j++)
      {
           sigmaZ_q_trap -x ($i/4) -z ($j/4) -xi $xiCoord -xf $xfCoord -qi $qIni -qf $qFin -zo $zetao > $null
           #$script:dReturn
           #[System.Int16]($script:dReturn/(($qIni,$qFin| Measure -Max).Maximum)*255) # normalizzo in
           $bmp.SetPixel($i-1, $j-1, [System.Drawing.Color]::FromArgb(255, [System.Int16](255-($script:dReturn/($qIni,$qFin| Measure -Max).Maximum)*255),0))
           #$bmp.SetPixel($i+($xiCoord*4)-1, $j-1, [System.Drawing.Color]::FromArgb(255, [System.Int16]($script:dReturn),0))
       }
    }
    $bmp.Save($ImageFilePath + "carico.bmp")
    #$bmp.Save($ImageFilePath + "bmp.jpeg", [System.Drawing.Imaging.ImageFormat]::Jpeg);#posso convertire in JPEG
    $bmp.Dispose(); #Rilascia tutte le risorse usate da questa classe Image.
    ii ($ImageFilePath + "carico.bmp")
    #>


    Edited by TDoes - 16/10/2022, 16:15
  6. .
    Un po' come avevo previsto il mio script funziona anche sul file di Afazio...
    Lo scoglio principale è che bisogna bypassare il filtro dell'OpenDialog che non mostra i file *.xlsm, sapete come fare vero? Basta digitare *.* (o meglio *.xlsm) seguito da INVIO nel campo 'Nome file:' ovvero nel campo dove dovrebbe apparire il nome del file da aprire...

    Una considerazione generale: perché usare un PowerShell script, dove si può usare un VBScript integrato nel file Excel? Non ha molto senso infatti.

    Però se pensate di dover interagire con altri files esterni ad Excel, ad esempio nel mio caso sono dati contenuti in uno o più DB SQL, vi assicuro che diventa più pratico, perché infinitamente più flessibile che utilizzare i tools di importazione dati di Excel.
    Immaginate poi di dover inviare il file così elaborato via mail, altra cosa facilmente fattibile con PowerShell...
    Poi più in generale con PowerShell potete fare tutto ciò che fate col vostro PC.
    Infine un PowerShell script può essere invocato all'interno di uno scheduled task (un'attività pianificata) di Windows...
    Combinate tutto quello che vi ho detto e chiaramente potete capire che una macro o uno script in Excel al confronto sono molto limitati!

    Edited by TDoes - 8/10/2022, 17:42
  7. .
    Diciamo che in pratica il mio codice e quello di afazio sono quasi identici, perché il "core" del mio, come quello di afazio, si basa su due foreach nested uno nell'altro. Io ho aggiunto un filtro che salta le celle con fondo trasparente.
    Tutto il resto del mio codice non è strettamente necessario, però l'ho messo per farvi intuire le potenzialità del powershell.
  8. .
    Questo è il foglio excel che va in tandem col mio codice.
    Voi potete modificare i colori nel range Area e nel range IndiceColori. In teoria si possono modificare anche le dimensioni dei range stessi, il codice dovrebbe continuare a funzionare.
    Lo script richiede di selezionare il file excel che allego quì, oppure un qualunque excel che abbia i due ranges sopracitati (almeno in teoria!), l'unica cosa che non funzionerà sono i totali: perché vengono scritti in celle non dinamiche ...
  9. .
    Allora ho preso spunto da quello che ha pubblicato Afazio e ho provato a fare il mio programmino script PowerShell per Excel.
    Potrebbe addirittura funzionare sul foglio di Afazio stesso (se si leva il VBScript...), ma finchè Afazio non mette il suo file excel, non posso dirlo con esattezza, quindi metterò i miei files per le vostre prove...
    Io non sono molto preciso, ma penso che basti leggere il codice per capire cosa fa e come... a me funziona tutto, ma non dubito che si possa migliorare è solo per dimostrazione...
    Per farlo girare serve un sistema Windows con Excel installato sopra... come fare a lanciare lo script è descritto all'inizio del codice.
    Poi allegherò anche un file excel, con due definizioni di Range simili a quelle che penso abbia usato Afazio, che sono necessarie per il mio script.
    CODICE
    #############################################################
    ## CONTEGGIO CELLE COLORATE DI UN FOGLIO EXCEL
    #############################################################
    ## Da un'idea di Afazio, ma declinata a modo mio
    #############################################################
    ## 08.ott.2022 - Versione A.00 -  by Tdoes
    #############################################################
    ## v. https://bar-ingegneria.forumfree.it/?t=79336104
    #############################################################

    # PER FAR GIRARE LO SCRIPT BISOGNA:
    # 1. Aprire il programma "Windows PowerShell ISE"
    # 2. nel prompt inferiore posizionarsi nella cartella che contiene lo script, usando il comando:
    #                
    #                cd "nome_percorso_della_cartella_che_contiene_lo_script"
    #                
    # 3. una volta che il prompt è divenuto: PS nome_percorso_della_cartella_che_contiene_lo_script>
    # 4. lanciare il comando:
    #
    #                powershell.exe .\ContaCelleColorate.ps1
    #
    # 5. Nota bene: bisogna avere le autorizzazioni per l'esecuzione di script powershell ps1.
    #       Set-ExecutionPolicy Unrestricted
    # 6. Consultare https://www.robadainformatici.it/abilitare-esecuzione-script-powershell/ per delucidazioni sul comando precedente
    #    Attenzione: il comando "Unrestricted" potrebbe rendere il tuo PC vulnerabile
    #############################################################
    #A.00: prima versione
    #
    #
    ##############################################################à
    $debug = $true; # modalità di debug 'manuale'
    # puliamo la console
    Start-Sleep -Milliseconds 150; # ms
    cls
    #
    if($debug) {"STEP 001 : avvio script"}
    # avvisiamo l'utente
    if($debug) {"STEP 002 : preparo e visualizzo il MessageBox (non sempre è in primo piano!)"}
    Add-Type -AssemblyName PresentationCore,PresentationFramework
    Start-Sleep -Milliseconds 150; # ms
    $Result = [System.Windows.MessageBox]::Show("Vuoi selezionare il file Excel che contiene le celle colorate da contare?","ContaCelleColorate",[System.Windows.MessageBoxButton]::YesNoCancel,'Question')
    if($debug) {"STEP 003 : hai risposto " + $Result + " al MessageBox"}
    if($Result -ne "Yes") {
       if($debug) {"STEP 004A: lo script è terminato."}
       Return #termino lo script
       }
    if($debug) {"STEP 004B: lo script prosegue..."}
    # Vediamo di aprire il dialogo per selezionare il file excel dalla cartella documenti:
    Add-Type -AssemblyName System.Windows.Forms
    $FileBrowser = New-Object System.Windows.Forms.OpenFileDialog -Property @{
       InitialDirectory = [Environment]::GetFolderPath('MyDocuments')
       Filter = 'Excel Worksheets 2007(*.xlsx)|*.xlsx|Excel Worksheets 2003(*.xls)|*.xls'
       }
    $DialogExitStatus = $FileBrowser.ShowDialog()
    if($DialogExitStatus  -ne "Cancel") {
       if($debug) {"STEP 005 : Hai scelto di aprire: " + $FileBrowser.FileName}
       }
    # Apro Excel
    $XL = New-Object -comobject Excel.Application;
    $XL.Visible = $true;
    # Get Windows handle of the application
    $excelWinHwnd = $XL.Hwnd
    # Get Process Id of the application
    $process = Get-Process Excel | Where-Object {$_.MainWindowHandle -eq $excelWinHwnd}
    $excelProcessId = $process.Id
    # put excel window in foreground
    $WSShell = New-Object -ComObject WScript.Shell;
    $WSShell.AppActivate("Excel") | Out-Null;
    Start-Sleep -Milliseconds 150; # ms
    # Apro il file excel scelto
    $WB = $XL.Workbooks.Open($FileBrowser.FileName)
    # seleziono il foglio di lavoro (spreando per semplicità che sia l'ultimo creato)
    if($debug) {"STEP 006 : Seleziono l'ultimo foglio di lavoro creato"}
    $WS1 = $XL.Worksheets.Item($XL.Worksheets.count)
    $WS1.Activate();
    # Cerco il range Area
    $RangeArea = $WS1.Range("Area")
    # Cerco il range IndiceColori
    $RangeIndiceColori = $WS1.Range("IndiceColori")
    # vediamo di contare le celle
    [System.Int64] $iCountTotColorate=0;
    [System.Int16] $iCountAcc=0;
    #Azzero la colonna successiva al RangeIndiceColori
    foreach($cell in $RangeIndiceColori){
       $WS1.cells.item($cell.Row,($cell.Column+1)) = 0;
       }
    if($debug) {"STEP 007 : Azzero i conteggi nella colonna successiva all'indice colori"}
    # conto tutte le celle che NON hanno fondo trasparente, ma uguale all'indice colori se valorizzato
    foreach($cellA in $RangeArea) {
       if($cellA.Interior.ColorIndex -ne -4142){
           $iCountTotColorate++
           foreach($cellB in $RangeIndiceColori){
               if($cellA.Interior.ColorIndex -eq $cellB.Interior.ColorIndex){
                   $iCountAcc = ($WS1.cells.item($cellB.Row,($cellB.Column+1)).Value2);
                   $WS1.cells.item($cellB.Row,($cellB.Column+1)) = ($iCountAcc + 1);
                   }
               }
           }
       }
    #$WS1.Cells.item(7,'B').Interior.Color #16777215 che numero é?
    #$WS1.Cells.item(7,'B').Interior.ColorIndex #-4142
    if($debug) {"STEP 008 : Conteggio effettuato"}
    # scrivo il risultato in AX19 (dove AX = 50)
    $WS1.cells.item(19,51) = "Conteggio automatico di tutte le celle colorate";
    $WS1.cells.item(19,50).HorizontalAlignment = -4108; # $xlHAlignCenter
    $WS1.cells.item(19,50).VerticalAlignment = -4108; # $xlHAlignCenter
    $WS1.cells.item(19,50).NumberFormat = "#.##0,00 €\/\T\o\n"; # Euro/Ton
    $WS1.cells.item(19,50) = $iCountTotColorate;
    # faccio la somma della colonna in AX18 (dove AX = 50)
    $WS1.cells.item(18,50).Formula = "=sum(AX6:AX17)";
    $WS1.cells.item(18,51) = "Somma delle celle colorate";
    if($debug) {"STEP 009 : Scrivo i risultati del conteggio"}
    # salvo in un nuovo file:
    # tolgo l'estensione
    [System.string]$NewFileName = $FileBrowser.FileName;
    [System.string]$NewFileDirN = $FileBrowser.FileName;
    $NewFileDirN = (Get-Item $FileBrowser.FileName).DirectoryName
    $NewFileName = (Get-Item $FileBrowser.FileName).Basename;
    # aggiungo una data
    [System.string]$CurrentDateTimeStr = Get-Date -Format "yyyy-MM-dd_HHmmss";
    # salvo il file
    [System.string]$FilePathXLSX = $NewFileDirN + "\" +$NewFileName + "_" + $CurrentDateTimeStr + ".xlsx";
    #$FilePathXLSX
    $WB.SaveAs($FilePathXLSX)
    if($debug) {"STEP 010 : Ho salvato in un nuovo file: " + $FilePathXLSX }
    # per chiudere bene excel:
    #$WB.Close();
    #$XL.Quit();
    #$null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($XL)
    if($debug) {"STEP 011 : Fine."}

    L'unica cosa che non capisco è come mai il MessageBox che ho inserito nel codice a volte non va in primo piano... per cui può sembrare che lo script non stia facendo nulla... ma cercate una finestrella in secondo piano e premete SI...
  10. .
    Afazio due domande: il codice in che linguaggio sarà; e nel caso fosse un un'algoritmo che scansiona righe e colonne metodicamente, c'è un numero massimo di righe e di colonne? Oppure c'è un "barbatrucco" in Excel che mi dà la massima colonna e la massima riga editata?
    Perché se ho tempo potrei tentare uno sviluppo parallelo al tuo, ma in powershell script...
  11. .
    CITAZIONE (ing82 @ 30/6/2022, 18:06) 

    Ma certo che sì, pensavi che chiedesse se avevate uno storico intramontabile furgoncino della Fiat!
    È una canzonatura bonaria ing82, non te la prendere...
  12. .
    Io, che non esercito la professione, ti consiglio (se non lo conosci già) di installare notepad++, che se non ti intendi di programmazione è come un notepad, solo con finestre multiple. Se poi programmi (anche semplici script) e riesci a muoverti nelle "regular expression", considerando anche gli add-on che sono disponibili... diventa uno strumento potente e leggero, un coltellino svizzero del text editing.
  13. .
    Non sono molto ferrato, ma la geometria proiettiva, non è la euclidea "deformata" per introdurre la prospettiva?
    La geometria euclidea prevede il concetto di infinito, no?
    Rimaniamo quindi nella geometria euclidea, faccio una domanda: il punto all'infinito, dice reversi "unico, che rappresenta la sua direzione".
    Poi ipotizza un astratto proiettile lanciato lungo la retta.
    Però io ora se di proiettili ne immagino due, entrambi sulla stessa direzione della retta, ma con i versi opposti...
    Questi due proiettili raggiungerebbero entrambi il solito punto all'infinito? Io direi di no, sbaglio? C'è un punto all'infinito "a destra" e uno "a sinistra", da cui verso e direzione sono concetti distinti.
    Se poi la geometria è non euclidea e si può quindi "richiudere su se stessa"... se poi si pensa che probabilmente l'universo è una bolla... allora in tal caso il proiettile tornerà su se stesso.
  14. .
    Certo è che se la politica impedisse ai vandali di distruggere dei treni impunemente, certi casini non accadrebbero...
  15. .
    Effettivamente una delle prime auto era a vapore: invenzione di Cugnot.
248 replies since 9/9/2018
.