Jump to content
PLC Forum


Comunicazione Ethernet plc-pc


Obyrt
 Share

Recommended Posts

Salve a tutti, sto utilizzando Visual Studio 2015 con Drive di comunicazione x PLC Micro850 AB.

Funziona con C# ma vorrei usare un progetto di VB per poter utilizzare anche la logica vero/falso, qualcuno puo' indicarmi il codice per la comunicazione ethernet?

 

Grazie

Link to comment
Share on other sites


Livio Orsini
Quote

vorrei usare un progetto di VB

 

Sin tratta di VB o VB.NET?

Con VB.NET non ci dovrebbero essere grossi problemi a ricompilare il sorgente C#, bastano pochi aggiustamenti.

Link to comment
Share on other sites

VB.NET con VC# non c'entrano proprio niente e ci vogliono di piu di "pochi aggiustamenti" ....partendo dalla sintassi , ai casting e a tutto il resto 

Link to comment
Share on other sites

Livio Orsini

Valter, non ci sei proprio: VB.NET e C# sono talmente affini che i testi di MS (che sono vangelo essendo MS l'autore dei 2 linguaggi) ti fanno sempre gli esempi nei 2 linguaggi, proprio per mostrarne le affinità.

E' VB che ha poco a che spartire con C# ed anche con VB.NET

Link to comment
Share on other sites

Livio , lascia fare non offenderti ma con questi oggetti ci gioco da un bel pò e se mi permetto di dire una cosa lasciamela dire e fidati che non la dico cosi tanto per dire a caso.

Ti manderò un bel libro sul core della .NET e capirai tante cose, che C# è il linguaggio principe e che non sono la stessa cosa , VB.NET rimane ancora sopra per l'interpretazione.Altro linguaggio degno di nota al livello di VB.NET e forse piu è Python 

I linguaggi C# e java hanno degli affini per la sintassi e per molte cose ma anche li ci sono diversità fondamentali.

Se devi fare un'applicazione con finestrelle , dataset , DB etc è veloce ed utile usare Vb.net magari ma per tutto il resto non sono la stessa cosa

Per capirlo devi sbatterci la testa in lavori di un certo livello e di una certa difficoltà.

Con C# puoi implementare molte cose da molti anni come XNA , reflection , reverse engineering etc .VB.net non le supporta

Non si tratta solo di compilare in IL per la CLR , ci sono altri limiti in VB.net che ovviamente se programmi ad un certo livello applicativo di larga scala non puoi capire ne tantomeno prevedere. Questo te lo dico da anni , se poi vuoi credere in quello che dici libero di farlo ,a me non cambia niente .

I libri che citi tu li ho tutti fin dal 2002 quando uscii ed acquistai la prima  .NET 

VB 6 non c'entra nulla con C# e VB.NET  è ovvio . Il framework .NET è stato concepito dopo ricopiando la JVM , infatti molti progettisti sono gli stessi che hanno scritto il delphi , java e c# . Tra C# e VB.NET a parte le librerie comuni del framework ......c'e' un abisso .

Chiedi il parere a qualche informatico esperto di livello 2 anche in ambiente industriale e ti dirà le stesse cose .

Il codice non è per nulla scambiabile , la sintassi è totalmente diversa , VB.net non fa i casting perchè se ne occupa l'interprete per esempio e molte altre cose.

Quando lavori a livelli bassi di framework si lavora con C# non con VB.net he puo comunque essere usato perche piu veloce e meno ostico di un linguaggio fortemente tipizzato come c# o java .A sto punto rpeferisco python a vb e a vb.net .

I libri avanzati con un certo senso di impegno trattano solo c# o vb.net , quelli di partenza giusto per farti imparare gli assembly piu importanti li fanno in doppio linguaggio per gestire tabelle, finestre etc .

Anni fa ho implementato un engine che mi eseguiva files di python al volo da una app che avevo scritto in c# , questo per impedire di dover fare sempre modifiche e ricompilare e lasciare ai programmatori interni dell'azienda la possibilità di modificare gli interessi aziendali come etichette, bolle e di conseguenze link a sql .Questo engine con VB:net non lo potevi fare perche non supportava molti oggetti del .NET , cosi come il framework per progettare e scrivere videogiochi anche in 3D , VB:net non lo supportava e no nlo supporta tuttora. ci sono dei motivi di fondo che vanno studiati e testati in un certo modo , poi capirai perche ti dico sempre le stesse cose ;)

Diciamo che a partire dal C , che ora è anche ad oggetti e mi fa schifo , al C++ dove iniziò il paradigma di linguaggio ad oggetti e/o funzionale .

Dal il C++ , per sintassi e potenzialità di ereditarietà, polimorfismo , incapsulamento , interfacce (classi virtuali ) etc etc sono nati java e C# con il controllo del framework che tramite il garbage collector si occupa di liberare la memoria , infatti il concetto di distruttore di classe non esiste ma esiste solo il costruttore , e comunque puoi implementare anche i distruttore ed occuparti in prima persona in quanto GC è asincrono e non sempre fa quello che deve bene e velocemente. Al VB.NET  come sintassi il quale deriva dal  VB come sintassi  hanno voluto creare istruzioni built.in per farlo diventare ad oggetti quando non lo è nativamente per cui ti lascio immaginare che razza di porcheria possa essere .

Se ti interessa passo da casa tua e ti spiego un po di cose ;)

Link to comment
Share on other sites

Molto bene....allora viste le considerazioni , provo a modificare la richiesta:

utilizzo C# ,leggo e scrivo su PLC AB micro850 ma in realta' C# legge gli indirizzi come stringa .

Ora io ho la necessita' di poter utilizzare anche logica booleana, es: quando dopo aver attivato un bit a tempo tramite pulsante del Form, alla fine del conteggio,che e' nel plc, il pulsante deve ritornare nella modalita' non attivo.

Link to comment
Share on other sites

che cosa usi per scrivere sul plc ?  Un opc server ?  Una libreria nativa ? Cosa?

Devi creare almeno due aree di memoria nel plc , una che scrive e l'altra che legge.

Scrivi un bit che attiva il timer nel plc e poi leggi lo stato dello stesso per fare quello che vuoi nel pc 

Ovviamente un'applicazione con un minimo di fondamenta deve implementare diversi threads, mutex , deve essere ben sincronizzata 

Dopodichè per poter estendere le funzionalità devi saper implmentare qualche design pattern.Per evitare di creare oggetti che necessitano di altri oggetti all'interno degli stessi , puoi creare una classe statica come globale all'interno della quale dichiarare gli oggetti che ti servono con relativi metodi e poi tramite delegati ed eventi li utilizzi dove ti servono 

La logica booleana con C# o VB.net non è un problema , esistono vari tipi di dati , metodi etc .Puoi anche crearti i tuoi tipi di dati con classi che contengono metodi specifici che puoi riutilizzare ovunque e sempre , che puoi specializzare , estendere etc 

Link to comment
Share on other sites

uso i drive di comunicazione e funzionano,questo e' il sistema 

 

namespace WindowsFormsApplication2
{
  

    public partial class MANUALE : Form
    {
        EthernetIPforMicro800Com MyAB = new EthernetIPforMicro800Com();


    public MANUALE()
        {
            InitializeComponent();
            MyAB.IPAddress = "192.168.1.11";


        }

    private void button1_Click(object sender, EventArgs e)
        {
            // MyAB.Write("T_TEMPO", input.Text);
            MyAB.Write("times_luce", set_t_luce.Text);
            // string Rev"80" = input.Text;
            //string REV_PROJECT = MyAB.Read("REV_PROJECT");
            // textBox2.Text = REV_PROJECT;
            // MyAB.Write("REAL_APP_Copy_1", input.Text);
            // textBox1.Text = MyAB.Read("REAL_APP_Copy_1");

        }

        // conversione risultato stringa in bool


        

        ///---------------------------------------------------------------///

     
    private void timer1_Tick(object sender, EventArgs e)
        {

            textBox1.Text = MyAB.Read("_IO_EM_DO_00");
            //LETTURA TEMPERATURA
            C.Text = MyAB.Read("_IO_X2_AI_00");
            //LETTURA PRESSIONE
            BAR.Text = MyAB.Read("_IO_X2_AI_01");
            //LETTURA PRESSIONE CALDAIA
            BAR_C.Text = MyAB.Read("_IO_X2_AI_02");
            //LETTURA PESATURA
            KG.Text = MyAB.Read("_IO_X2_AI_03");


          

        }

il mio problema attualmente e' una volta letto lo stato " MyAB.Read("_IO_EM_DO_00")", mettere a zero lo stato del pulsante nel form che ha attivato la funzione 

     private void P_Luce1_CheckedChanged_1(object sender, EventArgs e)
        {
            MyAB.Write("_IO_EM_DO_00", 1);
        }

Link to comment
Share on other sites

Livio Orsini
Quote

Livio , lascia fare non offenderti ma con questi oggetti ci gioco da un bel pò e se mi permetto di dire una cosa lasciamela dire e fidati che non la dico cosi tanto per dire a caso.

 

Walter lascia stare che questi linguaggi li uso dallo loro nascita, ho ancora tutti i CD della prima versione della suite MS (anno 2000).

Quindi se ti ho scritto quello che ho scritto l'ho fatto a ragion veduta.

Addurittura nella prina versione della visual suite era presente, nel wizard di creazione del progetto, anche il tool di conversione automatica da VB.NET a C#.

Poi dipende sempre da come usi i vari oggetti e se miri alla massima compatibilità o alla massima efficienza.

Quote

Il framework .NET è stato concepito dopo ricopiando la JVM , infatti molti progettisti sono gli stessi che hanno scritto il delphi , java e c#

 

Che ci siano gli stessi progettisti almeno in parte è abbastanza probabile, come è vero che C# è stato il tentativo di MS di prendersi una fetta del mercato di java.

Comunque non devo chiedere a nessuno basta consultare i manuali di MS che posseggo, assieme ai testi Mondadori che hanno l'imprimatur ufficiale di MS.

 

Che poi tu ci creda o meno a me non è che mi procuri piacere o dispiacere, oramai sono abbondantemente al di sopra di certe cosucce.:smile:

 

Ora però chiudo l'OT altrimenti dovrei autosanzionarmi.;)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...