दिलचस्प पोस्ट
ग्रेड – गैर-शून्य निकास मूल्य क्या है और मैं इसे कैसे ठीक कर सकता हूं? पैगमेम में प्रत्येक एक्स (मिली) सेकेंड्स करो आर लोडिंग फाइल में लूप MVC में मानक डेटाटैबल्स प्रदर्शित करना सेलेनियम 2 वेब ड्राइवर के साथ पूरा करने के लिए एक एजेक्स कॉल की प्रतीक्षा करें npm पैकेज में निर्भरता के द्वारा निजी जीथब रिपॉजिटरी स्थापित करें। json सी में एक समारोह में realloc का उपयोग कैसे करें मैं Google Chrome JavaScript कंसोल में डीबग संदेशों को कैसे प्रिंट करूं? बिना अधिलेखित फ़ाइलों की प्रतिलिपि बनाएँ मैं जावास्क्रिप्ट और XMLHttpRequest का उपयोग कर बाइनरी छवि डेटा कैसे लोड करूं? कैसे Bash में एक समारोह के लिए तर्क के रूप में एक साहचर्य सरणी को पारित करने के लिए? क्या ओपेनिकग और schema.org के लिए एक ही मेटा टैग का उपयोग करना संभव है <msbuild> कार्य या msbuild.exe नॉर्ट के साथ? आर में गतिशील "स्ट्रिंग" क्या HTTP बुनियादी प्रमाणीकरण के लिए मुझे एन्कोडिंग का उपयोग करना चाहिए?

सीरियल कॉम लिस्टफाइल / रीफफाइल

//#include "StdAfx.h" #include <stdio.h> #include <windows.h> #include <winbase.h> #include <iostream> #include <tchar.h> using namespace std; int main() { int com = 'COM2'; string data = "\n 010400 \n"; char output[32]; //unsigned int length = 0; DCB config = {0}; bool abContinue = true; DWORD dwBytesWritten; DWORD dwBytesRead; int isRead = false; HANDLE m_hCommPort = ::CreateFile(L"COM2", GENERIC_READ|GENERIC_WRITE,//access ( read and write) 0, //(share) 0:cannot share the COM port 0, //security (None) OPEN_EXISTING,// creation : open_existing 0, // we dont want overlapped operation 0// no templates file for COM port... ); config.DCBlength = sizeof(config); if((GetCommState(m_hCommPort, &config) == 0)) { printf("Get configuration port has a problem."); return FALSE; } config.BaudRate = 9600; config.StopBits = ONESTOPBIT; config.Parity = PARITY_NONE; config.ByteSize = DATABITS_8; config.fDtrControl = 0; config.fRtsControl = 0; if (!SetCommState(m_hCommPort, &config)) { printf( "Failed to Set Comm State Reason: %d\n",GetLastError()); //return E_FAIL; } printf("Current Settings\n Baud Rate %d\n Parity %d\n Byte Size %d\n Stop Bits %d", config.BaudRate, config.Parity, config.ByteSize, config.StopBits); int isWritten = WriteFile(m_hCommPort, &data,(DWORD) sizeof(data), &dwBytesWritten, NULL); //memset(output, 0, sizeof(output)); while (abContinue) { isRead = ReadFile(m_hCommPort, output, sizeof(output), &dwBytesRead, NULL); if(!isRead) { abContinue = false; break; } } cin.get(); } 

मुझे कॉम पोर्ट से पढ़ने में परेशानी हो रही है अगर मैं कोड के माध्यम से कदम रखता हूं, तो यह "isRead = ReadFile (m_hCommPort, आउटपुट, आकार (आउटपुट), और dwBytesRead, NULL) में जाता है;" और वापस नहीं आते हैं …. यह मेरी पहली कोशिश है, सफलता के साथ नहीं।

Solutions Collecting From Web of "सीरियल कॉम लिस्टफाइल / रीफफाइल"

फ़ाइल खोलने के बाद आप ऐसा कुछ कोड आज़मा सकते हैं, लेकिन इससे पहले कि आप इसका उपयोग करने का प्रयास करें:

 COMMTIMEOUTS timeouts; timeouts.ReadIntervalTimeout = 1; timeouts.ReadTotalTimeoutMultiplier = 1; timeouts.ReadTotalTimeoutConstant = 1; timeouts.WriteTotalTimeoutMultiplier = 1; timeouts.WriteTotalTimeoutConstant = 1; if (!SetCommTimeouts(m_hCommPort, &timeouts)) // setting timeouts failed. 

संपादित करें: शायद कुछ कोड से शुरू करना आसान होता है जो काम करता है, और इसे अपने कोड को काम करने की कोशिश करने के बजाय इसे करना है। यहां एक साधारण टर्मिनल प्रोग्राम है I यह चरम में कम से कम है, लेकिन काम करता है (कम से कम अच्छी तरह से मुझे एक उदाहरण के लिए, मेरे जीपीएस से आउटपुट देखने देता है)। यह किसी भी व्यक्ति से (कम से कम मेरे सभी) परिष्कृत फोन करेगा, लेकिन इसे कम से कम कुछ विचार देना चाहिए कि कैसे आरंभ करना है।

 #include <stdio.h> #include <conio.h> #include <string.h> #define STRICT #define WIN32_LEAN_AND_MEAN #include <windows.h> void system_error(char *name) { // Retrieve, format, and print out a message from the last error. The // `name' that's passed should be in the form of a present tense noun // (phrase) such as "opening file". // char *ptr = NULL; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError(), 0, (char *)&ptr, 1024, NULL); fprintf(stderr, "\nError %s: %s\n", name, ptr); LocalFree(ptr); } int main(int argc, char **argv) { int ch; char buffer[1]; HANDLE file; COMMTIMEOUTS timeouts; DWORD read, written; DCB port; HANDLE keyboard = GetStdHandle(STD_INPUT_HANDLE); HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE); DWORD mode; char port_name[128] = "\\\\.\\COM3"; char init[] = ""; // eg, "ATZ" to completely reset a modem. if ( argc > 2 ) sprintf(port_name, "\\\\.\\COM%c", argv[1][0]); // open the comm port. file = CreateFile(port_name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if ( INVALID_HANDLE_VALUE == file) { system_error("opening file"); return 1; } // get the current DCB, and adjust a few bits to our liking. memset(&port, 0, sizeof(port)); port.DCBlength = sizeof(port); if ( !GetCommState(file, &port)) system_error("getting comm state"); if (!BuildCommDCB("baud=19200 parity=n data=8 stop=1", &port)) system_error("building comm DCB"); if (!SetCommState(file, &port)) system_error("adjusting port settings"); // set short timeouts on the comm port. timeouts.ReadIntervalTimeout = 1; timeouts.ReadTotalTimeoutMultiplier = 1; timeouts.ReadTotalTimeoutConstant = 1; timeouts.WriteTotalTimeoutMultiplier = 1; timeouts.WriteTotalTimeoutConstant = 1; if (!SetCommTimeouts(file, &timeouts)) system_error("setting port time-outs."); // set keyboard to raw reading. if (!GetConsoleMode(keyboard, &mode)) system_error("getting keyboard mode"); mode &= ~ ENABLE_PROCESSED_INPUT; if (!SetConsoleMode(keyboard, mode)) system_error("setting keyboard mode"); if (!EscapeCommFunction(file, CLRDTR)) system_error("clearing DTR"); Sleep(200); if (!EscapeCommFunction(file, SETDTR)) system_error("setting DTR"); if ( !WriteFile(file, init, sizeof(init), &written, NULL)) system_error("writing data to port"); if (written != sizeof(init)) system_error("not all data written to port"); // basic terminal loop: do { // check for data on port and display it on screen. ReadFile(file, buffer, sizeof(buffer), &read, NULL); if ( read ) WriteFile(screen, buffer, read, &written, NULL); // check for keypress, and write any out the port. if ( kbhit() ) { ch = getch(); WriteFile(file, &ch, 1, &written, NULL); } // until user hits ctrl-backspace. } while ( ch != 127); // close up and go home. CloseHandle(keyboard); CloseHandle(file); return 0; } 

ReadFile फ़ंक्शन आपके थ्रेड को अवरुद्ध कर सकता है, यदि ऐसा है, तो यह अवरुद्ध रहेगा जब तक कि कुछ डेटा सीरियल पोर्ट से नहीं पढ़ा जा सके। यहां एक लिंक है, अगर इसकी मदद। सौभाग्य।

यदि आप स्पष्ट रूप से समय समाशोधन नहीं करते हैं, तो ReadFile अनिश्चित काल तक ब्लॉक तक डेटा उपलब्ध हो जाएगा।

टाइमआउट सेट के साथ, मुझे एक readfile पर इस समस्या थी। यह मुझे पटाखे चला रहा था, इसलिए मैंने वेब से कुछ कोड प्राप्त कर लिया जो काम करता था और फिर रेखा से लाइन को बदलने के लिए यह देखने के लिए कि त्रुटि कहां थी।

बाहर निकलता है वह readfile ठीक था मेरी समस्या एक WaitCommEvent था जो लटका हुआ था जब बंदरगाह डिस्कनेक्ट किया गया था क्योंकि कोई कॉम घटना कभी नहीं मिली है …