Newsgroup: it.comp.lang.visual-basic
Titolo: VBasic e Sbus

Ciao a tutti
Qualcuno si e mai cimentato con il
protocollo S-Bus attraverso la seriale del PC?
mi basta anche un link a un applicazionie che lo tratti...
Grazie
AlxPD

 protocollo S-Bus attraverso la seriale del PC?
O SBus o Seriale.
Essendo due modalità hardware di comunicazione, non capisco come si 
faccia a avere contemporaneamente SBus e Seriale.
A meno che tu con SBus non intenda qualche protocollo che non conosco. 
Così a braccio, potrei pensare ad un Siemens ModBus (giusto perchè così 
c'è la S davanti e Bus alla fine...).
Prova a dare qualche informazione in più.
Ciao
Alberto
-- 
A questo punto hanno trovato un muro,
un muro duro, molto molto duro,
che siamo noi.

 ha scritto nel messaggio
news:mn.bb3d7d63b...@hotmail.com...


Alx PD
Ciao Alex,
guarda se ti può servire, probabilmente non è quello che cercavi come S-Bus, ma
la struttura base del ProfiBus, ModBus, ecc. è simile.
http://www.it-lang-vb.net/download.asp?file=http://www.it-lang-vb.net/Archivio/Sorgenti/ModbusRTU.zip&ID=644


Ti ringrazio del link
Infatti ne avevo gia approfittato...
A dire il vero la mia richiesta è stata volutamente una " presa alla
larga"...
Il vero problema non è tanto SBus... ma il calcolo del crc CCITT ( credo)
Ho anche della routines gia fatte (non so per che micro) e degli schemi
logici
ai quali mi sto ispirando e bada ben : due moduli della Saia-Bergess che
comunicano
con tale bus...
Quindi visto che la richiesta che sto inviando a tali moduli è semplicissima
mi resta solo da pensare che la mia routines non calcoli un CRC corretto...
Ho trovato anche in rete dei programmini che calcolano il CRC
il problema è che ragionano sempre in codifica ascii mentre SBus
usa tutti i codici HEX (8bit) e il codice 0x00 ( fuori ascii) è fondamentale
per la richiesta e quindi non posso nemmeno usarli...
Quindi sono un po' impacciato vado avanti anche a tentativi...
Sto aspettando anche una risposta con un esempio che mi permetta
di verificare se effettivamente sono io che calcolo male...
Il modBus l'ho gia fatto e li il normale  CRC16 è tutto ok
Mah speriamo che a forza di insistere e cercare, riesco a uscirne...
Grazie ancora
Alx PD

Il modBus l'ho gia fatto e li il normale  CRC16 è tutto ok
Ti posso mettere delle routines che uso per calcolare il CRC nella comunicazione
con bus diversi:
In particolare la seconda per le norme DIN 66019, l'ultima per un vecchio
dispositivo che usava una stringa con lo XOR.
ciao
  Stefano
_______________________________
Public Sub CckSum(ByVal StrInp As String, ByRef BccSum As String)
 Dim cKsum  As Long 
 '    cKsum = 0
     For x = 1 To Len(StrInp) Step 2
       cKsum = cKsum + Val("&H" & Mid$(StrInp, x, 2))
    Next x
   BccSum = Right$("0" + Hex$(cKsum), 2)
End Sub
_______________________________
Public Function CrCC(ByVal InSt As String) As Long
 Dim T As Byte, Bcc As Long  'da STX+1 fino a ETX
'STANDARD DI COMUNICAZIONE SECONDO DIN 66019
'STX = 02       ;INIZIO TRASMISSIONE
'ETX = 03       ;FINE 
 Bcc = 0
 For i = 2 To Len(InSt) 'Step 2
  T = Asc(Mid$(InSt, i, 1))
    Bcc = Bcc Xor T
    If Asc(Mid$(InSt, i, 1)) = Etx Then Exit For
 Next
   If Bcc < &H20 Then Bcc = Bcc + &H20
 'InSt = InSt + Chr$(Bcc) + Chr$(0) ' + Chr$(0)
CrCC = Bcc
End Function
_______________________________
questo è QuickBasic, ma usa lo XOR per il CRC:
_______________________________
'linea: STX,adL,adH,OpSp,[dd],ETX,BCC  (tutti ASCII escluso STX,OpSp,ETX,BCC)
'calcolo Block Check Character BCC CHECKSUM
'CHECKSUM = LE PRIME DUE CIFRE ESADECIMALI DELLO XOR ALGEBRICO
'x$ = "0390B72836EB21FF03ED52010004ED5BE972026C": GoSub ClcBcc
ClcBcc:
 Bcc = 0
 FOR I = 3 TO LEN(x$) STEP 2: T = HexNum(MID$(x$, I, 2))
   Bcc = (Bcc XOR T) AND &HFF
    IF CVI(MID$(x$, I, 2)) = ETX THEN Bt = CVI(MID$(x$, I + 2, 2)): EXIT FOR
 NEXT
 
 IF Bt <> CVI(RIGHT$(HEX$(Bcc), 2)) THEN
   PRINT " checksum error "; RIGHT$(HEX$(Tot), 2)
   PRINT #1, " checksum error "; RIGHT$(HEX$(Tot), 2)
 END IF
RETURN

 questo č QuickBasic, ma usa lo XOR per il CRC:
