Accueil > Forum > > > > transmission de fichier par le port série
transmission de fichier par le port série
mercredi 11 février 2004 à 10:42:36 |
transmission de fichier par le port série

jackyjacky
|
Salur à vous Je voudrais savoir si c'est assez facile de réceptionner un fichier par l'intermédiare du port série et si oui, si quelqu'un peut me proposer quelque chose. de plus je vais certainement devoir créer une tâche de fond sous Windows 95, ma question est donc de savoir si c'est possible. Mecri pour votre aide. @++
|
|
mercredi 11 février 2004 à 13:37:14 |
Re : transmission de fichier par le port série

ymca2003
|
voici une version épurée de mon prog serial qui ne fait que la réception (tous les paramètres sont en dur, pas de vérif d'erreurs). bouton recevoir débute la réception Stop l'arrête Recep.cpp : #include <windows.h>
#include "Resource.h"
// message rensignant sur le nb d'octets reçus #define WM_COMM_RX(WM_USER + 0x100)
// variables globales HINSTANCE g_hAppInstance = NULL; // instance de l'application HWND g_hMainDlg = NULL; // boîte de dialogue HANDLE g_hComm = NULL; // handle port série HANDLE g_hThread = NULL; // handle thread de lecture BOOL g_bRunning = FALSE; // vrai si thread doit continuer
int CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
void CmdRecep(); void CmdStop();
DWORD WINAPI ThreadFunc(LPVOID);
//************************************************ //************************************************ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { g_hAppInstance = hInstance; DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, DlgProc); return 0; }
//************************************************ //************************************************ int CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_INITDIALOG : { g_hMainDlg = hDlg; EnableWindow(GetDlgItem(hDlg, IDC_RECEP), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_STOP), FALSE); return TRUE; } case WM_COMMAND : { switch(LOWORD(wParam)) { case IDCANCEL : CmdStop(); EndDialog(hDlg, IDCANCEL); return TRUE; case IDOK : CmdStop(); EndDialog(hDlg, IDOK); return TRUE; case IDC_RECEP : CmdRecep(); return TRUE; case IDC_STOP : CmdStop(); return TRUE; } return FALSE; } case WM_COMM_RX : { // mise à jour nombre d'octets reçu char szText[64]; wsprintf(szText, "%d octets", lParam); SetWindowText(GetDlgItem(hDlg, IDC_NB), szText); } } return 0; }
//************************************************ //************************************************ void CmdRecep() { // ouverture port série g_hComm = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL); SetupComm(g_hComm, 4096, 4096);
// affectation délais COMMTIMEOUTS cto; ZeroMemory(&cto, sizeof(COMMTIMEOUTS)); cto.ReadIntervalTimeout = 0xFFFFFFFF; SetCommTimeouts(g_hComm, &cto);
// affectation configuration DCB dcb; ZeroMemory(&dcb, sizeof(DCB)); dcb.DCBlength = sizeof(DCB); dcb.BaudRate = 9600; dcb.fBinary = TRUE; dcb.fDtrControl = DTR_CONTROL_ENABLE; dcb.fRtsControl = RTS_CONTROL_ENABLE; dcb.XonLim = 0x100; dcb.XoffLim = 0x100; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; dcb.XonChar = 0x11; dcb.XonChar = 0x13; dcb.ErrorChar = '?'; dcb.EofChar = 0x1A; dcb.EvtChar = 0x10; SetCommState(g_hComm, &dcb); // purge PurgeComm(g_hComm, PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT); EscapeCommFunction(g_hComm, SETDTR);
// création thread de lecture DWORD dwThreadId; g_bRunning = TRUE; g_hThread = CreateThread(NULL, 0, ThreadFunc, &g_bRunning, 0, &dwThreadId);
// mise à jour affichage EnableWindow(GetDlgItem(g_hMainDlg, IDC_RECEP), FALSE); EnableWindow(GetDlgItem(g_hMainDlg, IDC_STOP), TRUE); SetWindowText(GetDlgItem(g_hMainDlg, IDC_NB), ""); }
//************************************************ //************************************************ void CmdStop() { // si pas de thread en cours if(g_hThread == NULL) return;
// on attend que le thread s'arrête tout en traitant les messages // relatifs au port série g_bRunning = FALSE; while(WaitForSingleObject(g_hThread, 10) != WAIT_OBJECT_0) { // si un message relatif au port série est présent MSG msg; if(PeekMessage(&msg, NULL, WM_COMM_RX, WM_COMM_RX, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } }
// fermeture handles CloseHandle(g_hThread); CloseHandle(g_hComm); g_hThread = NULL; g_hComm = NULL; EnableWindow(GetDlgItem(g_hMainDlg, IDC_RECEP), TRUE); EnableWindow(GetDlgItem(g_hMainDlg, IDC_STOP), FALSE); }
//************************************************ //************************************************ DWORD WINAPI ThreadFunc(LPVOID lpData) { // ouverture fichier de sortie, récup paramètres HANDLE hFile = CreateFile("c:\\recep.txt", GENERIC_WRITE, 0, NULL,CREATE_ALWAYS, 0, NULL); BOOL* pRunning = (BOOL*) lpData;
BYTE buffer[4096]; DWORD dwTotal = 0;
// tant que le thread doit tourner while(*pRunning == TRUE) { // lecture d'un bloc DWORD dwLength; ReadFile(g_hComm, buffer, 4096, &dwLength, NULL); // si pas de caractères reçus, faire une petite pause if(dwLength == 0) Sleep(10); else { // écriture dans le fichier, notification dialogue DWORD dwNbBytesWritten; WriteFile(hFile, buffer, dwLength, &dwNbBytesWritten, NULL); dwTotal += dwNbBytesWritten; SendMessage(g_hMainDlg, WM_COMM_RX, 0, dwTotal); } }
// fermeture fichier de sortie CloseHandle(hFile); return 0; }
|
Recep.rc : #include "Resource.h" IDD_MAINDIALOG DIALOG DISCARDABLE 0, 0, 142, 95 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Réception port série" FONT 8, "MS Sans Serif" BEGIN PUSHBUTTON "Fermer",IDCANCEL,10,70,50,14 PUSHBUTTON "Recevoir",IDC_RECEP,10,20,50,14 PUSHBUTTON "Stop !",IDC_STOP,70,20,50,14 LTEXT "",IDC_NB,10,44,110,8 END
|
Resource.h : #define IDD_MAINDIALOG 101 #define IDC_RECEP 1000 #define IDC_STOP 1002 #define IDC_NB 1003
|
|
|
mercredi 11 février 2004 à 16:37:09 |
Re : transmission de fichier par le port série

jackyjacky
|
Est ce possible de mettre ce genre de programme en tache de fond?
|
|
mercredi 11 février 2004 à 20:01:34 |
Re : transmission de fichier par le port série

ymca2003
|
il l'est déjà plus ou moins, il suffit de virer l'interface graphique et la réception se fait par le thread créé.
|
|
lundi 16 février 2004 à 16:20:03 |
Re : transmission de fichier par le port série

jackyjacky
|
j'ai essayé de suivre le raisonnement de ton programme, mais je il est un peu compliqué par rapport à mon niveau de C. Je ne suis pas sur de savoir où est stocké le fichier reçu ( je pense que c'est dans hFile) et je n'arrive pas à différencier complètement l'interface windows du reste du programme. Donc j'espère que tu as un peu de temps afin de me le détaillé un peu plus Merci d'avance.
|
|
lundi 16 février 2004 à 23:49:18 |
Re : transmission de fichier par le port série

ymca2003
|
L'interface windows et contenu dans la fonction DlgProc (gestion clique des boutons et affichage progression).
ThreadFunc est le point d'entrée du thread créé (la tache de fond), qui scrute en permannece le port série. L'appel à la fct SendMessage permet de demander d'afficher la progression.
CmdRecep et CmdStop sont 2 fonctions qui permetent de commencer et d'arrêtrer cette tache (peuvent être appelée indépendant de l'interface graphique à partir d'un prog en mode console par ex)
|
|
jeudi 19 février 2004 à 15:23:35 |
Re : transmission de fichier par le port série

jackyjacky
|
Bon j'ai réétudié mon problème, et je viens de voir que je ne pose pas les bonnes question. Les commandes que tu me donnes ne sont pas compatibles avec mon soft car je suis sous DOS (Turbo C++ v3.0 càd du borland) Donc si quelqu'un à quelque chose à me proposer je suis preneur... Merci
|
|
vendredi 20 février 2004 à 17:53:56 |
Re : transmission de fichier par le port série

ymca2003
|
En effet ce que je t'ai mis c'est pour Windows (API Win32). Pour DOS, je ne sais pas comment faire.
|
|
Cette discussion est classée dans : fichier, port, série, blue, transmission
Répondre à ce message
Sujets en rapport avec ce message
transmission de fichier avec le port serie en C++ [ par dehmani ]
Est-ce-que quelqun peut me faire un petit programme en C++ qui fait l'envoye et la reception d'un fichier avec le port serie? Vueillez me l'envoyer su
Vitesse de transmission max sur port Série [ par Galmiza ]
Salut,Dans les diverses lib série que j'ai vu que la vitesse de transmission maximale sur le port série est de 256kbps.Est-ce qu'on peut aller plus vi
Envoi d'entier par le port série [ par nanalye ]
Bonjour tout le mondeHelp !!!!Je veux envoyer des entiers par le port série et je voulais savoir si je peux le faire par le WriteFile ou si c seulemen
problèmes de débutant avec le port série et TComPort [ par titan65 ]
Bonjour, D'abord sachez que je ne connais rien à C++! Voici mon objectif: faire arriver 4 signaux simples (chacun de valeur 0 ou 5V) sur 4 entrées du
Configuration d'un port série pour communication arduino [ par misselo76 ]
Bonjour, J'ai un arduino mega 2560, et je l'ai programmé pour qu'il envoie des données sur un port série spécifique en fonction du premier caractère.
Simuler port série RS232 [ par alilou2955 ]
Bonjour. Je voudrais faire des modif/ajouts sur une application C/C++ existante. Celle-ci utilise le port série RS232 (COM1 par exemple) pour recevoir
[c++] Lecture port série [ par pop70 ]
Bonjour, je recherche désespérément un tuto en français sur la lecture des ports série sur Windows en C++. Mon but étant de lire des données provenant
Importer des données du port série vers Excel [ par Nicozo77100 ]
Bonjour,Je souhaite récupérer des données qui arrivent sur le port série du pc et les écrire dans un fichier excel, qqun aurait il des sources permett
Envoyer un caractère de controle en C vers un port série [ par Kurpeus1 ]
Bonjour, Voila je ne suis pas un expert en C, mais j'y travaille ^^Je suis en train de programmer un programme qui communique avec un terminal portabl
Ecriture port série --> Erreur 997 [ par julienbj ]
Bonjour,Je suis en train de développer une petite classe (si on peut appeler ca comme ca en C) pour piloter mes ports séries.Rien de bien compliqué en
Livres en rapport
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|