sehr schön.
so was bringe ich nie hin kann nur programieren.
Die neue exe willst du wohl micht auch gut.
Gruß
Ich hab in der Wiki begonnen, das mal festzulegen
https://www.roboternetz.de/wissen/in...pezifikationen
EDIT an alle: Bei Widerspruch bitte laut quietschen. Grad bei den Spezifikationen sollten möglichst keine Dinge stehen, über die kein Konsens herrscht.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
sehr schön.
so was bringe ich nie hin kann nur programieren.
Die neue exe willst du wohl micht auch gut.
Gruß
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
No-5 : Ich geb' zu, ich hab erst begonnen, es mir anzusehen.
Leider kämpf ich ein bißchen zeitmäßig.
Aber schaut doch gut aus ? Was sollte mir nicht gefallen ?
Grad hab ich das Projekt rebuilden wollen . Er sucht
"atlres.h"
Ich steh auf dem Schlauch. Was will er ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
ist ein wtl projekt und dir fehlt wohl die WTL dort ist die datei dabei.
Ist per mail auf dem Weg weil es noch die Alte ist und ich nicht weiß ob man die noch runterladen kann irgendwo muß mal die neue auf dem rechner machen.
du hast in deinem Beispiel eine klammer vergessen nur so nebei
ich bin gerade an der Protokoll klasse bei mir sieht das jetzt so aus:
Gruß[/code]Code:bool CRNProtokoll::SetByteData(BYTE* Buffer,BYTE Len) { BYTE x=0; BYTE bLenAdd = 1; m_bLowLevel[0] = CTL_C_STX; for(x=0;x<Len;x++) { if((Buffer[x] & CTL_M_MASK) == CTL_C_BASE) { m_bLowLevel[x+bLenAdd] = CTL_C_PFX; bLenAdd++; m_bLowLevel[x+bLenAdd] = Buffer[x]; } else { m_bLowLevel[x+bLenAdd] = Buffer[x]; } m_bTxBcc ^= Buffer[x]; } m_bLowLevel[x+bLenAdd] = m_bTxBcc; m_bLowLevel[x+bLenAdd+1] = CTL_C_ETX; m_bLength = Len+2+bLenAdd; return true; }
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
Na, is ja schon !
da solltest du noch modifizieren:
Ganz profimäßig könntest du noch mit der Maximal-größe des Lowlevel-Buffers vergleichen, abbrechen und mit false zurückkehren.m_bLowLevel[x+bLenAdd] = CTL_C_PFX;
bLenAdd++;
m_bLowLevel[x+bLenAdd] = Buffer[x] | CTL_M_ADON;
Durch das Stuffen ist nie ganz sicher, wie groß die Ausgabe wird.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Jo das wollte ich eh noch machen da aber Fasching (bin zum musik machen unterwegs) ist weiß ich noch nicht wann ich schicke dir den source dann ok ?
Ich hoffe du konntest es jetzt compilieren.
Wenn wir jetzt das mich der Adresse definieren kann ich die dll anfangen und dann könnte mal eine ein VB Teil machen zu testen.
Gruß
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
Ach ja ? Musiker ?..zum musik machen unterwegs..
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Musiker ?
CD-Player -> Notebook -> Michpult -> 2 x 1,5 KW
Alles Klar !?
Und so sieht der aufruf dann ausCode:bool CRNProtokoll::SetByteData(BYTE* Buffer,BYTE Len) { // Daten in den Stream schreiben und Maskieren // Framen BYTE x=0; BYTE bLenAdd = 1; m_bLowLevel[0] = CTL_C_STX; for(x=0;x<Len;x++) { if((Buffer[x] & CTL_M_MASK) == CTL_C_BASE) { m_bLowLevel[x+bLenAdd] = CTL_C_PFX; bLenAdd++; m_bLowLevel[x+bLenAdd] = Buffer[x] | CTL_M_ADON; } else { m_bLowLevel[x+bLenAdd] = Buffer[x]; } m_bTxBcc ^= Buffer[x]; if((x+bLenAdd+2) >= 1024) { //Mehr Buffer haben wir nicht return false; } if(x == 127) { // Neuen Frame an fangen // Das müssen wir noch prüfen m_bLowLevel[x+bLenAdd] = m_bTxBcc; m_bLowLevel[x+bLenAdd+1] = CTL_C_ETX; m_bLowLevel[x+bLenAdd+2] = CTL_C_STX; bLenAdd = bLenAdd+2; m_bTxBcc = 0; m_bFrameCount ++; } } m_bLowLevel[x+bLenAdd] = m_bTxBcc; m_bLowLevel[x+bLenAdd+1] = CTL_C_ETX; m_bLength = Len+2+bLenAdd; return true; }
Code:void CMain::SendBuffer(BYTE *buffer,int len) { // Daten zu sammenbauen und schicken CRNProtokoll* pBuffer = new CRNProtokoll; pBuffer->SetByteData(buffer,len); // Wie lange ist das was wir senden müssen ? len = pBuffer->GetLevel0(NULL); BYTE* SendBuffer = new BYTE[len]; // Holen der daten ? pBuffer->GetLevel0(SendBuffer); CString csTrace; csTrace.Format("Schreibe Daten %s",BinToTrace(SendBuffer,len)); TraceIt(csTrace); m_clV24.WriteOut(SendBuffer,len); delete SendBuffer; delete pBuffer; }
Gruß
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
Ja, das macht Krach...2 x 1,5 KW ..
Topic:
Schaut gut aus. Mit dem "Frame-Split" bei Überlängen kommen wir jetzt natürlich ein ein Terrain, wo wir noch nicht so recht durchdefiniert bzw. diskutiert haben.
Wenn du mich fragst, ich tät fürs Erste ganz einfach verweigern, wenn dir nettodaten > Max sind.
Das deckt den momentanen Bedarf sicher ohnehin ab.
Sind unsere anderen Kollegen eigentlich noch dabei ?
EDIT: Deine Mail ist grad angekommen.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Schau mal, vielleicht erspart es dir etwas Arbeit, so sieht meine Empfangsroutine aus (wird mit jedem über COM empfangenen Byte angesprungen)
Da kommen zwar ein paar Sachen vor, die kannst du so nicht anwenden, aber die Logik ist erkennbar
Zum Testen kannst du übrigens einfach die RX-TX Leitungen des RS232 Kabels überbrücken, dann kriegst du deine eigenen Frames als Echo zurück, aber das weißt du jaCode:#define RXTX_M_MSG 1 // inside Frame #define RXTX_M_PFX 2 // Prefix detected //--------------------------------------------------------------------- int CSnifferDlg::SniffChan(ROV_RXTX* pRx, unsigned char bInChar) { if (!(pRx->iComFlg & RXTX_M_MSG)) { if (bInChar == CTL_C_STX) { pRx->sBf.BufSet((char*)&pRx->sMsg, 0); // reset Buffer pRx->iComFlg = RXTX_M_MSG; pRx->iComBCC = 0; } } else { if (pRx->iComFlg & RXTX_M_PFX) { pRx->sBf.BufWrChar(bInChar & ~CTL_M_ADON); pRx->iComFlg &= ~RXTX_M_PFX; pRx->iComBCC ^= (bInChar & ~CTL_M_ADON); } else { switch (bInChar) { case CTL_C_STX: // Start condition pRx->sBf.BufSet((char*)&pRx->sMsg, 0); pRx->iComFlg = RXTX_M_MSG; pRx->iComBCC = 0; break; case CTL_C_PFX: // Prefix pRx->iComFlg |= RXTX_M_PFX; break; case CTL_C_ETX: // End Condition pRx->sBf.BufToRead(); // write -> to read pRx->iComFlg &= ~RXTX_M_PFX; pRx->iComFlg &= ~RXTX_M_MSG; pRx->iComCnt++; return(1); // Message present break; default: pRx->sBf.BufWrChar(bInChar); pRx->iComBCC ^= bInChar; break; } } } return(0); // no message complete }
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen