enkel

G

Graziu

Guest
Hej .. Jeg har et problem med telefonen prik kommunikation via RS232.
overhørte trafik ved tilslutning til telefonen ved hjælp af HyperTerminal ..
Men resultatet er meget forskellig fra den, der fremkommer ved mig ... ; |

vidst, at modem (telefon) kommunikerer via AT kommandoer.
betyder sender eksempel:

AT

udskiftes

OK

og begynder problemet .. , /
Jeg har indtryk af, at den sender AT tegn helt anden måde end at sende en HyperTerminal ..

ps. programmeret i C Builder. men nok til at hjælpe mig wc, c , Pascal, osv..

kode fra bogen (sende)

<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center"><tr><td> <b>Kode:</b> </td></tr><tr><td class="code">
//------------------------------------------------ ---------------------------

# Medtag <vcl.h>
Stdio.h
# Pragma hdrstop

# Pragma pakke (smart_init)
# Pragma ressource "*. DFM"

# Include "Unit1.h"
//------------------------------------------------ ---------------------------
# Pragma pakke (smart_init)
# Pragma ressource "*. DFM"
TForm1 * Form1;

HÅNDTAG hCommDev / / Port ID
LpFileName LPCTSTR, / / holder navnet på den havn
DCB DCB, / / struktur på den serielle port kontrol

int __fastcall TForm1:: Close_Comm (håndtag hCommDev)
{
CloseHandle (hCommDev);
returnere sandt;
}

//------------------------------------------------ ---------------------------
__fastcall TForm1: TForm1 (TComponent * Ejer)
: TForm (Ejer)
{
}
//------------------------------------------------ ---------------------------

void __fastcall TForm1:: Button5click (TObject * Sender)
{
Close_Comm (hCommDev);
Ansøgning-> Afslut ();

}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: Button4click (TObject * Sender)
{

lpFileName = "COM3";

hCommDev = CreateFile (lpFileName, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);

if (hCommDev! = INVALID_HANDLE_VALUE) / / kontrollere, om porten er
/ / Åben ordentligt
{
dcb.DCBlength = sizeof (DCB);
GetCommState (hCommDev, & DCB);

dcb.BaudRate = CBR_19200;

dcb.Parity = ODDPARITY / / sæt paritet
dcb.StopBits = ONESTOPBIT / / stop bits
dcb.ByteSize = 7, / / databit

/ / Flag-sample-indstillinger kontrol-DCB
dcb.fParity = TRUE / / paritetskontrol
dcb.fDtrControl = DTR_CONTROL_DISABLE;

dcb.fRtsControl = RTS_CONTROL_DISABLE;

dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDsrSensitivity = FALSE;
dcb.fAbortOnError = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fErrorChar = FALSE;
dcb.fNull = FALSE;

SetCommState (hCommDev, & DCB);

}
andet
{
kontakten ((int) hCommDev)
{
IE_BADID sag:
MessageBox (NULL, "Ugyldigt havn navn eller port er"
". Aktiv", "Error", MB_OK);
break;
};
}

}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: Button1Click (TObject * Sender)
{
if (hCommDev> 0)
TransmitCommChar (hCommDev, »A«);
andet
MessageBox (NULL, "Port er ikke åbent for transmissionen."
"Fejl", MB_OK);

}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: Button2Click (TObject * Sender)
{
if (hCommDev> 0)
TransmitCommChar (hCommDev, 'T');
andet
MessageBox (NULL, "Port er ikke åbent for transmissionen."
"Fejl", MB_OK);

}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: Button3Click (TObject * Sender)
{
if (hCommDev> 0)
TransmitCommChar (hCommDev, char (13));
andet
MessageBox (NULL, "Port er ikke åbent for transmissionen."
"Fejl", MB_OK);

}
//------------------------------------------------ ---------------------------
void __fastcall TForm1:: Button6Click (TObject * Sender)
{
if (hCommDev> 0)
TransmitCommChar (hCommDev, char (10));
andet
MessageBox (NULL, "Port er ikke åbent for transmissionen."
"Fejl", MB_OK);
}
//------------------------------------------------ ---------------------------

</td></tr></table>
unit.h føjes til biblioteket:

# Medtag <Classes.hpp>
# Medtag <Controls.hpp>
# Medtag <StdCtrls.hpp>
# Medtag <Forms.hpp>
# Medtag <Buttons.hpp>
# Medtag <ComCtrls.hpp>
# Medtag <Dialogs.hpp>
# Medtag <ExtCtrls.hpp>

i afsnit private: int __fastcall TForm1:: Close_Comm (HÅNDTAG hCommDev);
på denne måde sender brevet efter literce ..
har også prøvet en hel ..

<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center"><tr><td> <b>Kode:</b> </td></tr><tr><td class="code">
# Definer cbOutQueue 64 / / output buffer størrelse
# Definer cbInQueue 64 / / input buffer størrelse

LPCTSTR query = "AT", / / Eksempel query
Buffer_O char [cbOutQueue], / / Buffer udgang
Buffer_I char [cbInQueue] / / input buffer
Number_Bytes_Read DWORD, / / Antal bytes, som Læs - antal bytes
/ / Læsning
HÅNDTAG hCommDev / / Port ID
LpFileName LPCTSTR, / / pointer til portnavn
DCB DCB, / / struktur på den serielle port kontrol
FdwEvtMask DWORD, / / information om den aktuelle tilstand transmission
Comsat Stat / yderligere oplysninger om ressourcer Port
DWORD Fejl / / repræsenterer den type af eventuelle fejl

</td></tr></table>

<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center"><tr><td> <b>Kode:</b> </td></tr><tr><td class="code">
int __fastcall Write_Comm (håndtag hCommDev, LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite)
{
NumberOfBytesWritten DWORD;

EscapeCommFunction (hCommDev, SETRTS);

if (WriteFile (hCommDev, lpBuffer,
nNumberOfBytesToWrite, & NumberOfBytesWritten, NULL)> 0)
{
WaitCommEvent (hCommDev, & fdwEvtMask, NULL);

EscapeCommFunction (hCommDev, CLRRTS);

returnere sandt;

}
andet
return false;
}
</td></tr></table>

<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center"><tr><td> <b>Kode:</b> </td></tr><tr><td class="code">
void __fastcall TForm1:: ConnectClick (TObject * Sender)
{

lpFileName = "COM3";
hCommDev = CreateFile (lpFileName, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);

if (hCommDev! = INVALID_HANDLE_VALUE) / / check om porten er åben korrekt
{
SetupComm (hCommDev, cbInQueue, cbOutQueue);

dcb.DCBlength = sizeof (DCB), / / DCB strukturen i de nuværende størrelser
GetCommState (hCommDev, & DCB);
dcb.BaudRate = ATOL (("CBR_" Form1-> Speed-> Text). c_str ()) / / valg af hastighed

/ / - ------- Kommunikation parametre
dcb.Parity = NOPARITY / / sæt paritet
dcb.StopBits = ONESTOPBIT / / stop bits
dcb.ByteSize = 8 / / databit

/ / - Justering af kontrolprøven DCB ----
dcb.fParity = TRUE / / paritetskontrol
dcb.fDtrControl = DTR_CONTROL_ENABLE / / DTR permanent
/ / Active
dcb.fRtsControl = RTS_CONTROL_DISABLE / / RTS - staten
/ / Offline
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDsrSensitivity = FALSE;
dcb.fAbortOnError = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fErrorChar = FALSE;
dcb.fNull = FALSE;

SetCommState (hCommDev, & DCB);
GetCommMask (hCommDev, & fdwEvtMask);
SetCommMask (hCommDev, EV_TXEMPTY);

}
andet
{
kontakten ((int) hCommDev)
{
IE_BADID sag:
MessageBox (NULL, "Ugyldigt havn navn eller porten er aktiv.", "Error", MB_OK);
break;
};
}
/ / FILE * pstree / / pointer til fil
if (hCommDev> 0) / / re-check, hvis porten er åben
{
strcpy (Buffer_O, forespørgsel);
Write_Comm (hCommDev, Buffer_O, strlen (Buffer_O));
}
}
</td></tr></table>

---------
Kan nogen hjælpe? indtil jeg begynde at spille med winapi, så .. du bære over med os .. med støtte også com .. P bare printes ud 140 sider, og jeg er begyndt at læse .. Men .. Enhver hjælp vil være taknemmelig! : D

ingen af de ovennævnte version ikke virker desværre .. ; |

========
edit
========

simpel tommelfingerregel, hvis nogen kan forklare mig hvad der er den paritet bit, stop bits, osv.? :) Fordi jeg forstår dette medium og bruge det færdige setup:)

Jeg kan tilføje, og programmet er at kommunikere med telefonen (com, usb, IrDA, bt) .. Heldigvis er alle disse moduler installeret på August autiomatycznie porrcie COM:) og dens niveauer er tilgængelige.
 
En stor del af koden, jeg ønsker ikke at analysere), men poszukalbym program, som overvåger den COM-port du se præcis, hvad du skal sende dit program. Jeg har ikke brugt nogen endnu, så svært for mig at anbefale konretny, men her har du to links:

<a href="http://www.kmint21.com/serial-port-monitor" target="_blank" rel="nofollow">http://www.kmint21.com/serial-port-monitor</a> - ser ud til at fri
<a href="http://www.com-port-monitoring.com/portmonitor.html" target="_blank" rel="nofollow">http://www.com-port-monitoring.com/portmonitor.html</a> - prøveversion download
 
Jeg har lige lytte til, hvad mit program sender; |

hyper terminal sender hvert bogstav, som om enheden afspejler det reflekterede ekko brev .. Tryk på Enter efter char (13)
indtaste og sende tegnet får svaret ..
nemlig:
anmodning: En
anserw: En

anmodning: T
anserw T

anmodning:.
anserw:.
anserw: .. OK ..

men når mit program .. bliver på forskellige måder:

anmodning: AT.

og det er nok;)

Jeg bruger Free Serial Port Monitor .. :)
analysere ikke have meget i hvad:)
Disse er klare eksempler på, at der i en lidt ændret eller eksempler, der allerede er på forum .. ; |

desværre .. modem ikke reagerer på mit program, hvor hyperterminalowi: (

/ / EDIT

Han vendte om RTS ..
pozmienialem har nogen bajerki og arbejder;]
hmm .. Nu rundt for at kombinere og klæde den på nogle nemme og sjovt for mig at fungere:)

hvis nogen kender grunden det ikke virker?

i.. måske længere, hvis nogen skriver på tavlen på en <strong>enkel</strong> måde at forklare mig, hvad er det RTS, etc?
 
Grunden, i princippet, fandt han: Flow Control (flowkontrol) - den modtagende enhed styrer mængden af data, der sendes til ham. De 232 er to "typer" flow kontrol:
1. hardware - ingen ekstra signal linjer RTS, CTS - læs om operationen 232,
2. Software XON, XOFF - sendt specifikt mærker på strækninger Rx / Tx
3. og ingen flow kontrol.
Sandsynligvis telefonen kræver hardware flow kontrol, så du skal ikke fungere uden sin integration.
 
hmm .. allerede optaget i at læse et temmelig omfattende bog (i øvrigt taget fra dette forum: P)

som om jeg havde nogen problemer endnu, vil jeg skrive her.
(Jeg vil kun behandler spørgsmålet)
 
Dag, næsten intet udstyr med hardware flow kontrol, alle mikrocontrollere som allerede omfatter Xon / Xoff-klar, og alle spare på kablerne.
 
hmm .. øjeblikket bruger jeg IrDA. (Mine installeret på COM3)
Men ...
Send til havnen (telefonen) virker perfekt ..
mens modtageren? ansøgning vil hænge, du er nødt til at vente længe på baaardzo odp
Jeg lagde mærke til aflyttet en masse "pakker" (?) Type NED FALSK .. dvs som om læsning fejlede; |
baaardzo nogle gange jeg vente længe, eller endog at vente på ODP hjælper ikke.

HyperTerminal ikke sådanne problemer. Jeg bemærkede dog, at hvis han oftere sætter DCB?

Jeg kender ikke; |
hjælp:)

Connect:
<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center"><tr><td> <b>Kode:</b> </td></tr><tr><td class="code"> lpFileName = "COM3";
hCommDev = CreateFile (lpFileName, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);

if (hCommDev! = INVALID_HANDLE_VALUE) / / check om porten er åben korrekt
{
SetupComm (hCommDev, cbInQueue, cbOutQueue);

dcb.DCBlength = sizeof (DCB), / / DCB strukturen i de nuværende størrelser
GetCommState (hCommDev, & DCB);
dcb.BaudRate = ATOL (("CBR_" Form1-> Speed-> Text). c_str ()) / / valg af hastighed

/ / - ------- Kommunikation parametre
dcb.Parity = NOPARITY / / sæt paritet
dcb.StopBits = ONESTOPBIT / / stop bits
dcb.ByteSize = 8 / / databit

/ / - Justering af kontrolprøven DCB ----
dcb.fParity = FALSE, / / paritetskontrol
dcb.fDtrControl = DTR_CONTROL_HANDSHAKE / / DTR permanent
/ / Active
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE / / RTS - staten
/ / Active
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDsrSensitivity = FALSE;
dcb.fAbortOnError = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fErrorChar = FALSE;
dcb.fNull = FALSE;

SetCommState (hCommDev, & DCB);
/ / GetCommMask (hCommDev, & fdwEvtMask);
/ / SetCommMask (hCommDev, EV_TXEMPTY);

}
andet
{
kontakten ((int) hCommDev)
{
IE_BADID sag:
MessageBox (NULL, "Ugyldigt havn navn eller porten er aktiv.", "Error", MB_OK);
break;
};
}

</td></tr></table>
(. HANDSHAKE. Ligegyldigt om jeg aktiverede eller håndtryk er den samme; | proowalem håndtryk til, at RTS og DTR - ingen ændring)

denne sender: (taget fra nogen)
<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center"><tr><td> <b>Kode:</b> </td></tr><tr><td class="code"> int __fastcall TForm1:: WriteUart (unsigned char * buf, int len)
{
DwNumBytesWritten DWORD;
WriteFile (hCommDev / / Port håndtag
BUF, / / Pointer til de data, til at skrive
len, / / Antal bytes til at skrive
& DwNumBytesWritten, / / Pointer til de skriftlige antallet af bytes
NULL) / / Skal NULL
if (dwNumBytesWritten> 0)
tilbagevenden 1 / / Transmission dig succes
ellers return 0; / / Fejl Fremsendende?
} </td></tr></table>

og så svarede: (taget fra nogen)
<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center"><tr><td> <b>Kode:</b> </td></tr><tr><td class="code"> int __fastcall TForm1:: ReadUart (unsigned char * buf, int len)
{
BOOL RET;
unsigned long retlen;

RET = ReadFile (hCommDev, / / håndtag af filen til at læse
BUF, / / pointer til buffer, der modtager dato
len, / / antal byte til at læse
& Retlen, / / pointer til antallet af læse bytes
NULL / / pointer til struktur for data
);
if (retlen> 0) / / Hvis oplysningerne er
afkast (int) retlen / / returnerer længden

ellers return 0; / / ellers ingen data er blevet læst
} </td></tr></table>

fejlen ligger et eller andet sted på kvitteringen .. , /

global variabel: unsigned char EOL [] = {0x0D};

eksempel:

WriteUart ("AT", 2);
WriteUart (EOL, 1);

(Vil blive sendt til havnen)

odp char [200];
ReadUart (ODP, 20);

(Og dette program bliver zwiecha) ..

fra hvad jeg ser, programmet sender en forespørgsel og afventer et signal fra det svar .. men .. Svaret kommer lige efter slukket for programmet .. nemlig:

Jeg kører programmet
Jeg indstille forbindelsen parametre
Send kommandoer ved
(Kommando er sendt)

suspenderet programmet i august .. eller b.dlugoo venter ..

ud af programmet ..
lytter til svaret pludselig kommer i havn OK

AT
OK

; |
måske nogen ved, hvad jeg gjorde forkert?

Indsættes efter 4 [h] 22 [minutter]:

Jeg opdagede, hvor / - ligger problemet ..
Programmet altid ned, når du læser timeren ReadFile .. det vil sige for eksempel hver 50ms, med gentagne læse og analysere de data, der blev givet. ; |

Indsættes efter 1 [h] 57 [minutter]:

nogen ved hvorfor?
og hvordan det skal gøres for programmet til at lytte til svaret fra havnen fra det øjeblik, hvor brugeren sender forespørgslen, indtil du få svar?
 
Jeg foreslår du læser <strong>SetCommMask</strong> eventami og funktion, der giver dig mulighed for at indstille portdriveren vil skabe en begivenhed for os (WaitCommEvent).
</a> <a href="http://msdn.microsoft.com/en-us/library/aa363435(VS.85).aspx" target="_blank" rel="nofollow"> http://msdn.microsoft.com/en-us/library/aa363435 (VS.85). aspx</a>
 
derefter sætte det i en separat tråd? eller i timer, der vil blive hele tiden til at lytte WaitCommEvent?
Jeg ved ikke præcis, hvad der ville give det til mig.
eller arbejde i løkken, og også for at forhindre fejlagtige drift ved modtagelse?
 
Læs dette: <a href="http://forum.idg.pl/lofiversion/index.php/t42469.html" target="_blank" rel="nofollow">http://forum.idg.pl/lofiversion/index.php/t42469.html</a>
Dette er, hvad sandheden om Delphi, men bruger den samme API, og er en dejlig opdeling af hvad til hvad.
 
oo. :) Det med Delphi ikke generer mig - jeg kender lidt .. desuden .. Objekt Pascal ligner BCB, p
thx:) Jeg begynder at læse. :)
 
Applet Jeg skrev engang, som herskede over telefonen Siemens ME45 [uploade billeder, synkronisering af tid, ændre indstillinger, etc]. Jeg kunne ikke se nogen steder hvilken model telefon du vil håndtere ... Læs om, hvad indstillingerne for dataoverførsel udbytte med dig er:

<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center"><tr><td> <b>Kode:</b> </td></tr><tr><td class="code"> dcb.Parity = ODDPARITY / / sæt paritet
dcb.StopBits = ONESTOPBIT / / stop bits
dcb.ByteSize = 7, / / databit </td></tr></table>

og fra hvad jeg ved virker på de fleste telefoner:

<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center"><tr><td> <b>Kode:</b> </td></tr><tr><td class="code"> 19200,8,1, NOPARITY </td></tr></table>

Hertil kommer, netværk kigge efter beskrivelsen af AT-kommandoer på det (er, at en masse).
 
Jeg ønsker at styre SE-selskabet. K700 og andre.
Problemet er, at jeg har noparity, onebitstop, bytesize de 7 eller 8. Jeg prøvede alle kombinationer ..

Tilføjet til 1 [minutter]:

AT-kommandoer .. Jeg skrev et program P kun bruge ActiveXperts ComPort .. Version 30dniowa p efter dette tidspunkt han ikke fæstner .. fordi jeg ønskede at skrive dine egne funktioner, Gettin .. , /
 
Og nej før, derfor at købe licenser til ActiveXperts ComPort? Så du havde allerede kørt færdigt program ... : D

PS: Jeg har allerede Przeszukiwales elektrode? : Roll:
 
ja .. og formentlig alle læst p

købe?! omg .. Sork men jeg foretrækker at have disse "$ 120" eller euro i lommen, måske forståeligt p ..
 
Tja, faktisk, dette tilfælde langt bedre i skrive en selv: D

Kig her [Uart.cpp og Uart.h]
</a> <a href="http://www.elektroda.pl/rtvforum/viewtopic.php?t=998946&highlight=ktorych+szukales&sid=9f59610823dd05e9691015f111573298" target="_blank"> http://www.elektroda.pl/rtvforum/viewtopic.php?t=998946&highlight=ktorych szukales&sid=9f59610823dd05e9691015f111573298</a>
 
Hvordan gør jeg ikke noget imod jeg vil anbefale Delphi Lazarus klar komponenter til koma (gratis selvfølgelig)
 
Delphi blander sig ikke, men de allerede har et program i C Builder .. Så .. Jeg har ikke meget lyst til at ændre koden temmelig blide (temmelig omfattende) på Delphi .. og nogle omformere ikke har tillid til p

og om disse komponenter vil operere under Builder? : D

har lige læst hæftet, og allerede ved hvad det er ligestilling og alt det andet:) Jeg gik igennem den teoretiske del af noget:) Nu tænker jeg:)

Tilføjet efter 30 [sekunder]:

ps. Den uarpa, gennemgår vi det:) thx JML
 
øjeblikket ikke har tid til at fordybe sig yderligere .. men .. i den nærmeste fremtid skal flytte med jobbet:)
derefter smide det kodzik og løsning;]
 

Welcome to EDABoard.com

Sponsor

Back
Top