Bellplast S.R.L Fabricante Argentin de ls prducts CAIPE www.caipe.cm Mdel: PROTOCOLO DE COMUNICACIÓN: En la red de PLCs CAIPE se usa el mdel maestr-esclav. Est significa que un únic dispsitiv inicia la cmunicación (maestr, que se halla en la cabecera de la red). De ls PLCs esclavs en la red sl un cntestará (aquel cuy identificadr cincida). Enlace: En el enlace, la PC inicia la cmunicación cn el blque de petición, y el PLC cuy identificadr cincide cn el slicitad respnde cn su blque de acknwlege. Ls blques intercambiads sn de una lngitud de 0 bytes, cn un r de ls s trasmitids en el ultim byte. El PLC tlera un tiemp máim de 0 mseg. entre y que trasmita la PC, pasad ese tiemp se descarta el blque. El PLC sl respnde cuand la petición es crrecta. -FORMATO DE LA RS: Puert A: Puert B: Baud rate: 00 Lngitud de la palabra: bits Numer de stp bits: Paridad: par (even) DTR: (Deshabilitad descnectad) Baud rate: 00 Lngitud de la palabra: bits Numer de stp bits: Paridad: n (nne) DTR: (Deshabilitad descnectad) NOTA: el siempre es de bits y mdels anterires de PLC sl tienen puert A a menr velcidad. PUERTO A PUERTO B Cmands: El prtcl de cmunicacines sprta ds tips de cmands: de acces pr blques y de acces puntual.
Ls cmands de acces pr blques direccinan tda la memria RAM del PLC (es decir las direccines abslutas desde 0 hasta ), cn blques de bytes cnsecutivs tmadas desde 0.Pr ejempl para direccinar byte a partir de la dirección de la memria usuari (0 eh he) se pide una cmunicación cn el blque nr. ( en he), sea /. La memria del PLC se divide en baja (de 0 a ) y alta (de a ).La memria baja a ser direccinada pr ls cmands de acces pr blques tiene la siguiente dispsición: eccines de la memria usuari de 0 a 0 0 AREA DE I/0 Y DE VARIABLES INTERNAS DEL PLC eccines de la memria usuari de 0 a (área reservada) eccines de la memria usuari de a 0F 0F 0FF 000 0F 00 0BF 000 0FFF AREA DE CONSTANTES Y ACUMULADORES AREA DE ESTADO DE TEMPORIZADORES Y CONTADORES AREA DE ESTADO DE CUENTA DE TEMPORIZADORES Y CONTADORES VARIABLES INTERNAS DEL BIOS (área reservada) El área de estad de cuenta de timers y cntadres, sn bytes que frman blques de bytes cada un, dnde cada cntadr timer cupa bytes para su valr de cuenta cn un numer que va desde 0 a.ls bits mas alts deben enmascararse en la recepción cn cers pues n tienen significad. Pr ejempl: Cuenta de Timer Cntadr : 00 bbbbbbbb (parte baja) 0 bbbbbb (parte alta) La memria alta del PLC cmienza en y cntinúa hasta. El área del teclad display alfanumeric cmienza en, y el final de la memria cupada pr éste se especifica en ls bytes 00Dy 00E, en parte alta y parte baja. NOTA: al leer ests s se ntará que las direccines sn del tip. Est se debe a que crrespnden a direccines abslutas en la memria del PLC. Pr l tant deducims que la dirección 0 del usuari crrespnde a la dirección 0000 en la memria del PLC. El final XXXX se especifica en 00D y 00E (0 y 0) ZONA RESERVADA TECLADO DISPLAY ALFANUMERICO XXXX Desde XXXX (l cupad pr el teclad-display alfanuméric) hasta la dirección 0FFF AREA DE MEMORIA ALTA USUARIO Ls cmands de acces puntual sl direccinan sbre el área de I/O y variables internas de la memria usuari del PLC,(entre 0 y 0).El valr que se le transfiere cm dirección es el de la parte baja y la parte alta
del numer de variable. Pr ejempl si se desea acceder a la dirección (0 en he) se le pasa un en el byte de parte alta y un 0 en el de la parte baja. Cmand de acces pr blque: LECTURA DE BLOQUE EN LA MEMORIA BAJA (cmand 0B he): Permite leer un blque de bytes de la memria baja del PLC(de 0 a 0BF) y parte de la alta (0E0 a 0FFF). Se le debe especificar para ell el, identificadr del PLC, el cmand y el numer de blque, cn el siguiente frmat: Identificadr únic del PLC en la red (le es asignad cuend es d ) Cmand Blque de memria al que se desea acceder ID 0B Bl................................................ r Operación XOR de ls primers bytes de este blque Blque de acknwlege (respuesta): ID 0B Bl 0 r El PLC en su blque de acknwlege respnde cn ls bytes del blque. El numer de blque se calcula cm se especific antes. Pr ejempls: para leer la dirección de la memria usuari, se debe pedir cmunicación cn el blque (/). ESCRITURA DE BLOQUE EN LA MEMORIA BAJA (cmand 0A he): Permite escribir un blque de bytes de la memria baja del PLC(de 0 a 0BF) y parte de la alta (0E0 a 0FFF). Se le debe especificar para ell el, identificadr del PLC, el cmand,el numer de blque, y seguid ls bytes a escribir cn el siguiente frmat: ID 0A Bl 0 r Blque de acknwlege: ID 0A Bl............................................. r El PLC en su blque de acknwlege respnde cn un 0 indicand transferencia efectuada cn un 0 si n se pud realizar.
LECTURA DE BLOQUE EN LA MEMORIA ALTA (cmand B he): Permite leer un blque de bytes de la memria alta del PLC(de 0000 a 0FFF), de la misma manera que cm se especific para leer blques en la parte baja. ID B Bl................................................ r Blque de acknwlege: ID B Bl 0 r ESCRITURA DE BLOQUE EN LA MEMORIA ALTA (cmand A he): Permite escribir un blque de bytes de la memria alta del PLC(de 0000 a 0FFF). Se le debe especificar para ell td tal, cual se definió para el cmand 0A(he) cn la diferencia de que ls blques se tman desde 0000. ID A Bl 0 r Blque de acknwlege: ID A Bl............................................. r Cmands de acces puntual: LECTURA BINARIA (cmand ): Lee a l sum valres de un byte en direccines de la memria usuari del PLC. Estas direccines se le especifican al PLC en el blque de interrgación, cm parte baja y parte alta respectivamente. El PLC en su blque de acknwlege respnde, cn ls valres de ess lugares memria ubicads en ls bytes de ls lugares crrespndientes a dnde se le indic su dirección. ID H L H L H L H L H L H L H 0 r Blque de acknwlege: ID 0 0 0 0 0 0 0 0 0 r
Cuand en una cmunicación se desea leer mens de bytes se deben especificar las direccines a las que se desea acceder y seguida de la ultima, enviar un (ff en he) en la parte alta de la dirección. ESCRITURA BINARIA (cmand ): Escribe a l sum bytes en la memria usuari del PLC. Se especifica dirección (parte alta y baja) y valr de cada byte. Pr cada byte a escribir el PLC devuelve en su blque de acknwlege un 0 ( en He) en el lugar del si se realiz la transferencia un ( en he) si hub un errr. ID H L H L H 0 r Blque de acknwlege: ID H L H L H H 0 r Cuand se desee escribir mens de byte l que se debe hacer es especificar en la parte alta de la próima dirección a la ultima un (ff en he). LECTURA ANALÓGICA (cmand ): Su us es similar a cm se describió en el cmand, cn la diferencia de que ls s sn de bytes. ID H L H L H L H L H L H L H 0 r Blque de acknwlege: ID l h l h l h l h l h l h l h l h 0 r ESCRITURA ANALÓGICA (cmand ): Su us es similar a l que se especific para el cmand, cn la diferencia de que ls s sn de bytes. ID H l h L H l h L H l h 0 r Blque de acknwlege:
ID H L H L H H 0 r Ejempl en VisualBasic Transmisión: If Blque > Then T() = &HB T() = Blque - Else T() = &HB T() = Blque Detecta a que área pertenece T(0) = Id T() = 0 Td = "" Fr i = 0 T T() = T() Xr T(i) Td = Td & Chr(T(i)) Net Td = Td & Chr(T()) XOR de ls primers bytes If MSCmm.PrtOpen = False Then If s.puert = A Then Au = ",e,," Else Au = ",n,," Au = CStr(s.Baudis) & Au MSCmm.Settings = Au MSCmm.DTREnable = False MSCmm.PrtOpen = True Si el Puert de la PC n estaba inicializad, l inicializ ya acrde a ls parámetrs MSCmm.Output = Td Ls s serán transmitids Recepción: La recepción es manejada pr event. Private Sub MSCmm_OnCmm() Dim Au As String, i As Integer, Ch As Integer, B As Byte Select Case MSCmm.CmmEvent Case cmeventframe, cmeventoverrun, cmeventrover, cmeventrparity, cmeventdcb ' Errres de cmm Au = MSCmm.Input MSCmm.InBufferCunt = 0 'Abrt RaiseEvent ErrrCmm(, "Crrupción en s recibids") Case cmevreceive ' Cada recibid tmrtout.enabled = False timer para detectar falla tmrtout.interval = 0 de cmunicación
tmrtout.interval = 0 tmrtout.enabled = True If MSCmm.InBufferCunt >= 0 Then tmrtout.enabled = False tmrtout.interval = 0 ' Prces R GetFrmMSCmm End Select End Sub Private Sub GetFrmMSCmm() Dim Au As String, i As Integer, Ch As Integer Dim L As Integer BufferR = BufferR & MSCmm.Input Au = MidB(BufferR,, 0) L = LenB(BufferR) BufferR = MidB(BufferR, 0, L - 0) 'Guard el rest Ch = 0 Fr i = T 0 If MidB$(Au, i, ) = "" Then Recuper s R(i - ) = 0 Else R(i - ) = AscB(MidB$(Au, i, )) Ch = Ch Xr R(i - ) XOR de verificación Net If Ch <> 0 Then MSCmm.InBufferCunt = 0 'Abrt Au = MSCmm.Input 'Clear RaiseEvent ErrrCmm(, "Ls s recibids n sn valids (n da checksum)") BufferR = "" 'Reset Eit Sub tmrwatchdg.interval = 0 tmrwatchdg.enabled = False RaiseEvent RespuestaPLC(R(0), R(), R()) End Sub