[ FranjoZG @ 19.12.2018. 12:36 ] @
Stanka kupila terminal HT630 za očitavanje barkodova. Karno, samo kako da ga očitam? Postoji program, ali dati stranic... bit će svega...
U glavnom, dobio DLL koji u sebi ima funkcije koje mogu pozvati iz svog programa, jedino što ne zanam kako.
Ovo je opis funkcije:
Code:

        int HM_upload(UINT port, char address, char FAR* sour_name, char FAR* dest_name)
    Function description
    Upload specified file from terminal (This function will not exit until whole file is uploaded. So user must wait for a while when file’s size is big. If user want to monitor the status of each packet ,please use HM_upload1 and HM_upload2)
    Parameter
    port      :COM port 
               1-n for COM1 - COMn   
        address    :Terminal address range form 'A'-'Y', '0'-'6'
    sour_name    :File name in terminal to be upload
        dest_name    :Assign new file name in PC (include path) If this new file was exist in PC, system will change it to non-exist file name automatically)

Returns
0,3,4,5,0x30,0x33,0x34 (Please return value table)


Ovako sam probao definirati u Delphi-u:
Code:

Function                 HM_Upload
(Port: integer; 
 Adress: WORD;
 SourName: pChar;
 DestName: pChar): word
StdCall; External 'C:\Projekti\XE\Sljedivost\Terminal\Test1\dll23-1\32bits\serial\multi32\MultiDLL.Dll';


i poziv iz programa:
Code:

var i: integer;
    sName, dName: string;
begin
   sName := 'ROBA.TXT';
   DnAME := 'C:\Projekti\XE\Sljedivost\Terminal\Test1\ROBA.TXT';
   i := HM_Upload(3, WORD('A'), @SnAME[1], @DNAME[1]);
   ShowMessage(I.ToString);


compile programa prođe, ne javlja grešku. Run - program se sruši bez greške.
Iz priloženog program sam vidio da se spaja na COM3 i da mu dodjeljuje ime "A".

Nemam iskustva sa pozivanjem funk. iz dll i deklaracijama. Što je krivo? Može pomoć?
[ savkic @ 19.12.2018. 14:27 ] @
Koji Delphi koristis? Pogresna ti je deklaracija definitivno.

Pokusaj ovako:

function HM_upload(APort: Cardinal; Address: Char; ASourName PAnsiChar; ADestName: PAnsiChar): Integer; cdecall;

Eventualno stdcall;
[ FranjoZG @ 19.12.2018. 14:34 ] @
Delphi XE 10. Ovo je bolje jer se program ne ruši, ali nije dobro jer javlja "Access violation...."
[ savkic @ 19.12.2018. 15:40 ] @
> Delphi XE 10.

32bit?

> Ovo je bolje jer se program ne ruši, ali nije dobro jer javlja "Access violation....

A kako pozivas, ne smes koristiti string kao u tvom primeru.
[ FranjoZG @ 19.12.2018. 16:46 ] @
33 bitno
možeš li molim te napisati tih par linija koda. Izludit će me ovo, a trebalo je biti gotovo još prošli tjedan. Naručili pa nikako doći, dokumentacija nikakva...
[ savkic @ 19.12.2018. 18:01 ] @
Nesto ovako, ako ne radi promeni calling konvenciju za dll.

Code:

var 
   i: integer;
   sName, dName: AnsiString;
begin
   sName := 'ROBA.TXT';
   DnAME := 'C:\Projekti\XE\Sljedivost\Terminal\Test1\ROBA.TXT';
   i := HM_Upload(3, 'A', PAnsiChar(SnAME), PAnsiChar(dNAME));
   ShowMessage(I.ToString);


> dokumentacija nikakva...

Zar nema neki C primer ili gotov exe koji radi?
[ tkaranovic @ 19.12.2018. 18:44 ] @
Verovatno umesto:

Address: Char

treba:

Address: AnsiChar

[ FranjoZG @ 19.12.2018. 20:12 ] @
Od dokumentacije ono što sam napisao u prvom postu.
Ovdje se može pruzeti cijeli zip, sa dll-ovima:
https://jumboiskon.tportal.hr/...3f-a4b6-4ad8-b89f-ded510ed8d9c
[ salvaric @ 20.12.2018. 07:00 ] @
Možda bi trebalo prvo da otvoriš port HM_OpenCommPort, pa nakon učitavanja zatvoriš HM_CloseCommPort
[ tkaranovic @ 20.12.2018. 07:53 ] @
Ja sam previo dll sa delphijem i kad sam previo taj dll onda nije htelo PAnsiChar(SnAME).
Sve je proradilo kad sam stavio ovako da radi:

pStr := StrAsPAnsiChar(Str);

FuncDll(pStr...

StrDispose(pStr);

Sad dali bi to trebalo u ovom slucaju za ovaj dll ne znam.

Inace sa stringom nisam ni probao.

Koliko vidim taj dll daje neka firma. Mozda oni imaju primer i za Delphi kojeg inace spominju.
Najjednostavnije bi bilo prvo njih kontaktirati.
[ MajorFatal @ 20.12.2018. 23:22 ] @
Ne znam da li je od pomoći ali, jedan drugar dok je demistifikovao te neke bar kod čitače je sve vreme imao ispred sebe odštampane na a4 papiru neke specifične bar kodove koje kad očita oni dovode čitač u određeno stanje, imao je bar nekoliko bar kodova za nekoliko različitih vrsta reseta čitača, sistema, pa kad mu nešto ne ide on očita bar kod za reset pa ispočetka...
[ FranjoZG @ 21.12.2018. 15:03 ] @
Promjenom vrsi varijabli porgram se ne ruši, ne javi grešku ali niša niti ne napravi.
Riješio na drugi način: gotovi program pozivom s parametrima odradi što treba. Nije elegantno, vidi se prozor koji se otvori pri pozivanju programa, ali radi. Dok ne bude malo više vremena da se tim pozabavim.
U svakom slućaju hvala na pomoći.

MajorFatal, to sa komandnim barkodovima radi kod "običnih" bar kod čitaća, radio sam s njim i radi ok, osim što ima puno manje memorije pa mi stane 512 EAN13 kodova, a meni treba cca 1000. Ovo što imam je terminal (tako ga ovdje zovu) - čitać s ugrađenim kompom i tipkama na sebi. Za njega to ne vrijedi.
[ Milan Milosevic @ 23.12.2018. 20:25 ] @
Da li ti radi programče koji si stavio u attacmant?
Nemam čitač barkoda da probam kod ali mogu da testiram procedure iz dlla.

Moraš prvo da otvoriš pa da zatvoriš na kraju port. Evo primera ali ne znam da li radi.
Code:

function HM_OpenCommPort( port:UINT; nComBaud,nComDataBit,nComParity,nComStopBit:integer ):Boolean;
                                    external 'multidll.dll' name 'HM_OpenCommPort';
...

procedure TForm1.Btn_Otvori_PortClick(Sender: TObject);
 Var B:Boolean:
begin
// Com port 1;  7 za 19200bps  Baud Rate; 8-bitni podatak; stop bits 1(1 ili 2);parity 0-NO PARITY
  B:=HM_OpenCommPort(1,7,8,1,0);
   if B then Caption:='radi' else Caption:='ne radi';

end;


Zašto koristiš funkciju HM_upload za očitavanje barkoda? Zar ne bi trebalo HM_Download.



[Ovu poruku je menjao Milan Milosevic dana 24.12.2018. u 14:08 GMT+1]
[ tkaranovic @ 28.12.2018. 12:52 ] @
Zanimalo me kakav je to dll jer on ne moze da se otvori sa LoadLibrary.

Posto me zanimalo zasto nasam sam na netu ovaj pdf:

HT630_Application_Note_for_C_Language.pdf

koji ima ovo poglavlje:

Chapter 6 32 Bits DLL for Delphi
File description
Dir \Delphi
MULTIDLL.DLL DLL (This file is same with \32bit\dll32\multidll.dll)
MULTIPAS.PAS Communication Function declare file (Please include this file to your application ex. {$i multipas.pas })
Dir \Delphi\Sample
PROJECT1.EXE TEST PROGRAM
PROJECT1.DPR Test APPLICATION (Delphi 2.0)
UNIT1.PAS form1 source code
MULTIPAS.PAS same with \delphi\multipas.pas
MULTIDLL.DLL same with \DLL\multidll.dll
BB.JB2 Test file for download

Bas bi me zanimalo kako tah MULTIPAS.PAS koristi dll.

[ FranjoZG @ 29.12.2018. 19:58 ] @
Hvala na odgovorima, ovo sam riješio pozivom gotovog (priloženog) programa sa parametrima, tako radi. Preko DLL-a nisam uspio. Nije eleganto, program se pojavi ne vrijedi ni SW_HIDE...

- mora HM_UPLOAD jer je to naredba terminalu za upload podataka na komp, a ne kompu za "skidanje" podataka sa terminala
- priložene primjere sam pronašao i isprobao - ne rade...

Ako će netko imati vremena i volje igrati se s time, bio bih zahvalan :)
[ Milan Milosevic @ 30.12.2018. 06:35 ] @
Ja imam volje
Jesi li probao HM_OpenCommPort(3,7,8,1,0);
jer sam ja u primeru dao za port 1, čini mi se da si naveo da je uređaj prikačen na port 3
[ tkaranovic @ 30.12.2018. 07:21 ] @
Ja nemam vremena ali imam volje :)
Odnosno zanma me kako radi.

Gotov prilozeni program prvopoziva funkciju 8. Funkciju 8 poziva bez obzira na ime.
To sam utvrdio tako sto sa npravio dll sa istim imenom kad poziva 8 funkciju prvi parametar je iz ini fajla.
Nije mi priruci ini fajl ali je to vrednost u vezi tajmauta i u ini fajlu je 500.
Ako se promeni 500 u 400 onda se vidi iz dll koji sam napravio da program poziva funkciju sa tom vredoscu 400.

Prema tome program poziva sa brojem funkcije a ne sa imenom.
Ovo se moze proveiti na isti nacin na koji sam ja to uradio.

Postoje online vieveri dll-a itako moze da se vidi koja funkcija je osma po redu.

[ Milan Milosevic @ 30.12.2018. 10:34 ] @
Postoje programi sa DeAsemblovanje pomoću kojih je moguće videti koje se procedure iz kojih bibljoteka pozivaju, kao i parametri u Asembleru.
Kod ovog programčića ne znam koje dugme koristiš ali program pokazuje da skoro svi dugmići koriste proceduru HM_OpenCommPort.

Inače, video sam da je dll pisan u Visual studio C++ verzija kompajlera 6 što je jako staro.
[ tkaranovic @ 30.12.2018. 10:56 ] @
Pretpostavljam da je replika meni okodugmeta?

Ne korisitm dygme nego startujem samo program i pre nego sto se pojavi pozove funkciju o kojoj sam pisao.
[ Milan Milosevic @ 30.12.2018. 11:50 ] @
Ovo su funkcije redom koje poziva program iz multidll.dll pri pokretanju.

HM_set_time_out parametar integer 500
HM_set_ESC_delay parametar integer 30
HM_set_NAK_delay parametar integer 100
HM_set_power_saving_status parametar boolean 1(true) u ini piše Power_Saving=YES
HM_set_upload_file_save_mode integer 0












[Ovu poruku je menjao Milan Milosevic dana 30.12.2018. u 15:50 GMT+1]
[ tkaranovic @ 30.12.2018. 11:58 ] @
Ja sam pisao o prvoj. This 500 je iz ini fajla.
[ Milan Milosevic @ 30.12.2018. 13:22 ] @
Sve se uklapa po ini podešavanju

Evo spisak po brojevima svih procedura u dll

Code:

00000001    00001130    0000    0000E32B    HM_OpenCommPort
00000002    00001250    0001    0000E2DB    HM_CloseCommPort
00000003    000015B0    0002    0000E636    HM_poll
00000004    000012A0    0003    0000E850    HM_time_delay
00000005    000012E0    0004    0000E7B8    HM_set_power_saving_status
00000006    000012F0    0005    0000E56F    HM_get_power_saving_status
00000007    00001320    0006    0000E554    HM_get_power_saving_return
00000008    00001330    0007    0000E5C1    HM_get_time_out
00000009    00001340    0008    0000E7D3    HM_set_time_out
0000000A    00001350    0009    0000E6DD    HM_set_ESC_delay
0000000B    00005E90    000A    0000E4F5    HM_get_ESC_delay
0000000C    00001370    000B    0000E6EE    HM_set_NAK_delay
0000000D    00001360    000C    0000E506    HM_get_NAK_delay
0000000E    00001380    000D    0000E8CB    HM_warm_start
0000000F    00001420    000E    0000E5EE    HM_kermit
00000010    00005E30    000F    0000E371    HM_bar_tab
00000011    00005B60    0010    0000E37C    HM_buzzer
00000012    00001730    0011    0000E3AA    HM_cold_start
00000013    00005DF0    0012    0000E3B8    HM_comm_tab
00000014    00005E50    0013    0000E3C4    HM_date_time
00000015    00001950    0014    0000E3D1    HM_delete
00000016    00005E10    0015    0000E42F    HM_dev_tab
00000017    00001AF0    0016    0000E43A    HM_dir
00000018    00003640    0017    0000E498    HM_download
00000019    00003C10    0018    0000E45A    HM_download1
0000001A    000041B0    0019    0000E48B    HM_download2
0000001B    000017B0    001A    0000E4B0    HM_exec
0000001C    00004CF0    001B    0000E4B8    HM_exec_file
0000001D    00004E80    001C    0000E841    HM_terminal_id
0000001E    000056F0    001D    0000E4A4    HM_exe_size
0000001F    00005020    001E    0000E4C5    HM_file_exist
00000020    000058C0    001F    0000E5F8    HM_keypad
00000021    00005E70    0020    0000E62A    HM_password
00000022    000022F0    0021    0000E63E    HM_power_saving_off
00000023    00002460    0022    0000E652    HM_power_saving_on
00000025    00005250    0024    0000E665    HM_ram_size
00000026    00002150    0025    0000E693    HM_run
00000027    00001E40    0026    0000E6A8    HM_send_data
00000028    00004620    0027    0000E6B5    HM_sendback
00000029    00004BB0    0028    0000E6FF    HM_set_address
0000002A    00005DD0    0029    0000E835    HM_term_tab
0000002B    000026F0    002A    0000E8A0    HM_upload
0000002C    00002D20    002B    0000E86A    HM_upload1
0000002D    00003310    002C    0000E895    HM_upload2
0000002E    000025B0    002D    0000E8AA    HM_upload_mode
0000002F    000055A0    002E    0000E8B9    HM_ups
00000030    00004610    002F    0000E2AC    HM_320_field_port
00000031    00004610    0030    0000E2BE    HM_320_min_len
00000032    00004610    0031    0000E2CD    HM_320_record
00000033    00001310    0032    0000E5A5    HM_get_return_string_length
00000034    000026D0    0033    0000E7E3    HM_set_upload_file_save_mode
00000035    000026E0    0034    0000E5D1    HM_get_upload_file_save_mode
00000036    00001300    0035    0000E8C0    HM_version
00000037    00005A10    0036    0000E826    HM_system_font
0000003C    00004810    003B    0000E355    HM_autoboot
0000003D    00006930    003C    0000E237    HC_getch
0000003E    00006940    003D    0000E2A3    HC_putch
0000003F    00004610    003E    0000E26C    HC_modem_cmd
00000040    00006950    003F    0000E279    HC_modem_cmd_mode
00000041    00005EA0    0040    0000E85E    HM_upload11
00000042    000060E0    0041    0000E889    HM_upload22
00000043    00006360    0042    0000E44C    HM_download11
00000044    000065F0    0043    0000E47D    HM_download22
00000045    00006B10    0044    0000E386    HM_cancel_download
00000046    00006CD0    0045    0000E399    HM_cancel_upload
00000047    00006FE0    0046    0000E4E7    HM_flash_size
00000048    00007180    0047    0000E4D3    HM_firmware_version
00000049    00001CD0    0048    0000E441    HM_dir_ROM
0000004A    00001FD0    0049    0000E69A    HM_send_data1
0000004B    00004610    004A    0000E31A    HM_MR320_trigger
0000004C    00007340    004B    0000E810    HM_stop_communication
0000004D    00007350    004C    0000E28B    HC_modem_return_message
0000004E    000030F0    004D    0000E875    HM_upload1_continue
0000004F    00003F00    004E    0000E467    HM_download1_continue
00000050    00001280    004F    0000E33B    HM_SetRetryTimes
00000051    00001290    0050    0000E309    HM_GetRetryTimes
00000052    000049B0    0051    0000E361    HM_autoboot_rom
00000053    00007380    0052    0000E25E    HC_modem_Init
00000054    000074C0    0053    0000E240    HC_modem_Dial
00000055    00007380    0054    0000E24E    HC_modem_Hangup
00000056    000076E0    0055    0000E770    HM_set_card_data
00000057    000077B0    0056    0000E781    HM_set_card_data_name
00000058    00007880    0057    0000E761    HM_set_card_ID
00000059    000078E0    0058    0000E517    HM_get_card_ID
0000005A    000079B0    0059    0000E727    HM_set_app_set
0000005B    00007A10    005A    0000E797    HM_set_card_name
0000005C    00007A70    005B    0000E7A8    HM_set_card_pin
0000005D    00007AD0    005C    0000E74B    HM_set_card_APB_level
0000005E    00007B30    005D    0000E736    HM_set_card_APB_flag
0000005F    00007B90    005E    0000E407    HM_delete_card
00000060    00007BF0    005F    0000E3DB    HM_delete_all_card
00000061    00007C40    0060    0000E70E    HM_set_all_card_APB_flag
00000062    00007CA0    0061    0000E53E    HM_get_one_input_data
00000063    00007D60    0062    0000E416    HM_delete_one_input_data
00000064    00007DB0    0063    0000E526    HM_get_input_data_count
00000065    00007EA0    0064    0000E3EE    HM_delete_all_input_data
00000066    00007EF0    0065    0000E58A    HM_get_previous_input_data
00000067    00007FC0    0066    0000E616    HM_open_door_period
00000068    00008020    0067    0000E2EC    HM_Emergency_open_close_door
00000069    00008080    0068    0000E602    HM_open_door_always
0000006A    000080E0    0069    0000E687    HM_reset_DO
0000006B    00008130    006A    0000E34C    HM_alarm
0000006C    00008190    006B    0000E800    HM_show_message
0000006D    00008200    006C    0000E6C1    HM_set_DO
0000006E    00008260    006D    0000E6CB    HM_set_DO_channel
0000006F    000082D0    006E    0000E671    HM_read_DI
00000070    00008390    006F    0000E67C    HM_read_DO




[Ovu poruku je menjao Milan Milosevic dana 30.12.2018. u 14:36 GMT+1]
[ FranjoZG @ 30.12.2018. 18:37 ] @
dečki, hvala na trudu. probam pa javim. problem je što sam terminal morao isporučiti pa ću morati k njima tak da ne očekujete brzo rezultat.
[ tkaranovic @ 30.12.2018. 19:04 ] @
Nadam se se "decki" odnosi na sva moguca godista :)
[ tkaranovic @ 31.12.2018. 09:23 ] @
Dodacu i ono sto je mene zanimalo oko ovog dll :)

DLL nema DLLMAIN funckicju i zato ne moze da se otvodi sa LoadLibrary.
Moze da se otvori ovako:

LoadLibraryEx(PChar(OpenDialog1.FileName), 0, DONT_RESOLVE_DLL_REFERENCES);

Naravno moze i na gore opisan nacin i jedino su razlicite arese koje ce imati funkcije.
[ FranjoZG @ 01.01.2019. 15:06 ] @
Hvala na pomoći, kad malo očistim prijelaz godine, primit ću se opet toga.

tkaranović, sumljam da ima ovdje starijih (59), a žao mi je što nema cura... :)
[ tkaranovic @ 01.01.2019. 16:28 ] @
Opa, ja sam bio ubedjen da je tesko (ovde) biti stariji (53) od mene :)

Onda bolje da ne sirimo tu i ostale teme...
Samo cu dodati da mi svi (uzivo) daju manje godina nego sto imam :)
[ FranjoZG @ 02.01.2019. 08:42 ] @
tkaranovic, i ženske ili samo muški? :)
I meni se čini da imam manje nego što piše na krsnom listu, ali...
[ tkaranovic @ 02.01.2019. 10:25 ] @
Pisao sam samo o prvom utisku onih koji me ne znaju.
Tako da je prvi utisak za sve isti :)
Ja nisam pisao kako se ja osecam nego kako me drugi vide :)

Necu vise na ovu temo pisati i cudi me da moderator vec ne reaguje ;)