rev 03 16-04-2014
rev 02 dec2012

V.O. 1995 !

Test dialogue entre PIC18F258 Modbus Maitre
et esclave Entrelec ITB 8EST

Cote Equipement Esclave Modbus RTU :
Entrelec ITB 8EST

Interface comprenant 4 E, 4 S et 8 E.A.
Ce module (ancien) est maintenant (amelioré et ) commercialisé par
LEROY Automation (voir documentation, gamme TES )
Alimentation 24V (ici 18,5V seulement ..fonctionne encore correctement !)
Liaison RS232 tension via DB9 femelle sur le module : ATTENTION connectique specifique ,car liaison RS485 sur ce meme connecteur.
2 leds TX RS232 et RX 232 temoigne de l'echange correcte du dialogue .
SI Rx ne clignote pas suite à un TX : => requete non reconnue ou PB de com !

ITB avec cables d'adaptation et alim Montage de test (proto)
ITB avec cables d'adaptation et alim Montage proto du PIC18F258


Cote PIC, Maitre Modbus:
montage proto sur platine LAB500 :
1 PIC18F258 (ou autre PIC ayant suffisament de RAM) bootloader supprimé, car usage du Pickit2
1 quartz de 20Mhz encadre par 2x22pF
1 liaison UART Hardware 9600,E,8,1 sur RC7 et RC6 -> driver RS2323 DS275 ->
cable special pour DB9M 9-4-5 (au lieu de 2-3-5)
1 Liaison UART Software 19200,N,8,1 sur RB4 et RB5 -> driver RS232 DS275 -> terminal VBray en reception
Outils :
Mplab IDE 8.84 + MPLAB C18 3.41 + Pickit 2.61
Terminal Vbray sous windows XP
Alim 5V pur montage PIC
Alim 18,5V de PC portable ,pour le module ITB (devrait etre de 24V!)
Divers logiciels de test Modbus

1 simple macro avec le terminal VBRAY version demo version demo

Fonctionalités:
Le terminal VBRAY affiche les trames : emise par le PIC et la trame de reponse, en reception, emise par le module ITB
Seule la reception est utilisée sur le terminal : 3 et 5 de DB9, c'est le PIC qui redirige les flux.
Si le CRC16 calculé sur le début de trame de reception est identhique à celui figurant en fin de trame,
l'echange est correct et 1 led clignote (s'inverse !) pour le signaler
L'echange porte uniquement sur la recuperation du STATUS adresse 000h
Le CRC16 calculé est affiché pour comparer à celui recu.
La reception du byte representant les 4 entrees : affichage en Hexa et en binaire
La reception des 8 entrees Analogiques
La possibilité de commander les 4 sorties via le clavier terminal ,non bloquant, car geré par timeout de 3,5secondes:
via modif librairie SW_UART
valeur 0 à 9..F en hexadecimal pour action sur les 4 sorties O0 à O3 : 0 => 4 leds eteintes F =4 leds allumees
Ce programme est etalé lineairement, donc absolument pas optimisé, mais fait ainsi pour etre mieux compris.
Le status permet de detecter les erreurs de com , et l'etat des requetes est controlé. Message OK

Une tres petite partie des possibilites du module (ITB) TES est utilisee dans cette appli.
mon but etant plutot de mieux comprendre et maitriser le protocole Modbus


Aleas rencontrés:
*attention à l'ordre de pins suivant que le DB9 est DTR ou DTE
De plus cordon special sur ITB !
*Bien inverser MSB et LSB du CRC16 calculé pour le comparer ensuite avec celui recu
*usage de la parité PAIRE dans la com avec l'ITB => routine specifique , sino NEVER COMPRENDO par l'ITB
*CRC16 bigorné en fonction de la valeur analogique lue =>
buffer etait declaré en char au lieu de unsigned char
*Utilisation de l'UART software : ne pas oublier de
regler les timmings de bit (ex TXBit) en fonction du Quartz (clock) et
verifier l'affectation des pin pour Tx et Rx dans SW_UAR.asm Possible d'utiliser d'autres PIN que RB4 et RB5
*Probleme d'oubli de casting de variable : ex Entier recevant un byte manipulé
*Ne pas melanger les
fonctions d'envoi de car suivant ITB (avec parite) ou Terminal (Normal sans parité)
*
Respecter le delai de retournement apres l'envoi de la requete , sinon reponse bizarres!
* Probleme sur rajout timeout LectUSART : il manquait le parametre a=1 dans le test du bit INTCON,TMR0IF !
*Probleme avec mplib pour inclure lectuart dans la librairie p18f258
.. il faut le chemin ..\bin\mplib.exe pour ne pas avoir d'erreur, bien que mplib tout seul delivre bien l'aide associée

Petit MEMO pour modif. LIBRAIRIE

but : Modification de la librairie C18 SW_UART
afin de pouvoir rajouter la commande des Sorties TOR ITB EST.
L'UART Hardware , modilisé pour le dailogue Modbus, traite les lectures Trames modbus en interrupt..
mais le Software UART ne peut les traiter qu'en mode pooling, donc forcement dans une boucle d'attente...
à moins d'utiliser RB0 comme pin RX !! ,mais ce sera pour la prochaine fois!

C'est une premiere pour moi ! mais heureusement il y a un air de famille dans la demarche, avec le TURBO C2.00
Routine assembleur semblable à Readuart.asm, sauf le rajout de la detection de timeout de Timer0
pour echapper à la boucle sans fin, si aucun caractere provenant du termianl Vbray n'arrive sur l'Uart Soft .
Le Timer0 est initialisé par defaut à 3,5sec @ 20Mhz valeur Trm=0000h autoreinitialisé avec debordement FFFFh
dans le main du programme.
Aller dans le directory contenant les sources de la librairie SW_UART
C:\Program Files\Microchip\mplabc18\src\pmc_common\SW_UART\readuart.asm
recuperer une copie de Readuart.asm , apporter les modifs et le copier en
lectuart.asm

Attention specifier dans le code asm si le test se fait sur registre SFR ou RAM donc a=1
je me suis fait piégé, le test ne marchait pas avec btfsc INTCON,TMR0IF
C:\Program Files\Microchip\mplabc18\h\sw_uart.h

Recuperer le header sw_uart.h pour y inserer LectUART.
C:\Program Files\Microchip\mplabc18\h\sw_uart.h

Recuper un fichier batch pour recompiler l'asm et integrer l'objet dans la librairie p18f258 (seulement)
Libre à vous si vous voulez l'integrer pour tous les processeurs 18F
C:\Program Files\Microchip\mplabc18\src\make_one_device_t.bat
Le recuperer, copier modifier sous un autre nom : ex:
make_SW_UART_p18f258.bat
afin de ne modifier qu'une seule librairie (dans mon cas perso).

dans une fenetre de commande c:\windows\systeme32\cmd.exe , lancer le fichier bat



Verification integration :

..\bin\mplib.exe /t ..\lib\p18f258.lib > p18f258_lib.txt
en fin de fichier p18f258_lib.txt listant tous les membres de la bibliotheque
on retrouve bien : lectuart.o


On peut donc maintenant utiliser LectUART dans le main du programme C18



pas d'erreur à la compil si LectUART est bien intgré..


Le programme et annexes :
source :
18F258_Modbus_ITB_C18_121130.c en C18
chargeur :
18F258_Modbus_121201.hex
log sur terminal :
20121201_ITB.log
listing membres bibliotheque :
p18f258_lib.txt
fichier objet :
Lectuart.0

RESULTS :

Resultat dialogue bidirectionnel entre Maitre et esclave Resultat dialogue bidirectionnel entre Maitre et esclave PIC en action sur ITB
exemple usage de CRC16_3.exe dans une fenetre DOS (sous XP) Resultat sur terminal ITB en live, liaison avec PIC

programme CRC16_3.exe en TBAS
source
CRC16_3.bas


A voir sur le site http://www.leroy-automation.com
tabdial32_fr_setup_exe
Tesis32.exe


Modbus reference


Test avec PIC16F877 Esclave (en MikroC) ici

retour à l'index général