OVH Cloud OVH Cloud

Activex MSCOmm

2 réponses
Avatar
dacoolg
Bonjour,

Voil=E0 une semaine que j'essaie de faire fonctionner l'activex MScomm
sous IE. J'ai r=E9alis=E9 une petite page html avec les JS correspodants
et J'arrive =E0 ouvrir le port com1 mais impossible de lire les donn=E9es
dans le buffer s=E9rie. Je ne vois vraiment pas d'o=F9 =E7a vient. A
chaque fois j'ai la m=EAme r=E9ponse : undefined.

Voici mon code :

Si quelqu'un a une id=E9e d'o=F9 =E7a pourrait venir ...

<html><title>Test RS232C</title>
<SCRIPT LANGUAGE=3DJavaScript>


ejs_server_date =3D new Date();
ejs_server_heu =3D ejs_server_date.getHours();
ejs_server_min =3D ejs_server_date.getMinutes();
ejs_server_sec =3D ejs_server_date.getSeconds();
var ejs_server_texte =3D "??";

function ejs_server_calc()
{
if (ejs_server_sec < 10)
ejs_server_sec =3D "0"+Math.round(ejs_server_sec);
else if(ejs_server_sec >=3D 60)
{
ejs_server_sec =3D "00";
ejs_server_min++;
}
if (ejs_server_min < 10)
ejs_server_min =3D "0"+Math.round(ejs_server_min);
else if(ejs_server_min >=3D 60)
{
ejs_server_min =3D "00";
ejs_server_heu++;
}
if (ejs_server_heu < 10)
ejs_server_heu =3D "0"+Math.round(ejs_server_heu);
else if(ejs_server_heu >=3D 24)
{
ejs_server_heu =3D "00";
}
ejs_server_texte =3D ejs_server_heu + ":" + ejs_server_min + ":" +
ejs_server_sec;
if (document.getElementById){

document.getElementById("ejs_server_heure").innerHTML=3Dejs_server_texte;
}
ejs_server_sec++;
}

function AddComReport(msg,direction) {
if (document.forms["TestRS232"].elements["Communication"].value=3D=3D"") {
document.forms["TestRS232"].elements["Communication"].value=3Dejs_server_te=
xte
+ " : " + direction + msg;
} else {
document.forms["TestRS232"].elements["Communication"].value=3Dejs_server_te=
xte
+ " : " + direction + msg + (String.fromCharCode(13)) +
document.forms["TestRS232"].elements["Communication"].value;
}
}
function StatusPort() {
// Affichage de l'etat du port
if (comm.PortOpen =3D=3D true) {
document.forms["TestRS232"].elements["EtatPort"].value=3D"Ouvert";
} else {
document.forms["TestRS232"].elements["EtatPort"].value=3D"Ferm=E9";
}
}

function InitActiveX() {
// Initialisation de l'activeX;
if(!comm) {
try {
if(!(comm =3D new ActiveXObject("MSCOMMLib.MSComm")))
throw "MSCOMMLib.MSComm";
} catch(e) {
try {
if(!(comm =3D new ActiveXObject("MSCOMMLib.MSComm.1")))
throw "MSCOMMLib.MSComm.1";
} catch(e) {
alert("Erreur: Installation de "+e+" ActiveX ");
}
}
}
;
// Parametrage du port utilis=E9
if(comm) {
comm.CommPort =3D 1; // N=B0 du port
comm.Settings =3D "9600,N,8,1"; //Vitesse,Parit=E9,Nb bits, Bit de stop
comm.RTSEnable =3D true;
comm.PortOpen =3D true;
comm.Settings =3D "9600,N,8,1";
}
StatusPort();
}

function RS232Out(msg) {
StatusPort();
if(comm) {
document.forms["TestRS232"].elements["TxtRS232Out"].value=3Dmsg;
comm.Output =3D msg;
document.forms["TestRS232"].elements["TxtSortie"].value=3D"";
AddComReport(msg,"->");
}
}

function RS232Inp() {
msg=3D"";
if(comm) {
msg=3Dcomm.Input;
if (msg!=3D"") {
document.forms["TestRS232"].elements["TxtEntree"].value=3Dmsg;


AddComReport(msg,"<-");
}
}
}

</script>

<body onload=3D"InitActiveX()">
<DIV ID=3Dejs_server_heure></div>
<OBJECT id=3D"comm" name=3DMSComm
classid=3D"clsid:648A5603-2C6E-101B-82B6-000000000014">
</OBJECT>
<img width=3D'12' height=3D'13' alt=3D'Imprimer' title=3D'Imprimer' border=
=3D'0'
src=3D'../../images/print.gif' onclick=3D'javascript:window.print()' />
<form name=3D"TestRS232"
onSubmit=3D"RS232Out(this.form.TxtSortie.value)"><br>
Etat du port de communication : <input type=3D"text" name=3D"EtatPort"
size=3D"7"><br>
<table>
<tr>
<td><input type=3D"text" name=3D"TxtSortie"></td>
<td><input type=3D"button" name=3D"Sortie" value=3D"-> RS232"
onclick=3D"RS232Out(this.form.TxtSortie.value)"></td>
<td><input type=3D"text" name=3D"TxtRS232Out"></td>
</tr>
<tr>
<td></td>
<td><input type=3D"button" name=3D"Entree" value=3D"<- RS232"
onclick=3D"RS232Inp()"></td>
<td><input type=3D"text+" name=3D"TxtEntree"></td>
</tr>
</table>
<TextArea name=3D"Communication" rows=3D"10" cols=3D"40">
</TextArea>
</form>
</body>
</html>

Dans la doc mscomm, l'activex est programm=E9 en VB. Une fonction
Doevents est apparemment indispensable pour faire fonctionner la
lecture. Quel est l'=E9quivalent en JS ? (si il y en a un)

Autre point : Si je remplace comm.input par comm.nimportequoi il ne se
passe absolument rien.la variable msg reste =E0 undefined ce qui est
logique mais je n'ai pas de message d'erreur. Myst=E8re pour moi.

D'avance merci.

2 réponses

Avatar
Bul
salut,
à priori j'utilise un activeX ( mscomm ) sans faire
new ActiveXObject("MSCOMMLib.MSComm")
et sans rien de développé en VB.
j'ai une vieille source qui traîne ici : http://www.javascriptfr.com/code.aspx?ID339
@+
Avatar
zwetan
Voilà une semaine que j'essaie de faire fonctionner l'activex MScomm
sous IE. J'ai réalisé une petite page html avec les JS correspodants
et J'arrive à ouvrir le port com1 mais impossible de lire les données
dans le buffer série. Je ne vois vraiment pas d'où ça vient. A
chaque fois j'ai la même réponse : undefined.


tu ne peux pas utilsier MScomm sans license

en general il faut avoir un Visual Studio installé pour avoir ce genre de
license sur ton poste

zwetan