[LØST] Programmering til Port

11 innlegg i emnet

Skrevet

Heisann!

Jeg kan ingenting når det kommer til programmering, derfor spør jeg her;

Er det vanskelig å lage ett program som sender "13h" til I/O port "48f"h ?

Takker på forhånd :)

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet (endret)

Sende "Enter" ("Carriage return") til en I/O-port ?

ENTER er 13 desimal og ikke hexadesimal. Vanligvis brukes den sammen med 10 Linefeed i samme slengen (et linjeskift er 13 og 10 desimal)

Det blir trolig enklere om du forteller hvilken oppgave Port 48Fh har.

Jeg har brukt direkte port-programmering i Turbo Pascal for flere år siden. Jeg brukte Port[$60] for å lese av tastaturet direkte ($-tegnet står for "Hexadesimal" i TP, så i praksis er det port 96 omregnet til desimal). Tastaturet er kun "Read" - du kan kun LESE data derfra og ikke skrive til det (såvidt jeg husker). Metoden var svært lite egnet, så jeg husker ikke hvorfor jeg brukte den.

Jeg har også sendt massevis av data direkte til skjermkort - Port 3C8 eller noe slik. Mest vanlig var å sende en palett på 16 eller 256 farger når jeg skulle bruke en egendefinert palett. Såvidt jeg husker brukte jeg BIOS-funksjoner og ikke "direkte skriving" av data på disse tingene.

Svaret er altså at det er mulig å sende eller hente data fra bestemte I/O-adresser i programmering. Metoden brukes trolig ikke under Windows av nyere utgaver, der går mye av dette via DirectX. Jeg tror du kanskje kan ha ENKLERE løsninger på samme oppgave innebygd i språket.

Jeg klarer temmelig sikkert å spore opp en liste over slik programmering, men jeg bør helst vite hva Port 48Fh er. Det blir enda enklere om du forteller hvilken oppgave du prøver å løse.

Mest kjente liste over Interrupts og BIOS-funksjoner er fra Ralph Brown. Jeg fant en HTML-versjon på nettet, men jeg fant ikke frem i denne på samme måte som i originalen.

Endret av Morten58
0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Hei!

Takk for raskt svar.

Grunnen til at jeg spør er at jeg har en datakasse som jeg skal bruke ett butikkdataprogram jeg har lastet ned på.

Jeg trenger i den forbindelse å sende nevnte kommando til nevnte i/o port.

Porten heter bak kassen DRW1 (Drawer 1), og en en 6 pin utgang (som en telefonkontakt).

Dette er det som står i manualen til datakassen;

Cash drawer control in GPIO port

To Open Drawer

Write "13h " to I/O Port "48f"h

To Close Drawer

Write "1bh " to I/O Port "48f"h

Detect Drawer Status

Read I/O “48f”h

Definition (BIT0 )

MSB LSB

Check whether BIT0 = 1

1 : the drawer was close

0 : the drawer was open

Å lukke skuffen eller detektere om det er åpen er funksjoner som ikke er nødvendige. Er kun åpne den som er interessant.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet (endret)

Kasseprogrammet burde egentlig håndtere denne oppgaven - uten behov for noen eksterne programmer.

Jeg prøvde bare å vise at det er MULIG, og at jeg har brukt slike løsninger i DOS-basert programmering.

Jeg ville normalt sjekket programmets setup (innstillinger).

Jeg ville også sjekket nærmere i manual og hjelpefil for hvordan oppgaven foreslås løst. Å åpne eller lukke en kasse løses vel vanligvis med å trykke på en knapp?

------

Alt det som er under her er ikke "løsningsforslag", men det er mulig at noe av dette kan være DEL av en løsning senere.

Med vanlig tastatur kan du sende slike "kommandoer" til den vanlige Keyboard-bufferen i minnet, der hvor tastetrykk lagres midlertidig hvis du taster for fort.

Ctrl A = 1, Ctrl B = 2, osv.

Ctrl Z = 27 (1Bh) Utregnet til desimal er Hex 19 det samme som 16+11=27 = bokstaven Z

Ctrl S = 19 (13h)

Heksadesimale tall er

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F (desimal 0 - 15)

10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F (desimal 16 - 31)

20 21 osv. opp til FF som er 255.

... men Windows bruker sine egne løsninger, og har omdannet mange av disse "Ctrl + bokstav" til "sine hurtigtaster".

------

Spe på med litt mer opplysninger fra programmets manual - om hvordan ting foreslås løst ?

Hvis dette er Windowsprogram ville "Ny maskinvare oppdaget" vært naturlig for porten som brukes, hvis den finnes på et eget kort.

Det vil også si at den trenger en driver - og driveren har vanligvis alt av slike løsninger innebygd. Den har også et setup-program eller andre løsninger for innstillinger.

Jeg har følelsen av at du egentlig mangler en driver til dette kortet, eller noe lignende.

EDIT:

Det jeg kan bidra med er dette ...

Du er inne på feil manual - manualen du ser på er for programmerere som skal lage driver eller program til kassen. Du har liten nytte av dette nivået.

Her somler du bare bort tid - og finner ikke løsninger som du kan bruke. Alt som du siterte fra manualen er beregnet på programmerere.

Endret av Morten58
0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Hei. Takk for utfyllende svar, har ikke tilgang til kassen her, så skal prøve å snart jeg har anledning.

Jeg har sjekket endel rundt på dette. Den vanligste oppkoblingen er at skuffen er koblet til kvitteringsskriveren, og at åpningskommandoen sendes via printeren.

Dette er dessverre ikke mulig ettersom printeren er innebygget.

En annen mulighet er å koble den på en com port. Kabel for dette har jeg ikke, men jeg kan jo prøve å lage en, det vil antageligvis fungere.

(Jeg har mulighet til å velge utgang lpt/com porter og epson esc via kvitteringsskriveren i programvaren)

Jeg har faktisk ikke sett noe program som bruker denne DRW1 porten, som jeg kun har sett på pos kasser.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

DRW1-porten høres ut fra beskrivelsen til å være en vanlig nettverksport - "minner litt om en telefonkontakt".

Med 6 pinner virker det som en 10/100 Mbits port (litt eldre nettverksport, men ikke veldig gammel. Stort sett vanlig standard i dag også.

------

ESC er også tegn nummer 27 (1Bh). Det høres normalt ut å åpne en skuff med ESC.

Input fra keyboard bruker egentlig 2 koder.

- en scancode som er tastens plassering på tastaturet (ESC er nummer 1)

- en charactercode ("bokstaven" som generes) - ESC er et maskinstyringstegn nummer 27

Allte tegn 0-31 er maskinstyringstegn, mens space er nummer 32 (første egentlige "bokstav" på tastaturet)

Trykker du f.eks. Ctrl M her vil du trolig få samme effekt som ENTER. Begge deler gir maskinstyringstegn nummer 13.

------

Alt du siterte fra manualen til kassen er "heavy stuff" beregnet på programmerere. Jeg kan garantere at du ikke finner en løsning du kan bruke der. Dette var ting som bygges inn i program som styrer kassen, eventuelt i en driver for maskinvare.

------

Jeg tror du kan få orden på dette når programmet er installert og du har kassen tilkoblet. Dette er en oppgave som er omtrent håpløs å løse teoretisk, men som vi ofte klarer å løse når vi ser rekkefølgen på delene.

Det hørtes veldig fornuftig ut for et kassestyringsprogram at det

- godtar ESC som input fra et tastatur

- sender et signal via porten til selve kassen

- kassen svarer med å åpne skuffen

------

Jeg gjetter på at du har problem med å innstille dette til å kommunisere via rett port, og at du eventuelt mangler en driver for porten det gjelder. Dette er løsbare oppgaver hvis alt er koblet riktig.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

DRW1 er en RJ11, hvor jeg har mulighet til å endre spenningen fra +12v til +24v.

Grunnen til at jeg tenkte det var mulig å få svarene ut ifra manualen, var at jeg kan få programmet til å starte en fil når skuffen skal åpnes. Dermed tenkte jeg at hvis disse kodene ble programmert i en fil som kunne kjøres når skuffen skulle åpne seg så var det en mulighet.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Stort sett kommuniserer en via RS232 eller RJ11 fra datamaskinen til kassa.

Dette hadde vært en fordel om du oppga hvilken type kasse det er snakk om.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

DRW1 er en GPIO port. Jeg har nå fått skrevet ett program som sender åpningskommando og stengningskommando til denne porten ved hjelp av inpout.dll, og det fungerer utmerket. Lukker derfor saken. Takker for alle svar.

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Supert at du fant en løsning.

Jeg har samme problem som det du hadde. Hadde du kunnet dele din løsning??

Takk

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Skrevet

Hei!

Skal du skrive til nøyaktig samme port som meg, eller en annen?

Jeg vet dessverre ikke noe mer enn at inpout.dll som ble brukt til å skrive til porten, og at det ble programmert i C. (Jeg fikk en fyr til å gjøre dette for meg).

0

Del dette innlegget


Lenke til innlegg
Del på andre sider

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!


Start en konto

Logg inn

Har du allerede en konto? Logg inn her.


Logg inn nå

  • Hvem er aktive   0 medlemmer

    Ingen innloggede medlemmer aktive