Bonjour , j'ai acheté une carte E/S .les programmes fournis avec celle ci fonctionnent tres bien . je tente d'ecrire sur le port COM1 un entier converti en caractere .cette carte possède 8 relais (Comelec FT357) .Pour commander ces relais il faut envoyer ** data # . data etant un caractere (ascii de 0 à 255) . Mon pb est que les relais ne sont plus commandés dès que la valeur depasse 127 ...
j'ai récupéré une fonction pour le Chr
Code : Sélectionner tout - Visualiser dans une fenêtre à part serialPort1.WriteLine("**" + Chr(valeur) + "#");
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 if (asciiCode >= 0 && asciiCode <= 255) { System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding(); byte[] byteArray = new byte[] { (byte)asciiCode }; string strCharacter = asciiEncoding.GetString(byteArray); return (strCharacter); }
sachant que le code en Basic fournis avec la carte (et qui fonctionne ) est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 REM*********************************************************** REM File:IO232.BAS Data:30/08/2000 REM CONTROLLO 8 OUT 8 IN DIGITALI E 2 IN A/D CON PORTA RS 232 REM (C) 2000 Futura Elettronica snc REM*********************************************************** OPEN "COM2:9600,N,8,1,rs,cs0,ds0" FOR RANDOM AS #10 DO a$ = "" DO WHILE a$ = "" OR VAL(a$) < 0 OR VAL(a$) > 255 CLS PRINT "Digita valore di OUTPUT da 0 a 255 (A=abbandona)"; INPUT a$ LOOP IF a$ = "a" OR a$ = "A" THEN CLOSE #10 EXIT DO END IF PRINT #10, "**" + CHR$(VAL(a$)) + "#"; digital$ = INPUT$(1, #10) ad1$ = INPUT$(1, #10) ad2$ = INPUT$(1, #10) PRINT "Ingressi ="; ASC(digital$); PRINT "Convertitore A/D 1 ="; ASC(ad1$); PRINT "Convertitore A/D 2 ="; ASC(ad2$) SLEEP 5 LOOP END
Partager