Vai al contenuto
PLC Forum


Rabbit (Progetto on-line)


Gabriele Riva

Messaggi consigliati


  • Risposte 400
  • Created
  • Ultima risposta

Top Posters In This Topic

  • walterword

    154

  • dlgcom

    85

  • Livio Orsini

    46

  • ifachsoftware

    36

bravo

PIC - Rabbit io lo userei cosi :

Rabbit master prot. modbus seriale

PIC slave prot. modbus seriale

PIC Master I2C

Philips PCF8575 PCF8591 slave I2C per acquisire I/O

PC-RABBIT :

PC client prot. Modbus tcp\ip

rabbit server o server web prot. Modbus tcp\ip

visto che il protocollo basato su modbus tcp\ip sta funzionando

cosa ne dici fratello?

ciao

walter

Modificato: da walterword
Link al commento
Condividi su altri siti

Philips PCF8575 PCF8591 slave I2C per acquisire I/O

perche usare questi componenti?

Per il resto non fa una piega ...

Per pic qualche cosa c'e' gia'

Devo solo studiare un po il modbus.... e tentare di implementarlo nel Rabbit.

Il progetto PIC>RABBIT>PC era propio il mio obbiettivo..

Link al commento
Condividi su altri siti

Per il PLC , siemens se non ricordo male ha un protocollo slave Modbus.

Si potrebbe usare il rabbit come ponte per un eventuale HMI o SCADA TCP/IP

Link al commento
Condividi su altri siti

si con siemens puoi essere anche master in modbus

devi solo comprare la scheda , che non la regalano

se invece ( per siemens) pigliamo tutto in un pc siamo apposto , poi possiamo accedere

al resto del mondo

o no ?

seno compriamo la scheda modbus per siemens

;)

p.s. non so se si possa scrivere protocollo modbus con siemens

pero c'e' la scheda RS232 o 485 credo e il protocollo ce lo facciamo noi

seno , c'e' anche la scheda ethernet per siemens , solo ceh usa il suo ca**o di protocollo

del quale non si sa nemmeno chi l'abbia scritto

Modificato: da walterword
Link al commento
Condividi su altri siti

in sostanza almeno 1 licenza dobbiamo averla

siemens non da specifiche per protocolli

ti da le librerie basate sulle loro schede o chip preprogrammati da loro stessi

ciao

Link al commento
Condividi su altri siti

gli indirizzi slave sono buoni da 1 a 247 , quindi 247 slaves

il master del bus e' solo 1

gli slaves non parlano tra loro , ma solo quando richiesto dal master

Possiamo sempre creare sottoreti , dove uno slave e' anche master della sua sotto rete

;)

ciao

walter

Link al commento
Condividi su altri siti

esatto fratello

come dicevo io sopra

sottoreti dove lo slave della rete principale e' anche master della sua sottorete

non mi spaventa il fatto

anzi mi eccita :D

ciao

walter

Link al commento
Condividi su altri siti

ok io nel frattempo procedo con la scrittura in VC#.net

della seconda funzione Modbus tcp\ip che voglio implementare

e cioe : Scrivi multi registers

le funzioni dedicate ai bit , cioe ingressi digitali e coils (uscite digitali) non mi interessano

anche perche verranno copiate tutte nei registri a 16 bit nel caso di pc e plc

mentre nei micro , durante l'acquisizione dati abbiamo gia tutto nei registri delle porte

o nei registri general purpose , quindi siamo apposto

Vado avanti sia con server che client con 2 pc.

puoi sara un gioco da ragazzi tradurlo in C per il tal micro piuttoto che l'altro

poi pero bisognera iniziare anche il modbus su seriale

ciao

walter

Link al commento
Condividi su altri siti

ifachsoftware
Penso che dovremo fare delle sotto reti o dei concentratiri , visto che il 485 si possono solo collegare 32 utenti.

Guarda che ci sono dei chip della Maxim che gestiscono 32/64/128/256 Nodi , naturalmente bisogna vedere i tempi di risposta e che tipo di chip montano apparecchi di terzi (Vedi PLC) , comunque 32 nodi li vedono tutti.

Ciao B)

Link al commento
Condividi su altri siti

se il modbus non sara in grado di soccombere alle ns necessita

compreremo il chip con i driver del CANBus .

bisogna iniziare a provare con 2 nodi :master e slave in modbus seriale

io adesso sto vedendo il modbus tcp\ip tra 2 pc , e lo provero con pc-plc

le 2 funzioni + importanti (leggi multi registri e scrivi multi registri ) saranno piu che sufficienti per iniziare

a far parlare e 2 devices .

sto gia ordinando il materiale per costruire 2 schede slaves con acquisizione I/O dig-analog .

per il master usero il rabbit RCM3010 che mi e' rimast sul groppone dal progetto on line dell'anno scorso .

il server ed il client che sto scrivendo per pc (modbus tcp\ip ) potranno essere utilizzati da altri

tipo rabbit qualora si voglia supervisionare la rete nenche i dati ed i nodi con un pc.

detto questo , stop

abbiamo gia parlato abbastanza

vado avanti a lavorare

ciao

walter

p.s. dimenticavo......

all'accensione il master dovra farsi un bel giretto nella rete ed autoapprendere quanti e quale indirizzo

avranno i nodi .il tutto riportato nel pc di supervisione

:D

Modificato: da walterword
Link al commento
Condividi su altri siti

comunque 32 nodi li vedono tutti

Ho letto che ci sono dispositivi a piu' nodi , ma se consideri che oggi il chip sn75176 e' il piu' diffuso ...

compreremo il chip con i driver del CANBus

Io ho gia' comprato i componenti per trasmettere in CAN con Pic e Rabbit !

Il problema e' conoscere il protocollo CANBUS .

Link al commento
Condividi su altri siti

dubito che si possa conoscere il can bus

pero credo che insieme ai driver ci diano anche le librerie

un po come profibus

alla fine se il chip can bus si smazza tutto lui , e' come programamre una rete di plc con schede dedicate

dobbiamo solo preoccuparci dell'applicazione

comunque continuiamo con modbus , sto scrivendo il server

su tcp\ip

poi vediamo su seriale , ho gia in mano calcoli per il CRC e tutti i manuali modbus

ci vuole solo tempo

in questa settimana pero mi occupero di piu al progetto

ciao

walter

Link al commento
Condividi su altri siti

sto quasi raggiungendo la fase2:

la funzione ScriviMultiRegistri e' quasi ultima , ho gia debuggato la parte client : il pacchetto viene spedito

giusto e bene e tutte le routines (metodi) per smazzare gli interi in 2 byte e riempire il buffer di invio

e ricezione sono ok

domani faccio la parte server della 2° funzione , poi provo con un fantastico Premium tsx con scheda ethernet .

ciao

walter

p.s. nel frattempo fratello dlgcom si sta sbattendo alle prese del framework .NET , e poi iniziera ad implementare

il modbus seriale su standard RS485 , vero fratello :D ???

fratello ifach ci assiste da lontano e grande fratello livio orsini invece e' gia al mare :lol::lol::lol:

ok soci andiamo avanti

ciao

walter

Modificato: da walterword
Link al commento
Condividi su altri siti

  • 5 weeks later...

ok sono riuscito a stabile una cominicazione tra pic e pc , adesso piazzo anche 2 chip (pcf8574 e pcf 8591

ed in I2c li leggo e poi via seriale tutto al pc )ed alcuni registri per debuggare .

riesco ad accendere e spegnere da pc alcuni led posti sulla scheda del pic

per me e' gia una grande conquista .

Appena finita questa scheda ne preparo un'altra identica e poi entra in scena il mitico Rabbit

che sara il master della rete rs495 modbus che unira Rabbit + scheda1 +scheda2

il tutto al pc con modbus tcp\ip .

Bene signori adesso si che inizio a divertirmi

ciao

walter

Link al commento
Condividi su altri siti

altro passo raggiunto:

il PIC16f876 comunica come master con 2 devices in I2C (PCF8591 e PCF8574 ) che sono riepsttivamente:

-PCF8591 ADC-DAC a 8 bit , 4 canali input e 1 output

-PCF8574 8 bit I/O configurati come 4 input e 4 output

Il pic li legge entrambe e poi tramite driver RS232 trasferisce i dati al pc , dove ho scritto un'applicazione

con l'aiuto di una dll per gestire la seriale del pc.

Variando i potenziometri ed i pulsanti collegati ai devices , leggo immediatamente i dati sul pc

Che bello !!!!!!!!!11 :D:D:D

nel PIC utilizzo il PCM e le librerie del I2C non son riuscito a farle funzionare

cosi mi sonstudiato il protocollo ed ho scritto una libreria dove vado a pilotare direttamente i pic e il loro tris

Ho cosi poi implementato le funzioni si start , stop , ack ,nack , leggi ad , scrivi ad , ect ect

Funziona che e' una meraviglia

Il mio progetto continua con lo sviluppo di un asupervisione per controllare lo stato dei registri sia speciali che purpose .

Dopo di che faro un'altra scheda simile ed entrera in scena il Rabbit ed i pic saranno equipaggiati di RS485

ciao

walter

Link al commento
Condividi su altri siti

Grande Walter,

Anche io sto' cercando di far nevicare qui in Brasile , quindi ho messo le mani sul rabbit.

Iniziano i primi problemi....

sto' provando i demo in Tcp/ip, ma qualche cosa mi sfugge.

Se provo a collegare il rabbit al pc , il modulo si connette e funziona facendo il ping al pc roconosce tutto.

Il problema e' che il pc non vede il rabbit , ovvero sente che l'indirizzo esiste , perche' non mi permette di usare lo stesso indirizzo che usa il rabbit , ma non riesce a pingare il modulo , neanche explorer riesce a collegarsi all'indirizzo del rabbit.

Chi ha un po' di esperienza per dirmi quali config. devo fare nella rete ?

Da notare che uso eternet pre il modem adsl , infatti se tento di collegarmi al rabbit , lui tenta di collegarsi ad internet...

ultima cosa uso Xp home.

Link al commento
Condividi su altri siti

ciao fratello DlgCom

E' un vero piacere sentirti qui .

dunque io sono a buon punto con PIC-PCF8574-PCF8591 in I2C e PIC-PC in RS232

per il rabbit avevo fatto delle prove dove praticamente il rabbit e' Server ed il pc Client

Creavo la connessione , inviavo un buffer dal pc al rabbit e lui mi rispodeva a seconda del comando

con altre stringhe .

Ti scrivo qua il codice , il rabbit deve essere configurato con un IP ed aprire una porta

Quando da pc voglio collegarmi al rabbit (cioe premo il pulsante Connetti ) prima il firewall mi chiede il consenso

e magari sono gia ad internet in adsl .Non ti preoccupare

che il modulo rabbit funziona

al limite ti mandero anche la parte client in vc#.net

/********************************************************************************

*************

sock_tcp_client.c

Walter (walterword) & Claudio (Ifach) .NET

ver 1.0 07/06/2004

Inizio di un programma programma per comunicare con una connessione TCP\IP tra PC-Rabbit

Funzionanate la parte Rabbit e provato per scrivere la parte Pc (client)

********************************************************************************

**************/

#define MY_IP_ADDRESS "192.168.0.102"

#define MY_NETMASK "255.255.255.0"

#define MY_GATEWAY "192.168.0.208"

#define MY_NAMESERVER "192.168.0.208"

#define NomeNodo 01

//imposta la porta d'ascolto del server TCP

#define PORT 1007

#memmap xmem

#use "dcrtcp.lib"

//funzione di ritardo

nodebug

void msDelay(unsigned int ams)

{

auto unsigned long t0;

for(t0=MS_TIMER; MS_TIMER<ams+t0;);

}

//funzione per smazzare il buffer in ricezione

int SmazzaBuffer(char buffer[512])

{

//Analizza la stringa ricevuta

auto int Lun;

auto long Nodo;

auto char Buff[20];

int Cmd;

auto long nDati;

Lun = strlen(buffer);

if(Lun < 13)

{

return(-1);

}

if(buffer[0] != '*')

{

return(-2);

}

Buff[0] = buffer[1];

Buff[1] = buffer[2];

Buff[3] = buffer[3];

Buff[4] = '\0';

Nodo = atol(Buff);

if(Nodo != NomeNodo) // Se non sta chiamando questo nodo esce

{

return(0);

}

Buff[0] = buffer[4];

Buff[1] = buffer[5];

Buff[3] = '\0';

Cmd = atol(Buff);

Buff[0] = buffer[6];

Buff[1] = buffer[7];

Buff[3] = '\0';

nDati = atol(Buff);

// Qui si controlla il checksum

// Si controlla la lunghezza del buffer ed eventualmente si caricano i dati in un Array

// poi il parse lo fai cosi'

switch(Cmd)

{

case 1: // Scrivi

break;

case 2: // Leggi

break;

otherwise:

printf("\nComando Errato !");

}

}

//Inizio del PROGRAMMA

main() {

char buffer [512];

int ritorno;

char test [512];

char s_rs [64];

int status, len, getOK, i;

tcp_Socket s;

//Configura la Porta D

WrPortI(PDFR, &PDFRShadow, 0x0); //Setta la porta D come I/O (bit 5 e 7 a livello basso 0)

WrPortI(PDDCR, &PDDCRShadow, 0x0); //Setta il la porta D pullup x0 o open collector xFF

WrPortI(PDDDR, &PDDDRShadow, 0xff); //Setta la porta D come output (gestibile bit bit)

//inizializza il socket

sock_init();

while(1) {

tcp_listen(&s, PORT, 0L, 0, NULL, 10);

sock_wait_established(&s, 0, NULL, &status);

printf("Connessione in corso \n");

sock_mode(&s, TCP_MODE_ASCII); //imposta la modalià ASCII

if (sock_established(&s)) {

while(sock_established(&s)) {

sock_wait_input( &s , 0, NULL, &status);

sock_gets(&s, buffer, 512);

printf(">%s\n", buffer);

if(ritorno=SmazzaBuffer(buffer)==-1)

{

printf("Errore : Buffer corrotto\n");

}

else if (ritorno=SmazzaBuffer(buffer)==-2)

{

printf("Errore : Carattere di start errato \n");

}

else

{

printf("OK Fratello dimmi cosa ca**o devo fare...\n");

}

//OFFLED2

sprintf(test, "OFFLED2");

if (strncmp(buffer, test, 7) == 0) {

BitWrPortI(PBDR, &PBDRShadow, 0, 7); //Spegne IL led TEST2

sprintf(test, "%d\n", RdPortI(PBDR) + RdPortI(PDDR));

sock_puts(&s, test);

printf(">%s\n", test);

}

}

}

sock_close(&s);

//WrPortI(PADR, &PADRShadow, 0xff);

sock_err:

switch (status) {

case 1:

printf("\n L'utente ha chiuso la sessione\n");

//BitWrPortI(PADR, &PADRShadow, 1, 0);

break;

case -1:

printf("\n Time out \n");

//BitWrPortI(PADR, &PADRShadow, 1, 0);

break;

}

}

}

questo codice e' stato preso , modificato da me , rivisto da claudio e ripuntualizzato da me :D

lo usavo per provare il tcp\ip come client col pc desktop

Nel Rabbit viene fuori anche la finestra stdio per farti vedere quello che ti spedisce

Spero di esserti stato di aiuto

ah ...senti fratello , gia che ci sei

sto pensando creare una routine di ricezione nel pic16f9876 che poi utilizzero anche per il RS485

nel pic ho gia implementato via software l'interrupt del timer 0 e timer dentro i quali gestiro i pochi controlli della scheda e poi ho implementato l'interrupt della seriale che viene scatenato quando il buffer di ricezione ha ricevuto un byte .

All'itnerno di queto interrupt devo gestire il buffer di ricezione , fare i controlli e poi decidere alcune cose

se hai una routine gia fatta seno me la faccio io ,

domanda: ma quando ricevo 1 byte , dopo averlo copiato al posto giusto , devo svuotare il byte di ricezione o viene sovrascritto dal byte che segue ?

ciao

walter

...il grande progetto on line continua

Link al commento
Condividi su altri siti

ciao dlgcom volevo chiederti come mai affermi che i nodi possono essero solo 32 ?

beato te che stai in mezzo a tutte quelle belle brasiliane :rolleyes:

un saluto anche a walter

... luciano

Link al commento
Condividi su altri siti

ciao luciano

adesso mi perfeziono e poi fratello DlgCom ha detto che mi ospita in brasile

cosi , dopo una seria indagine di mercato mi trasferiro la' in brasile

a dare una mano a fratello DlgCom :rolleyes:

vero fratello DlgCom ???? :D:D:D

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora

×
×
  • Crea nuovo/a...