meccanico1 Inserito: 8 dicembre 2015 Segnala Share Inserito: 8 dicembre 2015 buona giornata a tutti , sto cercando di fare comunicare una cpu 314C2PN/DP con un drive AKD della Kollmorgen.Come software uso step7 V5.5 sp1.Ho scaricato dal sito della siemens i blocchi aggiuntivi e li ho inseriti in un progetto per testare un po' la cosa .Ho cercati di seguire il manuale della siemens sull'argomento ma non sono riuscito a fare granchè.Qualcuno potrebbe suggerirmi qualche sito dove io possa trovare qualche istruzione , magari in italiano , da seguire per districarmi un po' in questa faccenda?grazie mille a tutti Link al commento Condividi su altri siti More sharing options...
ifachsoftware Inserita: 11 aprile 2017 Segnala Share Inserita: 11 aprile 2017 Ciao , ti serve il pacchetto della siemens che implementa il modbus Master TCP (pagando almeno 500€ a licenza) , altrimenti fai come me e ti costruisci il driver ... Il protocollo è semplice : per esempio questo è la creazione del buffer per scrivere un singolo registro da inviare in TCP : FUNCTION "MODBUS_PREPARE_WRITE_INT_TO_HR" : "BUFF_8192" { S7_Optimized_Access := 'FALSE' } AUTHOR : CR VERSION : 0.1 //Prepare command for write one INT to one HR area with Modbus command 6 VAR_INPUT Address : Int; // Modbus HR address Value : Int; // Value to be written END_VAR VAR_TEMP Ary_2_Bytes : Array[0..1] of Byte; END_VAR BEGIN #MODBUS_PREPARE_WRITE_INT_TO_HR.Buffer[0] := 0; // Transaction ID #MODBUS_PREPARE_WRITE_INT_TO_HR.Buffer[1] := 0; // Transaction ID #MODBUS_PREPARE_WRITE_INT_TO_HR.Buffer[2] := 0; // Protocol ID (Modbus = 0) #MODBUS_PREPARE_WRITE_INT_TO_HR.Buffer[3] := 0; // Protocol ID // Write follow length "INT_TO_ARY_BYTES"(Value := 6, AryBytes => #Ary_2_Bytes); #MODBUS_PREPARE_WRITE_INT_TO_HR.Buffer[4] := #Ary_2_Bytes[0]; // Length #MODBUS_PREPARE_WRITE_INT_TO_HR.Buffer[5] := #Ary_2_Bytes[1]; // Length #MODBUS_PREPARE_WRITE_INT_TO_HR.Buffer[6] := 1; // Unit Identifier #MODBUS_PREPARE_WRITE_INT_TO_HR.Buffer[7] := 6; // Function Code 6 = Write Single Register // Register Address "INT_TO_ARY_BYTES"(Value := #Address, AryBytes => #Ary_2_Bytes); #MODBUS_PREPARE_WRITE_INT_TO_HR.Buffer[8] := #Ary_2_Bytes[0]; #MODBUS_PREPARE_WRITE_INT_TO_HR.Buffer[9] := #Ary_2_Bytes[1]; // Register Value "INT_TO_ARY_BYTES"(Value := #Value, AryBytes => #Ary_2_Bytes); #MODBUS_PREPARE_WRITE_INT_TO_HR.Buffer[10] := #Ary_2_Bytes[0]; // Value #MODBUS_PREPARE_WRITE_INT_TO_HR.Buffer[11] := #Ary_2_Bytes[1]; // Value // Returned length #MODBUS_PREPARE_WRITE_INT_TO_HR.UsedData := 12; END_FUNCTION TYPE "BUFF_8192" VERSION : 0.1 STRUCT UsedData : Int; // Number of used bytes by buffer Buffer : Array[0..8191] of Byte; // Buffer with data END_STRUCT; END_TYPE FUNCTION "INT_TO_ARY_BYTES" : Void TITLE = INT_TO_ARY_BYTES { S7_Optimized_Access := 'FALSE' } AUTHOR : CR VERSION : 0.1 //Covert integer to array of bytes VAR_INPUT Value : Int; END_VAR VAR_OUTPUT AryBytes : Array[0..1] of Byte; END_VAR VAR_TEMP wTemp : Word; END_VAR BEGIN #wTemp := INT_TO_WORD(#Value); #AryBytes[0] := WORD_TO_BYTE(SHR(IN := #wTemp AND 16#FF00, N := 8)); // 16#01 502 #AryBytes[1] := WORD_TO_BYTE(#wTemp AND 16#FF); // 16#F6 END_FUNCTION Poi usando i comandi TCON , TSEND , TRCV TDISCON Ti colleghi al dispositivo (TCON) Invii il buffer creato (TSEND) Leggi eventuali risposte (TRCV) Ti Disconnetti (TDISCON) della documentazione sul Modbus TCP la puoi trovare qui Link Link al commento Condividi su altri siti More sharing options...
odx Inserita: 11 aprile 2017 Segnala Share Inserita: 11 aprile 2017 Siccome mi leggo ogni cosa sui protocolli son finito qua ... meglio tardi che mai ifachsoftware , ma spero abbia risolto da dicembre 2015 ad oggi ... comunque anche per me che mastico un po' di modbus, ci impiegherei un pochino a capire come usare il tuo blocco. Premetto che ora non mi serve ... e poi vado su Tia dove ci sono blocchetti già pronti oramai Link al commento Condividi su altri siti More sharing options...
ifachsoftware Inserita: 11 aprile 2017 Segnala Share Inserita: 11 aprile 2017 L'esempio allegato ti permette di scrivere il valore Value di tipo intero tramite il function code 6 (Write single register) all'indirizzo Address su un Buffer di tipo BUFF_8192 con cui ti scrive il buffer con i dati ed i caratteri utilizzati da parte del buffer ; tale buffer puo' venire inviato con l'istruzione TSEND. So benissimo che è una discussione vecchia , ma credo che per chi avesse necessità di realizzare la cosa con un 300 e non con un 1200 potrebbe tornare utile. Se avevi la risposta pronta potevi scrivergliela tu nel 2015 ....... Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora