Search  
Friday, May 25, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Cod, sintaxa si comenzi  Calcul CRC(suma...
 Calcul CRC(suma control)
 
 4/6/2010 5:41:03 PM
User is offlinejustgioni
61 posts


Calcul CRC(suma control)
 (N/A)
Salut
Am si eu o problema pe care nu o inteleg,
Am un sir , care este variabil si formula de calcul a sumei de control se exprima ceva de genul:

suma tuturor octeţi - rezultatul este octet de 0xHL tip, care este convertită 0x3H, 0x3L.

Sau in engleza cu este el expus:
sum of all bytes - the result is byte of type 0xHL,which is converted to 0x3H, 0x3L.
Ma poate ajuta si pe mine cineva cu o idee...
Va multumesc tare mult.......!

 4/6/2010 8:19:24 PM
User is offlinejustgioni
61 posts


Re: Calcul CRC(suma control)
 (N/A)
Am mai gasit ceva referitor la suma de calcul dar este in C si nu ma descurc:
// AddCRC: Adds CRC & END marker to a command
void AddCRC(unsigned char* cmd, unsigned int len)
{
unsigned int i;
unsigned char xor = 0;
   
    for (i = 0; i < len; i++)
        xor ^= cmd[i];
   
    cmd[i++] = (xor >> 4) | 0x30;  // Calculate HIGH byte of CRC
    cmd[i++] = (xor & 0x0F) | 0x30;  // Calculate LOW byte of CRC
    cmd[i++] = 0x0A;  // Add end marker
    cmd[i] = 0;       // Add zero to make it zero terminated
}
 

 4/6/2010 11:21:43 PM
User is offlineGigi
29 posts


Re: Calcul CRC(suma control)
 (N/A)
Din help-ul VFP9:
SYS(2007) - Checksum Value: Returns the checksum value of a character expression. You can use a checksum to test the validity of data or to compare two character expressions. You can also generate checksum values greater than 16 bits for large strings.
SYS(2017) - Record Checksum Value: Returns a checksum value based on the current record in the current work area. You can use a checksum to test the validity of data. You can also generate checksum values greater than 16 bits for large strings.
Sau mai poti sa te uiti pe: http://fox.wikis.com/wc.dll?Wiki~CRC16.
Acuma nu stiu daca am inteles eu bine daca de asa ceva ai intrebat.
 4/7/2010 8:54:52 AM
User is offlinejustgioni
61 posts


Re: Calcul CRC(suma control)
 (N/A)
Da ,m-am uitat si eu in help ,dar nu cred ca este formula care o cere mai sus
Multumesc tare mult!
 4/7/2010 11:16:03 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Calcul CRC(suma control)
 (N/A)
 justgioni wrote
Am mai gasit ceva referitor la suma de calcul dar este in C si nu ma descurc:
// AddCRC: Adds CRC & END marker to a command
void AddCRC(unsigned char* cmd, unsigned int len)
{
unsigned int i;
unsigned char xor = 0;
   
    for (i = 0; i < len; i++)
        xor ^= cmd[i];
   
    cmd[i++] = (xor >> 4) | 0x30;  // Calculate HIGH byte of CRC
    cmd[i++] = (xor & 0x0F) | 0x30;  // Calculate LOW byte of CRC
    cmd[i++] = 0x0A;  // Add end marker
    cmd[i] = 0;       // Add zero to make it zero terminated
}


Asta ar fi functia transpusa in vfp:

*Function AddCRC
LPARAMETERS cmd, len

len=EVL(len,LEN(cmd))
LOCAL i, xor
xor=0
FOR i=1 TO len
xor=BITXOR(xor,ASC(SUBSTR(cmd,i,1)))
NEXT i
cmd=cmd+CHR(BITOR(0x30,BITRSHIFT(xor,4)))
cmd=cmd+CHR(BITOR(0x30,BITAND(0x0F,xor)))
cmd=cmd+CHR(0x0A)
cmd=cmd+CHR(0)

*!* * Urmatoarele linii afiseaza in format 0x suma de control si cei doi octeti rezultati
*!* ? TRANSFORM(xor,'@0')
*!* ? TRANSFORM(asc(subs(cmd,len+1,1)),'@0')
*!* ? TRANSFORM(asc(subs(cmd,len+2,1)),'@0')
*!* ?

RETURN cmd


Daniel Buduru
 4/7/2010 12:28:00 PM
User is offlineadrian
48 posts
www.infostarpitesti.ro


Re: Calcul CRC(suma control)
 (N/A)
Asta e modul de calcul pentru cifra de control la casa de marcat produsa de Tremol Bulgaria (imprimanta fiscala Activa , casa marcat Activa Star) distribuite in Romania de Giptronic dar pana la a tipari direct pe device mai ai cale lunga , daca tot vrei sa incerci ceva incearca sa cuplezi c# + vfp pentru asa ceva, VFp este foarte bun pentru lucru cu datele as zice chiar imbatabil uneori dar pentru asa ceva eu iti recomand totusi c# sau c++
 4/7/2010 6:40:55 PM
User is offlinejustgioni
61 posts


Re: Calcul CRC(suma control)
 (N/A)
Da da da ,va multumesc tare mult pentru ajutor...
Va mai cer o precizare ,daca se poate...
Parametri:
cmd=sir-ul de date care intra
len=?(ce valoare trebuie sa aiba len)
Va multumesc !
 4/7/2010 7:06:44 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Calcul CRC(suma control)
 (N/A)
Am repordus functia asa cum era in C, pentru cazul in care se apeleaza in acelasi mod - cu doi parametri. Len e lungimea sirului pentru care se calculeaza suma de control.
Dece nu a calculat-o in functie, n-am idee. Eu am pus oricum o linie in care calculez lungimea sirului daca nu este data, deci functia se poate apela doar cu sirul.
Am pus si terminatorul 0x0A si terminatorul de stringz 0x00 (null terminated string), asa cum era in cod, dupa cei doi octeti ai sumei de control, atfel incat functia returneaza stringul in forma finala.

Daniel Buduru
 4/7/2010 7:24:51 PM
User is offlinejustgioni
61 posts


Re: Calcul CRC(suma control)
 (N/A)
Am inteles
Am luat ceva date care arata cam asa:
Answer: 7.4.2010 7:19:03 PM.25964 (+2.8438 seconds)
AA 30 32 32 38 37 34 66 31 20 20 20 20 20 20 20 ª022874f1

20 20 20 20 20 2D 2E 2F 30 31 32 7D 39 32 0A -./012}92.

Request: 7.4.2010 7:19:03 PM.32164 (+0.0313 seconds)
06 30 32 32 38 37 34 33 3D 0A .0228743=.
la acest sir CRC-ul trebuie sa fie 3= cu sirul de intrare sir=chr(6)+'022874'
si mie imi da 0=
Trebuie sa mai sap...
Multumesc tare mult

 4/7/2010 7:33:59 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Calcul CRC(suma control)
 (N/A)
Esti sigur ca se aplica algoritmul pe care l-ai postat?

Daniel Buduru
 4/7/2010 7:56:21 PM
User is offlinejustgioni
61 posts


Re: Calcul CRC(suma control)
 (N/A)
Uite aici am gasit ce am postat..

http://www.tremol.bg/ro/en/developer/protofp/

http://www.tremol.bg/ro/en/developer/protoonline/
 4/7/2010 8:13:12 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Calcul CRC(suma control)
 (N/A) Modified By Daniel Buduru  on 4/7/2010 8:13:28 PM)
Am vazut algoritmul, iar codul pe care l-am scris il reproduce.

Unde ai facut verificarea?

Incearca cu '6'+'022874', si vei vedea ca obtii acelasi CRC, 0x33, 0x3D, care, intr-adevar, reprezinta  '3='


Daniel Buduru
 4/7/2010 8:25:26 PM
User is offlinejustgioni
61 posts


Re: Calcul CRC(suma control)
 (N/A)
Asa este in varianta asta merge perfect
Ma apuc de treaba ,multumesc din suflet..o seara placuta si numai bine

 4/7/2010 9:41:30 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Calcul CRC(suma control)
 (N/A)
Mda, a fost o coincidenta '6'+'022874' ...
Uitandu-ma inca o data pe acel site, am vazut ca mai folosesc o suma de control, de asta data calculata ca suma tuturoro octetilor, si nu ca xor pe toti octetii.

Ai aici codul pentru acest CRC

*Function AddCRC2
LPARAMETERS cmd, len

len=EVL(len,LEN(cmd))
LOCAL i, k, sum, cc
sum=0
FOR i=len TO 1 STEP -1
    sum=sum+ASC(SUBSTR(cmd,i,1))
NEXT i
sum=BITAND(sum,0xff)
cmd=cmd+CHR(BITOR(0x30,BITRSHIFT(sum,4)))
cmd=cmd+CHR(BITOR(0x30,BITAND(0x0F,sum)))
cmd=cmd+CHR(0x0A)
cmd=cmd+CHR(0)

* ? TRANSFORM(sum,'@0'), TRANSFORM(asc(subs(cmd,len+1,1)),'@0'), TRANSFORM(asc(subs(cmd,len+2,1)),'@0')
* ?
RETURN cmd


Am verificat pe cele doua siruri pe care le-ai postat mai inainte, suma de control e ok

Daniel Buduru
  Visual FoxPro  Cod, sintaxa si comenzi  Calcul CRC(suma...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement