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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
serialPort1.WriteLine("**" + Chr(valeur) + "#");
j'ai récupéré une fonction pour le Chr

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