Автор Тема: Който може да помага!!!  (Прочетена 2171 пъти)

historymaker

  • Напреднали
  • *****
  • Публикации: 24
  • Distribution: Ubuntu 11.04
  • Window Manager: GNOME
    • Профил
Който може да помага!!!
« -: Dec 11, 2011, 22:51 »
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <conio.h>
#define maxBytes 128
using namespace std;
DWORD dwBytesWrite = 128;
DWORD dwBytesRead = 128;
DWORD dwBytesTransferred;
BYTE Byte;

int ComConfigure(int BaudRate, int ByteSize, int Parity, int StopBits)
{
   DCB dcb;
   dcb.BaudRate = BaudRate;  
   dcb.ByteSize = ByteSize;           
   dcb.Parity = Parity;      
   dcb.StopBits = StopBits;
   return TRUE;
}

int main( int argc, char *argv[] )
{

   DCB dcb;
   HANDLE hCom;
   COMMTIMEOUTS timeouts = {0};
   DWORD dwBytesWrite = 0;
   DWORD dwBytesRead = 32;
   char szBuff[maxBytes] = {32};
   BOOL fSuccess;
int i;
   char *pcCommPort = "COM2";
   hCom = CreateFile( pcCommPort,
                    GENERIC_READ | GENERIC_WRITE,
                    0, 

                    NULL,
                    OPEN_EXISTING,
               FILE_FLAG_OVERLAPPED,
                    NULL
                    );

  ComConfigure(300, 7, NOPARITY, ONESTOPBIT);

   if (hCom == INVALID_HANDLE_VALUE)
   {
       printf ("CreateFile failed with error %d.\n", GetLastError());
      scanf("%d" );
       return (1);
   }


  

   fSuccess = GetCommState(hCom, &dcb);

   if (!fSuccess)
   {
      printf ("GetCommState failed with error %d.\n", GetLastError());
   scanf("%d");
      return (2);
   }


   if (!fSuccess)
   {
      printf ("SetCommState failed with error %d.\n", GetLastError());
     scanf ("%d.\n");
      return (3);
   }

   ComConfigure(300, 7, NOPARITY, ONESTOPBIT);

   printf ("Serial port %s successfully reconfigured.\n", pcCommPort);

i = sprintf(szBuff, "/?! \r \n");

            {
            printf("Writing %hX bytes to serial  port.\n", i, szBuff);
         }

ReadFile (hCom, &Byte, 128, &dwBytesRead, NULL);

printf("Response: %hX",ReadFile);
scanf("%d");

   return 0;


}

Срещам трудност при получаването на отговор от устройството към което е изпратен стринга, по принцип се работи по протокол и аз съм изпълнил всичко нужно от протокола в сорса, проблема е в това че получавам различен отговор всеки път при изпращането на ACK стринга /?! CR LF. Ако някой е запознат моля да помогне с каквото може.


@historymaker, дори и кодът да е много четим и разбираем, може все пак да опишеш какво се опитваш да направиш и къде срещаш трудности. Заядливите постове ще бъдат отстранявани, съгласно т. 6 от Правилата, но и цялата тема може да замине за Кошчето, съгласно т. 1 от Правилата и допълнителните препоръки към тях.
bop_bop_mara
« Последна редакция: Dec 13, 2011, 19:05 от historymaker »
Активен

bvbfan

  • Напреднали
  • *****
  • Публикации: 1056
  • Distribution: KaOS
  • Window Manager: Plasma 5
    • Профил
Re: Който може да помага!!!
« Отговор #1 -: Dec 24, 2011, 09:27 »
Цитат
int ComConfigure(int BaudRate, int ByteSize, int Parity, int StopBits)
{
   DCB dcb;
   dcb.BaudRate = BaudRate;   
   dcb.ByteSize = ByteSize;           
   dcb.Parity = Parity;       
   dcb.StopBits = StopBits;
   return TRUE;
}

Що за безсмислена функция е това  ??? Тъпчиш настройки в локална структура, тази функция компилаторът дори не си е направил труда да я обработва, направо я е изхвърлил от изпълнимия файл и там, където я викаш я заменил с еквивалента на TRUE "1".
Код
GeSHi (C):
  1. int ComConfigure(DCB *dcb, int BaudRate, int ByteSize, int Parity, int StopBits)
  2. {
  3.   dcb->BaudRate = BaudRate;  
  4.   dcb->ByteSize = ByteSize;            
  5.   dcb->Parity = Parity;      
  6.   dcb->StopBits = StopBits;
  7.   return TRUE;
  8. }
  9. ...
  10. ComConfigure(&dcb, 300, 7, NOPARITY, ONESTOPBIT);
  11. SetCommState(hCom, &dcb);
  12. ...
« Последна редакция: Dec 24, 2011, 09:29 от bvbfan »
Активен