|
Started by jonathan, May, 01 2014 5:23 PM - 4 replies |
| |
| | | |
|
| |
Posted on May, 01 2014 - 5:23 PM |
Bonjour,
Voila deux jours que je m'arrache les cheveux pour faire fonctionner un lecteur RFID avec Windev ... je jette l'eponge et je m'en remets a vous
Pour info le lecteur est un Ehuoyan ER301. Il est bien entendu livre avec une sdk et quelques exemples de codes. J'arrive pour le moment a ouvrir un port, recuperer le numero de version, changer la couleur de la led ou obtenir le S/N du Tag. C'est pas mal ... mais pas assez. Je bloque au niveau de l'authentication de la carte et la lecture des donnees qu'elle contient.
Voici l'exemple fourni en VB :
Dim i, m As Integer Dim buf1(200) As byte Dim buf2(200) As byte Dim s1 As string Dim b2, b1, b3 As byte s1 = Trim(tx_key.Text) IF (Len(s1) <> 12) THEN lb_info.Text = "Wrong Key Length!" tx_key.Focus() Exit Sub END IF For i = 0 To 5 buf1(i) = Val("&H" & Mid(s1, i * 2 + 1, 2)) Next i m = cb_kh.SelectedIndex IF (m = -1) THEN lb_info.Text = "Select Block Please!" Exit Sub END IF IF (op_a.Checked) THEN b1 = &H60s END IF IF (op_b.Checked) THEN b1 = &H61s END IF b3 = CByte(m) 'Authentication i = rf_M1_authentication2(0, b1, b3, buf1(0)) IF (i <> 0) THEN lb_info.Text = "Authentication Fail£¡" Exit Sub END IF
Et ma traduction Wlanguage :
i, m sont des entiers j est un entier = 0 buf1 est un Buffer sur 200 octets s1, s2 sont des chaîne b1, b3 sont des entiers sans signe sur 1 octet
s1 = SansEspace(SAI_KEY) SI Taille(s1) <> 12 ALORS Erreur("Wrong Key Length!") DonneFocus(SAI_KEY) RETOUR FIN
POUR i = 1 A 6 s2 = "0x" + Milieu(s1, j * 2 + 1, 2) buf1[[i]] = s2 FIN
m = COMBO_BLOCK..ValeurAffichée SI m = -1 ALORS Erreur("Select Block Please!") RETOUR FIN
SELON SEL_KEY..Valeur CAS "A" b1 = 0x60 CAS "B" b1 = 0x61 FIN
b3 = m
i = API("MasterRD.dll","rf_M1_authentication2",0, 1, 1, &buf1) SI i <> 0 ALORS Erreur("Authentication Fail!") RETOUR FIN
J'ai essaye pas mal de choses mais l'authentication fail a tous les coups ... Une ame charitable pour me preter main forte ?
Cheers ! |
| |
| |
| | | |
|
| | |
| |
Registered member 1,304 messages Popularité : +47 (51 votes) |
|
Posted on May, 02 2014 - 11:35 AM |
Salut Jonathan,
1ère erreur dans le code suivant:
POUR i = 1 A 6 s2 = "0x" + Milieu(s1, j * 2 + 1, 2) buf1[[i]] = s2 FIN
Tu utilises j pour remplacer i qui part de 1 au lieu de zéro, mais tu n'incrémente jamais j !
Ensuite dans le code suivant:
m = COMBO_BLOCK..ValeurAffichée SI m = -1 ALORS Erreur("Select Block Please!") RETOUR FIN
Je ne sais pas ce que tu as dans COMBO_BLOCK comme données, mais pour moi la valeur affichée ne correspond pas à la traduction du code Visual Basic, le test sert pour moi simplement à savoir si une valeur a été sélectionnée, donc tu devrais simplement utiliser COMBO_BLOCK et savoir si la valeur est supérieur à zéro. De plus, ValeurAffichée renvoi du texte et sauf si les données sont des numériques m contiendra toujours zéro et certainement pas -1
Voici le code revu, essaie le et dis moi si c'est ok
A+ Daryl
nI, nM sont des entiers bufB1 est un Buffer sur 200 octets bufB2 est un Buffer sur 200 octets sS1 est une chaîne cB1, cB2, cB3 sont des caractères
sS1 = SansEspace(SAI_KEY) SI Taille(sS1) <> 12 ALORS Erreur("Wrong Key Length") DonneFocus(SAI_KEY) RETOUR FIN
POUR nI = 0 _A_ 5 bufB1[[nI+1]]= Caract(HexaVersEntier(Milieu(sS1, (nI * 2) + 1, 2))) FIN nM = COMBO_BLOCK SI nM <= 0 ALORS Erreur("Select block Please") RETOUR FIN SELON SEL_KEY CAS 1 cB1 = Caract(HexaVersEntier("60")) CAS 2 cB1 = Caract(HexaVersEntier("61")) FIN
cB3 = Caract(nM)
nI = API("MasterRD.dll","rf_M1_authentication2",0, 1, 1, &bufB1) SI nI <> 0 ALORS Erreur("Authentication Failed") RETOUR FIN
-- http://www.concept4u2.com |
| |
| |
| | | |
|
| | |
| |
Posted on March, 27 2017 - 11:16 PM |
Bonsoir
Ci joint un bout de code qui devrait aider...
wwResult est une chaîne wwEntier est un entier wwSerialNumber est un entier sur 4 octets wwCpt_Clignote est une entier = 0
wwDeviceID est un entier = 4 // Port COM du lecteur RFID wwRFIDBaud est un entier = 9600 // Vitesse en bauds wwKey_A est une chaîne = "FFFFFFFFFFFF" // Clé A
debut_tentative: wwResult=API("MasterRD.dll", "rf_ClosePort", wwDeviceID) wwResult=API("MasterRD.dll", "rf_init_com", wwDeviceID,wwRFIDBaud) wwResult=API("MasterRD.dll", "rf_init_device_number", wwDeviceID) wwResult=API("MasterRD.dll", "rf_request",wwDeviceID,0x26,&wwEntier)
// Boucle tant que pas de carte RFID présentée SI wwResult<>"0" ALORS
// Clignotement de la led wwCpt_Clignote++ SELON wwCpt_Clignote CAS 1: wwResult=API("MasterRD.dll", "rf_light",wwDeviceID,2) CAS 2: wwResult=API("MasterRD.dll", "rf_light",wwDeviceID,0) wwCpt_Clignote=0 FIN Temporisation(50) GOTO debut_tentative FIN
wwLength, WwSize est un octet wwResult=API("MasterRD.dll", "rf_anticoll",wwDeviceID,4,&wwSerialNumber,&wwLength) wwResult=API("MasterRD.dll", "rf_beep",wwDeviceID,20) wwResult=API("MasterRD.dll", "rf_light",wwDeviceID,1) wwResult=API("MasterRD.dll", "rf_select",wwDeviceID,&wwSerialNumber,wwLength,&WwSize) SI wwResult="0" ALORS // AFFICHAGE NUMERO DE SERIE NumCarte est une chaîne NumCarte=NumériqueVersChaîne(EntierVersHexa(wwSerialNumber)) NumCarte=Milieu(NumCarte,7,2)+Milieu(NumCarte,5,2)+Milieu(NumCarte,3,2)+Milieu(NumCarte,1,2) Trace("SerialNumber : "+NumCarte) // LECTURE D'UN BLOCK Wwblock est un entier = 1
bufB1 est un Buffer sur 200 octets POUR nI = 0 A 5 bufB1[[nI+1]]= Caract(HexaVersEntier(Milieu(wwKey_A, (nI * 2) + 1, 2))) FIN wwResult=API("MasterRD.dll", "rf_M1_authentication2",wwDeviceID,0x60,Wwblock,&bufB1) Trace("Authentication : "+wwResult) wwResult=API("MasterRD.dll", "rf_halt",wwDeviceID) FIN
wwResult=API("MasterRD.dll", "rf_light",wwDeviceID,0)
Etape suivante .... réussir un READ ... puis un WRITE.... |
| |
| |
| | | |
|
| | |
| |
Posted on June, 25 2018 - 12:38 PM |
Priere d eme traduire ce code Vb a windev
Dim i, m As Integer Dim buf1(200) As Byte Dim buf2(200) As Byte Dim s1 As String Dim b2, b1, b3 As Byte s1 = Trim(tx_key.Text) If (Len(s1) <> 12) Then lb_info.Text = "Wrong Key Length!" tx_key.Focus() Exit Sub End If For i = 0 To 5 buf1(i) = Val("&H" & Mid(s1, i * 2 + 1, 2)) Next i m = cb_kh.SelectedIndex If (m = -1) Then lb_info.Text = "Select Block Please!" Exit Sub End If If (op_a.Checked) Then b1 = &H60s End If If (op_b.Checked) Then b1 = &H61s End If b3 = CByte(m) 'Authentication i = rf_M1_authentication2(0, b1, b3, buf1(0)) If (i <> 0) Then lb_info.Text = "Authentication Fail£¡" Exit Sub End If 'Read card i = rf_M1_read(0, b3, buf2(0), b2) If (i <> 0) Then lb_info.Text = "Read Card Fail!" Exit Sub End If s1 = "" For i = 0 To b2 - 1 s1 = s1 & VB.Right("00" & Hex(buf2(i)), 2) Next i tx_sj.Text = s1 lb_info.Text = "Read Succeed!" End Sub |
| |
| |
| | | |
|
| | |
| |
Registered member 1,144 messages Popularité : +50 (142 votes) |
|
Posted on June, 25 2018 - 1:30 PM |
Bonjour,
Je me suis longtemps casser la tête pour faire fonctionner le lecteur ACR122U. Pour le faire fonctionner avec Windev il a fallut transformer toutes les valeurs Hexa (de la documentation du lecteur) car le poid fort et le poid faible sont inversés dans Windev. C'est peut-être une piste à examiner.
Thierry |
| |
| |
| | | |
|
| | | | |
| | |
|