Portierung b&r 2003 auf X20 (RS232 problem)!

NaWas

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich muss die SW, welche für SG3 (Motorolla) mit AS2.4 geschrieben war und ich schon auf AS2.7 portiert habe, auf SG4 (Intel) portieren.

Die Protierung habe ich mittlerweile gemacht. Leider bei der RS232 habe ich einen Problem.

An RS232 habe ich ein PocketTerminal angeschlossen. Mit dem kann ich die aktuelle Daten lesen und auch Daten auf die Steuerung schreiben.

Ich verwende hierfür den DVFrame Bibliothek.

#include <dvframe.h>

_LOCAL FRM_xopen_typ fFRM_xopen;
_LOCAL XOPENCONFIG sXOpenConfig;
_LOCAL FRM_read_typ fFRM_read;
_LOCAL FRM_rbuf_typ fFRM_rbuf;
_LOCAL FRM_gbuf_typ fFRM_gbuf;
_LOCAL FRM_write_typ fFRM_write;
_LOCAL FRM_robuf_typ fFRM_robuf;

Ich habe die Datenstruktur in ein anderes Datenfile (vardef.d) gespeichert, welche ungefähr so aussieht:

typedef struct {
UINT uiPage;
UINT uiX;
UINT uiY;
UINT uiLng;
UINT uiNK;
UINT uiDisplayOpt;
UINT uiEditType;
UINT uiVisibility;
void *ptrVar;
UINT uiType;
INT iExp;
UDINT udOldVal;
} tVARDEF;

tVARDEF sVardef[] =
{
{ 101, 3, 2, 4, 0, 0x0000, EDT_STD, 0x0000, &gPtVWinder , U16 },
{ 102, 4, 2, 3, 0, 0x0000, EDT_STD, 0x0000, &gPtBoostSp , U16 },
....
};

Das Programm ist in C geschrieben. Ich habe einen Funktion, der mir die Daten auf das PT schreibt:

/****************************************************************************/

void
writeStringXY( USINT usSpalte, USINT usZeile, USINT* pStr, UINT uiStrLength )
{
USINT Str[100];
if ( (gCmdTrm.uiCommand == CMD_TRM_DO_SNAPSHOT) || (gCmdTrm.uiCommand == CMD_TRM_SEND_SNAPSHOT) ) {
memcpy( &(snapShot[sSnap.usOffsZeile + usZeile][sSnap.usOffsSpalte + usSpalte]), pStr, uiStrLength);
}
else {
Str[0] = 0x10;
Str[1] = 0x1F + usSpalte;
Str[2] = 0x1F + usZeile;
memcpy( &(Str[3]), pStr, uiStrLength);
writeString( &Str[0], uiStrLength + 3);

}
}

void
writeString( USINT* pStr, UINT uiStrLength )
{
fFRM_gbuf.enable = 1;
fFRM_gbuf.ident = fFRM_xopen.ident;
FRM_gbuf(&fFRM_gbuf);
if ( !fFRM_gbuf.status ) {
memcpy( (UDINT*)fFRM_gbuf.buffer, pStr, uiStrLength);
fFRM_write.ident = fFRM_xopen.ident;
fFRM_write.buffer = fFRM_gbuf.buffer;
fFRM_write.buflng = uiStrLength;
fFRM_write.enable = 1;
FRM_write(&fFRM_write);
if ( fFRM_write.status ) {
fFRM_robuf.enable = 1;
fFRM_robuf.ident = fFRM_xopen.ident;
fFRM_robuf.buffer = fFRM_gbuf.buffer;
fFRM_robuf.buflng = fFRM_gbuf.buflng;
FRM_robuf(&fFRM_robuf);
} else {
}
}
else {
}
}
...



Nun mein Problem ist, dass der Wert, welche ich auf das PT schreibe ist immer um eines Verschoben! Sprich, das Wert von Menü 102 wird in Menü 101 geschriebn, und von Menü 103 in Menü 102 usw. Die Werte werde ja via einen Zeiger übergeben. Meine Vermutung ist, dass die Adresse in
fFRM_write.buffer = fFRM_gbuf.buffer;

immer um eins verschoben ist.

Ich bin hier wirklich am ende und weis nicht was ich noch ausprobieren sollte.

Für jede Hilfe bin ich sehr Dankbar.

Mfg.
NaWas
 
Hallo NaWas,

in der Automation Studio Hilfe unter Programmierung\Bibliotheken\Kommunikation\DVFrame\Funktionsblöcke\FRM_xopen() findest du den genauen Unterschied zwischen SG3 und SG4. Der Mode Parameter des FRM_xopen() Funktionsblocks ist in den Versionen unterschiedlich aufgebaut und muss daher manuell angepasst werden.

Lg
 
Zurück
Oben