Hallo,
ich habe ein Denkovi USB Board. Es ist per FTDI in IPS eingebunden und reagiert auf Befehle.
Doch leider nicht wie gewünscht.
Als Beispielprogramm habe ich eine c# Anwendung gefunden mit folgendem Code (Beispiel für eine Zahl)
public void start_program [....] {
[...]
sentBytes[0] =0;
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked)
sentBytes[0]=(byte)(sentBytes[0] | 1);
else
sentBytes[0]=(byte)(sentBytes[0] & 254);
myFtdiDevice.Write(sentBytes, 1, ref receivedBytes);
}
Dabei ist 1,2,4,8,16,32,64,128 der Decimal Wert für EIN. Und jeweils 255-Wert der für aus.
Gesendet wird das ganze dann als Byte (hex).
In IP-Symcon sieht das ganze jetzt so aus:
$vars = array("48460","52434","48228","40271","45629","59613","35448","56356");
$wert = array(1,2,4,8,16,32,64,128);
$gespeichertedaten = GetValueString(33915 /*[sendData]*/ );
$temp = hexdec($gespeichertedaten);
$data=0;
for ($i=0; $i<sizeof($vars); $i++) {
//print $vars[$i]."
";
//if(GetValueBoolean($vars[$i]+0)){
// $data = $data + $wert[$i];
if($vars[$i]+0 == $_IPS['VARIABLE']){
if(GetValueBoolean($vars[$i]+0)){
$data =($gespeichertedaten | ($wert[$i]));
}else{
$data = ($gespeichertedaten & (255 - $wert[$i]));
}
}
}
$data = dechex($data); // Testweise auch deaktiviert
}
FTDI_SendText(32218 /*[FTDI]*/,"$data");
SetValue(33915 /*[sendData]*/, $data);
Die Schleife ist ein Relikt aus den ersten Versuchen und wird mit der 1. If Abfrage quasi übergangen.
Meiner Meinung nach sind die Programme identisch von der Funktionsweise. Leider funktioniert es nicht wie gewünscht.