0
Πριν γράψετε ένα νέο θέμα στο φόρουμ, ψάξτε ->εδώ<-, κάτι θα βρείτε που δεν ξέρατε.
mikemtb (08-12-16)
την παραπανω εικονα που ανεβασα, την εφτιαξα βαση αυτης της εικονας που βρηκα στο datasheet του TLK31 που δειχνει να γειωνεις καθε slave. Αυτο που θελω να μ πει καποιος αν ξερει, είναι αν έκανα στην εικονα σωστα τη συνδεση, δηλαδη απο τον εναν slave πάω στον αλλον? ουσιαστικα δλδ στα pins τους εχω 2 καλωδια, ενα που ερχεται και ενα που φευγει?
παρακατω η εικονα απτο datasheet και αυτη που ειχα ανεβασει και πιο πριν
datasheet:
234.jpg
δικια μου:
sd34.jpg
Το δοκιμασα με 2 slaves και πετυχε κατευθειαν. Χρησιμοποιησα μια βιβλιοθηκη simple modbus master οπου ξοδεψα βεβαια αρκετη μελετη ωστε να καταλαβω το πως δομω τα πακετα που θα στελνω, πως θα χρησιμοποιω τις συναρτησεις της, πως λειτουργει γενικα η βιβλιοθηκη κλπ, παντως εν τελει στεφθηκε με επιτυχια. Τωρα θελω να ρωτησω τα εξης:
1) υπαρχει περιπτωση να "υπερφορτωθει" καπως ο διαδρομος δεδομενων και αρα να μην λαμβανω τις τωρινες τιμες?
2) στη βιβλιοθηκη που χρησιμοποιησα μεταξυ αλλων οριζω δυο παραμετρους μεσα στον κωδικα μου, το timeout value και το polling delay.
Η πρωτη λεει πως ειναι
"the time allowed for a slave to respond in. Common values are 1000ms β 5000ms "
και η δευτερη λεει πως ειναι
"the resting period between requests from the master to allow a slave to enter its idle state. This is because a
slave also runs on an FSM and can only start responding to a request once the idle state is reached.
Some quick acting slaves will revert to the idle state within 10ms but the usual slave will take around
100ms β 200ms.
The polling delay can be reduced as the amount of slaves increase on the bus line due to the inherent
delays when polling more than 2 or 3 slaves. The polling delay can also be used as a βscan rateβ between
packets. I.e. increasing the polling delay allows more time to pass before the next packet is fetched"
Εγω ωστοσο εχω βαλει delay στην loop του arduino καθε 2 second. Πως αλληλεπιδρα το delay αυτο με τα παραπανω? Θελω να πω, πως αφου εγω στελνω πακετα απτο arduino καθε 2 second, τι ρολο παιζουν τα δυο παραπανω? (timeout value και polling delay)
Το polling ειναι ο χρόνος μεταξύ 2 ερωτήσεων της θερμοκρασίας πχ. Αν το βάλεις 200msec θα ρωτάει κάθε 200ms, έτσι νομίζω.
Θα πρέπει να μας πεις αν τρέχεις στη main function τη βιβλιοθήκη η μέσα σε κάποιο ιντεραπτ .
Αν την τρέχεις μέσα στο ιντεραπτ δεν επιτρέπεται από το delay στη main
Την βιβλιοθηκη την κανω include στην αρχη πανω πανω, πριν την setup και την loop. και μετα χρησιμοποιω τις συναρτησεις της.
σε ενα σημειο μεσα στην setup, αφου εχω δομησει τα πακετα, τους πινακες κλπ κανω αυτο:
modbus_configure(&Serial, baud, SERIAL_8N2, timeout, polling, retry_count, TxEnablePin, packets,TOTAL_NO_OF_PACKETS, regs);
με το οποιο οριζω τις παραμετρους που χρειαζεται η βιβλιοθηκη για να κανει την επικοινωνια
Eπειτα με την εντολη modbus_update(); ΜΕΣΑ στην loop στελνω ουσιαστικα τα πακετα, δηλαδη καθε που κανω update, στελνονται. Αυτο εγω το κανω καθε 2 second, αφου εβαλα στην loop, delay 2 δευτερολεπτων. Εχω μπερδευτει καπως με αυτο το θεμα