2560 e Modbus slave

Sezione dedicata al sistema di sviluppo BASCOM-AVR per i micro AVR
At90s, Attiny, Atmega e Xmega

Re: 2560 e Modbus slave

Postby suibaf » 19 Apr 2014, 18:47

Deluca,
a me non funziona stabilmente.....a volte si a volte no! Stò usando il tuo stesso simulatore! Non sò che dirti! Il codice è quello!
User avatar
suibaf
 
Posts: 122
Joined: 08 Mar 2014, 09:55
Location: Lecce

Re: 2560 e Modbus slave

Postby suibaf » 19 Apr 2014, 19:11

Appena riesco invio un video!
User avatar
suibaf
 
Posts: 122
Joined: 08 Mar 2014, 09:55
Location: Lecce

Re: 2560 e Modbus slave

Postby js-bascom » 19 Apr 2014, 22:39

attenzione che lì ti bacchettano
Nel avatar del'altro forum sembra che povero suibaf sia invecchiato un po' , forse e' lo stress di questo progettino. :-)
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: 2560 e Modbus slave

Postby suibaf » 20 Apr 2014, 08:26

Gli avatar sono troppo piccoli, non rendono l'idea! Sono uno strafigo!!! :D
User avatar
suibaf
 
Posts: 122
Joined: 08 Mar 2014, 09:55
Location: Lecce

Re: 2560 e Modbus slave

Postby suibaf » 20 Apr 2014, 09:26

Deluca,
dai un occhiata al video che ho prodotto:

https://dl.dropboxusercontent.com/u/152 ... ture_1.flv

Ciao
User avatar
suibaf
 
Posts: 122
Joined: 08 Mar 2014, 09:55
Location: Lecce

Re: 2560 e Modbus slave

Postby deluca » 20 Apr 2014, 10:16

@suibaf, ho visto il video... stranissimo comportamento.
A me continua a funzionare perfettamente anche scrivendo su svariati registri.
Delay tra 2 makemodbus 100msec.

Questa la mia configurazione:
Emulatore di porte com virtuali installate com 1<-->2 baud 19200
Lato master: Proteus -> com virtuale 1
Lato slave : Modbus slave sim <- com virtuale 2

Hai provato con altre com di ardu?
Problema versione simulatore installato?

...
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: 2560 e Modbus slave

Postby suibaf » 20 Apr 2014, 10:23

Ho cambiato porta ed ho cambiato il convertitore 485. Ho installato l'ultima versione del simulatore, la 8.20.
Con un altro simulatore funziona meglio, ma non posso dire che lo trovo stabilissimo il sistema. Ma non sò dove stà l'anello debole, non l'ho capito. So che su mcselec sono un pò bacchettoni, cerco di prenderli sempre dal lato giusto. Non so se hai visto parto sempre dal concetto che bascom funziona bene e che la colpa è la mia! Ma non è sempre sempre così! :)
User avatar
suibaf
 
Posts: 122
Joined: 08 Mar 2014, 09:55
Location: Lecce

Re: 2560 e Modbus slave

Postby js-bascom » 20 Apr 2014, 11:07

Io ho appena scoperto che il codice nella versione demo non funziona perche' non controlla il pin Rs485dir che nel mio board e sul PC6. Diciamo sono un po' annoiato quando Mark mi dice che dovrebbe funzionare e infatti non funziona. :evil:

http://www.mcselec.com/index2.php?optio ... 4185#64185
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: 2560 e Modbus slave

Postby js-bascom » 20 Apr 2014, 11:16

E ho pure notato una linea che forse non sia corretta nel tuo code
Code: Select all
Config Pinc.0 = Output
penso che Pinc.0 dovrebbe essere Portc.0 per essere una uscita.

Comunque se Makemodbus non controlla Rs485dir come nel mio caso, potrebbe funzionare con un simulatore ma NO con hardware vero.
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: 2560 e Modbus slave

Postby js-bascom » 21 Apr 2014, 03:19

E ora che ho fatto la figura da fesso.... :oops:

http://www.mcselec.com/index2.php?optio ... 4217#64217
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: 2560 e Modbus slave

Postby deluca » 21 Apr 2014, 10:38

Code: Select all
Waitms 30                                             ' delay
Print #1 , Makemodbus(7 , 6 , 40000 , W);             ' slave 2, function 6, address 40000  , value of w
Waitms 30
Print #1 , Makemodbus(7 , 6 , 40001 , W);             ' slave 2, function 6, address 40001  , value of w
W = W+1


js-bascom, così non va bene.
Con funzione 6, partendo da 40001, per scrivere sul registro 40101, devi scrivere:
Code: Select all
Print #3 , Makemodbus(7 , 6 , 100 , W);
Waitms 100
Print #3 , Makemodbus(7 , 6 , 102 , W);
Waitms 100

Su Makemodbus andiamo ad indicare l'offset.
Inoltre il minimo intervallo di tempo tra un print e il successivo non può essere inferiore a 100mSec, almeno con il simulatore !!
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: 2560 e Modbus slave

Postby suibaf » 21 Apr 2014, 11:10

Stò facendo un sacco di test con questa libreria modbus, sicuramente sono io che sbaglio, come al solito, ma i conti non mi tornato.
Stasera Vi faccio sapere, preparo un video e lo posto così lo vediamo insieme.
Buona Pasquetta!
User avatar
suibaf
 
Posts: 122
Joined: 08 Mar 2014, 09:55
Location: Lecce

Re: 2560 e Modbus slave

Postby js-bascom » 21 Apr 2014, 11:58

così non va bene.
Per qualche ragione funziona benissimo con i miei boards e con 30ms di intervallo. :shock:

Forse sara il modo in cui freemodbus funziona ma mando gli stessi comandi con il programma PC, se mando altri indirizzi il board(la scheda/la board) mi ritorna un errore.

Diciamo che la mia unica esperienza con modbus e(è) solo stata con freemodbus, un cliente a(ha) chiesto se potevo vendergli alcuni dei miei DXIO-6 boards (ora DXIO-62) con modbus per montarli in alcuni loro istrumenti(strumenti) che facevano perche' aveva il giusto numero di uscite. Il primo attentato(tentativo) non funziono perche' non avevo capito gli indirizzi giusti (avevo solo gli offsets come dici tu), poi mi dissero di mettere quei(quegli) indirizzi e tutto funzionava(funzionò) bene nell loro fabrica.

Furono tanto(meglio così) contenti che comprarono 10 board un anno dopo.

Il clienti(e) e' una grande compagnia internazionale locata a Perth a quando (ne) sappia.

Se Cecil b. De Mille mi presta una telecamera faro un video pure io, ora vado a gurdare la TV e mi addormento! Che brutta la vecchiaia....

(editato deluca) Scusa per le correzioni... La vecchiaia sarà brutta ma devo dire che il tuo italiano sta andando benissimo :) magari imparassi io l'inglese allo stesso modo :)
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: 2560 e Modbus slave

Postby deluca » 21 Apr 2014, 12:05

@suibaf,
la libreria modbus.lib/lbx non fa alro che calcolare in assembly il crc del pacchetto da trasmettere, nient'altro.
L'istruzione Makemodbus concatena i byte in base alla funzione richiesta.....ma se la trovi limitante,
potresti provare a customizzare una function che svolge lo stesso lavoro....
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: 2560 e Modbus slave

Postby suibaf » 21 Apr 2014, 15:42

Deluca,
No non la trovo limitante, ma devo capire dove sbaglio. Ci sono delle cose che mi portano a pensare che c è qualcosa che non va!
A dopo!
User avatar
suibaf
 
Posts: 122
Joined: 08 Mar 2014, 09:55
Location: Lecce

Re: 2560 e Modbus slave

Postby js-bascom » 21 Apr 2014, 22:05

(editato deluca)
Ma almeno fai come i miei vecchi maestri e segnali in rosso... ;)
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: 2560 e Modbus slave

Postby suibaf » 21 Apr 2014, 22:11

Ecco un ultimo esempio, della funzione makemodbus. Il codice funziona, ho usato il timer0 per inviare i dati visto che non mi piace usare il waitms. Richiamo un makemodbus ogni circa 250 ms. Quello che non mi torna in questo esempio è che:
definisco una variabile byte Costante_plc = &H0A, ma quando la spedisco mi ritrovo nello stesso registro, oltre a 0A, anche un 1A che non ci dovrebbe essere a meno che non sbaglio qualcosa. Vi linko il codice ed un video.

Code: Select all
'-----------------------------------------------------------------------------------------
'rs485-modbus-master_2560.bas

'FS

'-------------------------------------------------------------------------------
$regfile = "m2560def.dat"                                   ' used micro
$crystal = 16000000                                         ' used xtal
$hwstack = 40
$swstack = 40
$framesize = 40
'-------------------------------------------------------------------------------

$lib "modbus.lbx"                                           ' specify the additional library
'the libray will call a routine for UAR0,UART1,UAR2 and/or UAR3.
'when you get an error message that a label is not found with _SENDCHAR3 or _SENDCHAR4 then add these labels
'when you later use these routines you might get a duplicate label error and then you need to remove them


Config Print2 = Portc.0 , Mode = Set                        'porta seriale per Modbus
Config Pinc.0 = Output

Rs485dir Alias Portc.0                                      'make an alias
'set direction register to output
Rs485dir = 0                                                ' set the pin to 0 for listening

'configure the second UAR for RS485/MODBUS. Make sure all slaves/servers use the same settings
Config Com3 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

'Configute the timer to use the clock divided by 1024
Config Timer0 = Timer , Prescale = 1024

'T = 256* precaler/fosc =256*1024/16000000 = 16,384 mS
'quindi sifnifica che ogni 16,384mS ci sarà un overflow

'Define the ISR handler (Interrupt Service Routine)
On Ovf0 Tim0_isr
'you may also use TIMER0 for OVF0, it is the same

Enable Timer0                                               ' enable the timer interrupt
Enable Interrupts




'use OPEN/CLOSE for using the second UART
Open "Com3:" For Binary As #3

'dimension some variables
Dim W As Word
Dim Contataore_send_plc As Byte
Dim 250ms As Byte
Dim Costante_plc As Byte
Dim Uid_card(4) As Byte


Costante_plc = &H0A
Uid_card(1) = &H1A
Uid_card(2) = &H2B
Uid_card(3) = &H3C
Uid_card(4) = &H4D

'Print "RS-485 MODBUS master"
Do




Loop


'///////////////////////INTERRUPT//////////////////////////////////////////////

'the following code is executed when the timer rolls over
'Qui faccio la rchiesta dei dati ogni 200ms
Tim0_isr:


   Incr 250ms                                               ' Spedizione dati al plc
   If 250ms = 15 Then                                       'ogni poco piu' di 250 ms

      Incr Contataore_send_plc


      If Contataore_send_plc = 1 Then Print #3 , Makemodbus(2 , 6 , 100 , Uid_card(1));

      If Contataore_send_plc = 2 Then Print #3 , Makemodbus(2 , 6 , 101 , Uid_card(3));

      If Contataore_send_plc = 3 Then Print #3 , Makemodbus(2 , 6 , 110 , Costante_plc );       'Costante per PLC

      If Contataore_send_plc = 4 Then Contataore_send_plc = 0

      250ms = 0

   End If

   Return

Close #3

_sendchar0:
_sendchar1:
_sendchar4:

   End


il video è questo: https://dl.dropboxusercontent.com/u/152 ... ture_4.flv
User avatar
suibaf
 
Posts: 122
Joined: 08 Mar 2014, 09:55
Location: Lecce

Re: 2560 e Modbus slave

Postby deluca » 22 Apr 2014, 08:07

@suibaf......
le variabili che passi al makemodbus devono essere a 16bit, quindi o integer o word.
Se li passi come byte la parte msb assumerà valori errati.

Purtroppo sull'help è riportato che è valido pure byte.
For function 06 which can only write a single register, this can be a byte or integer or word.


inoltre:
Code: Select all
If Contataore_send_plc = 4 Then Contataore_send_plc = 0

se=4 avrai sull'int handler del timer un dead-cycle.
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: 2560 e Modbus slave

Postby suibaf » 22 Apr 2014, 09:47

se=4 avrai sull'int handler del timer un dead-cycle.


Non è un problema, in questo caso, la tempistica non è importante.
Grazie
User avatar
suibaf
 
Posts: 122
Joined: 08 Mar 2014, 09:55
Location: Lecce

Re: 2560 e Modbus slave

Postby deluca » 22 Apr 2014, 10:20

@js-bascom, controlla le correzioni, adesso sono in rosso :D
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

PreviousNext

Return to BASCOM-AVR

Who is online

Users browsing this forum: No registered users and 3 guests

cron