Vai al contenuto
PLC Forum


Comunicazione tra PC e OMRON in visualbasic


elettrone

Messaggi consigliati


elettrone+Sep 13 2002, 10:02 PM-->
CITAZIONE(elettrone @ Sep 13 2002, 10:02 PM)

quello che ti posso consigliare

e' di trovera una ocx (activex ) che fa quel lavoro

oppure usare OPC

se vuoi saperne di +

chiedi alla mail list di VB

una risposta la otterrai sicuramente

ciao luciano

Link al commento
Condividi su altri siti

Prova così:

Carica il controllo MSComm in un Form, poi...

'============================================================================

=======

'Un pulsante per aprire la porta

MSComm1.CommPort = 1'NumeroPorta

MSComm1.Settings = "9600,e,7,2"

MSComm1.InputLen = 0

MSComm1.PortOpen = True

'============================================================================

=======

'Un pulsante per inviare la richiesta di lettura della DM123 fino alla 143

dim NumeroDM as string

dim PrimaDM as string

dim send as string

dim rec as string

dim risposta as string

PrimaDM="0123"

NumeroDM="0020"

Send = "[at]" + "00" + "RD" + PrimaDM+NumeroDM

Send = Send + ControlloFcs(Send) + "*" + Chr$(13)

MSComm1.Output = Send

Do

DoEvents

Loop Until MSComm1.InBufferCount > (10 + (Val(NumeroDM) * 4))

Rec = frmUp.MSComm1.Input

Do

DoEvents

Loop Until Mid$(Rec, 1, 3) = "[at]00"

'Se sei qui allora va bene, prevedi comunque un timeout, un controllo o un comando per uscire dai loop

risposta = Mid$(Rec, 8, (Len(Rec) - 11))

me.caption=risposta

'============================================================================

=======

'scrivi in un modulo questa funzione, oppure dove vuoi basta che si "vede" :)

Public Function ControlloFcs(TestoFcs As String)

l_fcs = Len(TestoFcs)

a = 0

For j_fcs = 1 To l_fcs

TJ$ = Mid$(TestoFcs, j_fcs, 1)

a = Asc(TJ$) Xor a

Next j_fcs

FCSI$ = Hex$(a)

If Len(FCSI$) = 1 Then FCSI$ = "0" + FCSI$

ControlloFcs = FCSI$

End Function

Questo è un esempio fatto più o meno a memoria,dovrebbe funzionare.Se non funziona è

perchè ho fatto qualche ciofegata,in ogni caso il senso è questo.

Ciao :)

Link al commento
Condividi su altri siti

se non sbaglio sul manuale host link omron ci sono degli esempi su come indirizzare le varie aree di memoria oltre che i dm.

a questo punto prendi il sorgente che ti ha dato dago, e cerchi di leggere il canale degli I/O. In omron l'immagine degli ingressi e uscit sono su canali che puoi utilizzare anche come memorie durante la programmazione se non sono utilizzati come i/O(credo...).

Ciao M.

Link al commento
Condividi su altri siti

  • 4 weeks later...

Il manuale OMRON e' OMW228-I1-3A (PLC SYSMAC CQM1/CPM1 MANUALE DI PROGRAMMAZIONE) , se vai al capitolo 6 (Pag. 293) sono indicati i comandi HOST LINK (Cosi' si chiama il protocollo) e utilizzando le istruzioni di DAGO puoi modificare facilmente il sorgente per leggere/scrivere IR/LR/HR/DM e tutto quello che ti pare.

Esempio Lettura IR

1) Spedisci sulla porta di comunicazione con settaggi 9600,e,7,2

La stringa da spedire e'

[at]

0 + N° Nodo : In questo caso nodo 1 (I nodi vanno da 1-32)

1 +

R +Codice comando lettura IR

R +

0 +

0 : N° Canale di partenza in Decimale (In questo caso dal Canale 1)

0 : Valori in decimale

1 +

0 +

0 : N° Canali da leggere (2) Quindi legge Canale 1 e Canale 2

0 : puoi leggere max. 256 canali alla volta

2 +

+ Due caratteri dell'FCS che e' uno XOR dei codici ASCII di tutti

+ i caratteri scritti fino ad ora convertiti in HEX maiuscolo

*

chr(13)

Ti risponde con

[at]

0 + Numero Nodo

1 +

R + Codice Comando

R +

0 + Codice Errore in esadecimale

0 +

0 +

0 : 1° Valore Letto in esadecimale

0 :

0 +

0 +

0 : 2° Valore Letto in esadecimale

0 :

0 +

0 +

0 : xx Valore Letto in esadecimale

0 :

0 +

+ Due caratteri dell'FCS che e' uno XOR dei codici ASCII di tutti

+ i caratteri scritti fino ad ora convertiti in HEX maiuscolo

*

chr(13)

Esempio calcolo FCS in C

BSTR CCONV mk_fcs(BSTR Buff)

{

BSTR FCS; // Stringa

LPSTR s;

long fcs = 0L;

int i = 0;

s = (LPSTR) Buff;

while(s != '\0')

{

fcs ^= (long) s;

i++;

}

FCS = SysAllocStringByteLen(NULL,2); // Bisogna dare il giusto numero senza il '\0' finale !

s = (LPSTR) FCS;

wsprintf(&(s[0]),"%02X",fcs);

return FCS;

}

per L'FCS in VB fai riferimento al codice di Dago che va benissimo.

Se non ti interessano le spiegazioni che in molti ti hanno gia' dato (inclusi sorgenti) perche' non le puoi capire o solo perche' vuoi la pappa fatta chiedilo apertamente che se qualcuno intende dartele te le da altrimenti comprati uno scada , ma smettila di lamentarti dicendo che non ricevi risposte.

Grazie

Link al commento
Condividi su altri siti

  • 2 weeks later...

secondo me faresti bene a prender visione del CX-Supervisor non fara grandi cose ma lo danno a prezzo modico, pure le licenze (punti illimitati!!!) li tutto è semplice da gestire :D

Link al commento
Condividi su altri siti

  • 2 weeks later...

Anche io sto cercando di creare un programma che invii dati alle DM con VB, è un plc omron CQM1H-CPU11 , il manuale omron è chiaro, le vostre indicazioni anche ma non sono riuscito nell'intento, pensavo a un problema di setup del plc o di hardware (questo modello ha una sola porta pheriferica), ma niente da fare, eppure una soluzione ci sarà?!

Se qualcuno ha possibili soluzioni o esperienze ......

Grazie, Ciao!

Link al commento
Condividi su altri siti

Si, d'accordo, un motivo c'è, ma non possiamo pretendere tutto.

Anche se a volte con delle limitazioni, tutto quello che viene suggerito è sempre un tassello in più alle nostre conoscenze.

Comunque tornando al nostro problema, se qualcuno ha già realizzato qualcosa di funzionante, (anche pagando) la mia casella di posta è

puntozanzariere.it]postmaster[at]puntozanzariere.it

Ciao!

Link al commento
Condividi su altri siti

Gabriele Corrieri

Ciao a tutti,

scusate l'Off Topic ... ma la risposta di elettrone me ne ha dato lo spunto, non so il taglio che voleva darne, però è abbastanza logico che perde giornate intere a sviluppare e ottimizzare blocchi di regolazione, o software in generale non è disposto a regalare a tutti il risultato.

Mi sembra ovvio, a chi piacerebbe farlo? Possiamo regalare un 'demo' della cosa, chi è dall'altra parte potrà valutare se la cosa è di suo gradimento o meno, per lo shareware si rischia sempre che lo si usa e si 'dimentica' di chi l'ha fatto ...

Armand ha inteso la cosa in pieno, io non posso aiutarti in quanto sono proprio fuori dal mondo Omron, ma penso che ci siano persone qui che possano risolvergli il problema.

D'altronde non esiste la PLCForum srl ... :) che sviluppa software (potrebbe essere un'idea ... :) ) qui ognuno dà quel che sa e quel che può dare: molto spesso i nostri datori di lavoro pretendono che il nostro prodotto rimanga a loro (come è giusto che sia) anche se è fatto da noi.

Ciao

Link al commento
Condividi su altri siti

  • 3 weeks later...

Ho usato il codice di Dago, funziona, ma non so per quale motivo riesco solo ad inviare comandi al cqm1h (ad esempio scrivere le DM), ma di ottenere una risposta non se ne parla. Nemmeno con l' instruzione txd che con il programma scollegato la spia della porta periferica segnala l'invio, col programma attivato no. Il setup del plc sembra corretto. Secondo voi dov'è il problema?

Ciao! :blink:

Link al commento
Condividi su altri siti

Armand+Nov 30 2002, 06:10 PM-->
CITAZIONE(Armand @ Nov 30 2002, 06:10 PM)

Hai controllato i cavi ?

PIN PLC 9 MASCHIO PIN PC 9 FEMMINA

TX 2 ----------------- 2 RX

RX 3 ----------------- 3 TX

GND 9 ----------------- 5 GND

RTS 4 --+ +-- 4

CTS 5 --+ +-- 6

DSR 7 --+ +-- 7

DTR 8 --+ +-- 8

Hai controllato i parametri della seriale ?

Host Link

9600,E,7,2

Hai controllato se collegandoti su quella porta con il Syswin o il Cx Programmer riesci a 'vedere' il PLC ?

Se vedi il PLC prova a vedere se il PLC ti ritorna qualche valore o e' muto.

Un saluto

Link al commento
Condividi su altri siti

Armand+Dec 9 2002, 07:21 PM-->
CITAZIONE(Armand @ Dec 9 2002, 07:21 PM)

Se col Syswin/Cx Programmer riesci a Programmare , con lo stesso cavo e la stessa seriale del PLC la comunicazione DEVE funzionare.

Mi dici se lavori sulla porta programmazione o sulla seriale incorporta / modello di CPU , hai controllato i parametri della porta su cui lavori (9600,e,7,2) anche se lavorando con SYswin & co dovrebbe eseere giusta , hai provato con un'altra porta del PLC o coun un altro modello di PLC anche se io col CQM1H e C200HS lo ho testato e di sicuro va ....

Saluti al forum

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...