Ascii en delphi sur le port serie

Résolu
totalhackerz Messages postés 33 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 30 octobre 2007 - 1 sept. 2006 à 18:09
totalhackerz Messages postés 33 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 30 octobre 2007 - 6 sept. 2006 à 03:42
Bonjour,
je voudrai savoir si quelqu'un ces comment je pourai envoie mes donner en ascii a une platine relait ?
le code en Quick Basic :

DIM inbuf(800)
OPEN "com1,19200,n,8,1,bin,cs,ds" FOR RANDOM AS #1
PRINT #1, CHR$(3) + CHR$( 1) + CHR$(1) + CHR$(3)
END

je n'arrive pas a refaire le code PRINT #1, CHR$(3) + CHR$( 1) + CHR$(1) + CHR$(3) en delphi 6

merci davance

19 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
2 sept. 2006 à 01:17
L'equivalent de PRINT #1, CHR$(3) + CHR$( 1) + CHR$(1) + CHR$(3)
est: write(nom_du_fichier, chr(3) + chr(1) + chr(1) + chr(3));
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
3 sept. 2006 à 20:39
Bon alors je vais deja traduire certaine ligne en Delphi, avant de jeter un coup d'oeil à tes documents:

outbuf(0) = 3
outbuf(1) = 1
outbuf(2) = 1
outbuf(3) = outbuf(0) XOR outbuf(1) XOR outbuf(2)
PRINT #1, CHR$(outbuf(0)) + CHR$( outbuf(1)) + CHR$( outbuf(2)) + CHR$( outbuf(3))

var
  outbuf: array[0..3] of byte;
begin
outbuf[0] : = 3;
outbuf[1] := 1;
outbuf[2] := 1;
outbuf[3] := outbuf[0] xor outbuf[1] xor outbuf[2]; // Donne 3 apres calcul

... (chr(outbuf[0]) + chr(outbuf[1]) + chr(outbuf[2]) + chr(outbuf[3]))
3
totalhackerz Messages postés 33 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 30 octobre 2007
2 sept. 2006 à 18:39
je te remerci sa maide bien mais jai encors un gro sousi!
si je fait avec le RSCOM.dll:

var send:string;
begin
send := (chr(3) + chr(1) + chr(1) + chr(3));
sendByte(send); // il me dit : TYPE IMCOMPATIBLE 'Integer' et 'String'
//ou
TXD(send); // il me dit: TYPE IMCOMPATIBLE 'Word' et 'String'

alors je suis inpeut perdu! si quelqu'un connai le moin de changer la variable en Word en gardant les carreter ASCII se sera cool merci
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
2 sept. 2006 à 18:53
Au vu de la fonction, tu dois mettre un type integer dedans, je vois pas comment transformer une chaine (non numérique) en integer. Peut-être comme ceci (attention, je risque de dire une bêtise) :

sendByte(3);
sendByte(1);
sendByte(1);
sendByte(3);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
totalhackerz Messages postés 33 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 30 octobre 2007
2 sept. 2006 à 18:57
jai essai sa marche pas!
il faut que jenvoie tt les donner ascii au la platine relait! donc deja je peut oublier pour envoier les donner en plusieur foit!
et si je fait comme tu ma dit il envoie les donner 3 1 1 3 et il les faut en ascii!
mais merci quant meme
0
totalhackerz Messages postés 33 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 30 octobre 2007
2 sept. 2006 à 19:00
merci pour le lien je les deja vue, il maide bien pour la création de la connextion mais pour les envoie en ASCII il me dit pas grand chose!
dsl javai plus de reponce sur lautre post, et le sujet et plus le meme, vue ke mtn je cherche a envoie les donner sur le port TXD en ASCII
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
2 sept. 2006 à 19:06
Est-ce que la procedure SENDSTRING fonctionne ?
0
totalhackerz Messages postés 33 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 30 octobre 2007
2 sept. 2006 à 19:09
deja essai marche pas!
procedure SENDSTRING (Buffer: PChar);
stdcall; external 'RSCOM.DLL';
il faut les donner en PChar et moi jarrive juste a les mettre en ASCII en metten la variable sur string;
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
2 sept. 2006 à 19:10
As-tu essayé ceci:

SendString(PChar(chr(3) + chr(1) + chr(1) + chr(3)));
0
totalhackerz Messages postés 33 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 30 octobre 2007
2 sept. 2006 à 19:14
sa pas lair de marcher!
il y a rien du tous qui se passe, mais il me dit aucune erre alors sé deja bon signe! mtn reste a voire si il envoie bien les donner sur le port TXD avec la commande sendstring
merci
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
2 sept. 2006 à 22:18
Sinon, pour envoyer '1' en ascii, il suffit d'écrire SendByte(Ord('1'));
Pareil pour tous les autres caractères.
0
totalhackerz Messages postés 33 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 30 octobre 2007
3 sept. 2006 à 14:05
je vien dessai ses tjr pareil il veut pas, il envoie bien la donner en ascii mais pas sur le bon port TXD ,mais la bonne nouvelle ses qu'il me dit aps qu'il y a des erre meme si je mais une variable a lintérieu "SendByte(Ord(chaine)); "
0
totalhackerz Messages postés 33 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 30 octobre 2007
3 sept. 2006 à 19:53
voila plus d'info:
jai la platine relait de chez Conrad LeC http://www.conrad.fr/Composants/Automatisme/Automates-programmables/Carte-de-relais-pour-commutation.html
dapre le livre il me disse que je doit transmettre une serie de 4byte

Byte 0            Byte 1                        byte2       Byte3 
Commande -  adresse de la paqute - Donner - total de controle (XOR)
3                    1                                 1            3

le code QuickBasic :

CLS
DIM inbuf(800)
DIM outbuf(3)

OPEN "com1,19200,n,8,1,bin,cs,ds" FOR RANDOM AS #1

outbuf(0) = 3
outbuf(1) = 1
outbuf(2) = 1
outbuf(3) = outbuf(0) XOR outbuf(1) XOR outbuf(2)

PRINT #1, CHR$(outbuf(0)) + CHR$( outbuf(1)) + CHR$( outbuf(2)) + CHR$( outbuf(3))

END

je vous passe aussi le lien où jai mit des foto du texte du livre,ainsi que l'exemple en QuickBasic, tu deverai trouver tous les info et peut etre comprend mieu faut moi lol
http://lefouduroi.fr/portserie/CIMG2330.jpg
http://lefouduroi.fr/portserie/CIMG2331.jpg
http://lefouduroi.fr/portserie/CIMG2332.jpg
http://lefouduroi.fr/portserie/CIMG2333.jpg
http://lefouduroi.fr/portserie/CIMG2334.jpg
merci davacen
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
3 sept. 2006 à 20:50
A la lecture du code BASIC, je me demande un truc: as-tu initialisé la platine ?
Initialise come ceci:

En global:
var
  outbuf: array[0..3] of byte;

// Initialisation
outbuf[0] := 1;
outbuf[1] := 1;
outbuf[2] := 0;
outbuf[3] := outbuf[0] xor outbuf[1] xor outbuf[2]; // Donne 0 apres calcul
SendString(PChar(outbuf[0] + outbuf[1] + outbuf[2] + outbuf[3]));
sleep(2000); // Je crois que la boucle sert à faire patientez le soft, je vois pas son utilité sinon

// Envoi
outbuf[0] := 3;

outbuf[1] := 1;

outbuf[2] := 1;

outbuf[3] := outbuf[0] xor outbuf[1] xor outbuf[2]; // Donne 0 apres calcul
SendString(PChar(outbuf[0] + outbuf[1] + outbuf[2] + outbuf[3]));
sleep(2000); // Je crois que la boucle sert à faire patientez le soft, je vois pas son utilité sinon
0
totalhackerz Messages postés 33 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 30 octobre 2007
3 sept. 2006 à 21:10
alors oui en tous 1ere il faut initialise la platine avec la commande 1 1 0 0
ensuite on le fait un delay (sleep) pour pas lui envoier tous de suite tro de donner sinon il risque de saturer , ensuite on envoie donc les info sur le relait à enlanché 3 1 1 3
outbuf(0) = 3 // 3 signifi le type de commande (voire lien http://lefouduroi.fr/portserie/CIMG2331.jpg )
outbuf(1) = 1 // on choisi le numero de la platine de 1 à 255
outbuf(2) = 1 // on choisi le relait à enclancheroutbuf(3) 3  //( a XOR des 3outbuf)

voila inpeut le principe de fonctionnement !
0
totalhackerz Messages postés 33 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 30 octobre 2007
4 sept. 2006 à 03:48
apres essai de plusieur facon que tu ma donner, des que je veut envoie les donner le logiciel plante en mettant errer sans plus dinfo!
a mon avie ses la variable SendByte(Pchar.... qui ne passe pas du tous!
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
4 sept. 2006 à 15:58
Tu as essayer de le tracer ? (touche F5, F7, F8) Si tu ne sais pas tracer un programme, aucun probleme, met des ShowMessage('msg') à toutes les lignes et regarde à quelle ligne exactement ton logiciel plante.
C'est SendString et pas SendByte... (erreur de frappes je suppose). De plus SendByte n'est pas une variable mais une procedure.

PS: Est-ce que tu pourrais faire un tout petit effort sur ton orthographe ? Ca serait plus agréable de te relire. Merci.
0
totalhackerz Messages postés 33 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 30 octobre 2007
5 sept. 2006 à 23:36
oui dsl pour la faute de frape! cette bien sendstring, alors jai fait un tracer sur le logiciel voila le code du bouton qui envoie les donner:
ShowMessage('msg2');
// Initialisation
outbuf[0] := 1;
outbuf[1] := 1;
outbuf[2] := 0;
outbuf[3] := outbuf[0] xor outbuf[1] xor outbuf[2]; // Donne 0 apres calcul
ShowMessage('msg3');
SendString(PChar(outbuf[0] + outbuf[1] + outbuf[2] + outbuf[3]));
ShowMessage('msg4');

quand je fait le pas à pas il me dit bien le message msg2 et msg3, ensuite il plante en me dissent" le projet.exe a provoqué une classe d'exception EAccessViolation....."
quesque je pourai faire d'autre pour le faire marché?

ps: dsl pour les faute d'orthographe, mais le francais est moi sa jamai coller, je vais éssai de m'apliqué
0
totalhackerz Messages postés 33 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 30 octobre 2007
6 sept. 2006 à 03:42
j'ai fait quelque essai de mon coté en Visual Basic
jai mit un bouton et le controleur "MSComm"
dans le code du bouton jai mit cesi:

    send$ = Chr(3) + Chr(1) + Chr(1) + Chr(3)
    MSComm1.CommPort = 1
    MSComm1.Settings = "19200,n,8,1"
    MSComm1.PortOpen = True
    MSComm1.OutPut = send$
    MSComm1.PortOpen = False

et sa marche tré bien!
comment je peut faire en delphi le même code ?
0
Rejoignez-nous