cpu13.ru - форум OMRON http://cpu13.ru/ |
|
ПОСЫЛКА КОМАНД FIND КОМПЬЮТЕРНОЙ СТАНЦИЕЙ контроллеру http://cpu13.ru/viewtopic.php?f=10&t=569 |
Страница 1 из 1 |
Автор: | E7 [ Чт июн 25, 2009 10:52 ] |
Заголовок сообщения: | ПОСЫЛКА КОМАНД FIND КОМПЬЮТЕРНОЙ СТАНЦИЕЙ контроллеру |
Друзья ! Задача : требуется прочитеать 150 слов из области памяти DM . Программу пишу на Microsoft Visual 2008 C++. Код: case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); if (BN_CLICKED == wmEvent) { wVersionRequested = MAKEWORD( 2, 2 ); Ret_funct = 0; Ret_funct = WSAStartup(wVersionRequested,&wsaData);//&lpWSAData); if ( Ret_funct != 0 ) { DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); } my_sock = 0; my_sock = socket(AF_INET,SOCK_DGRAM,0); if ( my_sock == INVALID_SOCKET ) {DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); } HOSTENT *hst; sockaddr_in FAR dest_addr; u_short _9600_PORT = 9600; #define IP_ETN21 "192.168.1.19" dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(_9600_PORT); dest_addr.sin_addr.S_un.S_addr = inet_addr(IP_ETN21); //const char a1 = 0x80; const char FAR buff[18]={0x80,0x00,0x02,0x00,0x13,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x82,0x00,0x13,0x01,0x00,0x96}; //buff[0] = 0x80; // *ICF* //buff[1] = 0x00; // *RSV* //buff[2] = 0x02; // *GST* //buff[3] = 0x00; // *DNA* //buff[4] = 0x13; // *DA1* //buff[5] = 0x00; // *DA2* //buff[6] = 0x00; // *SNA* //buff[7] = 0x01; // *SA1* //buff[8] = 0x00; // *SA2* //buff[9] = 0x01; // *SID* //buff[10] = 0x01; // *MRC* //buff[11] = 0x01; // *SRC* //buff[12] = 0x82; // Memory DM //buff[13] = 0x00; // Firs arddress for read //buff[14] = 0x13; //buff[15] = 0x01; //buff[16] = 0x00; //buff[17] = 0x96; // 150 bytes for read; if ( sendto(my_sock,buff,sizeof(buff),0,(sockaddr* FAR)&dest_addr,sizeof(dest_addr)) == SOCKET_ERROR){ // ВЫДАТЬ сообщение об ошибке посылки функций. } sockaddr_in FAR server_addr; char FAR rec_buff[2010];;// public;//[315]; public; int length_server_addr = sizeof(server_addr); if (recvfrom(my_sock,(char*)rec_buff,sizeof(rec_buff),0,(sockaddr* FAR)&server_addr,&length_server_addr) == SOCKET_ERROR) { //==314){//== SOCKET_ERROR) { // ВЫДАТЬ сообщение об ошибке чтения } // конец кода. В результате должен иметь в переменной rec_buff массив состоящий из обратного заголовка FINS (10 байт), команды FINS (2 байта),главный код ответа (1 байт) и дополнительный код ответа (1 байт). затем данные (не более 1998 байт). Функции socket, sendto и recvfrom ошибок не выдают.. вроде как всё проходит удачно (причём функция recvfrom возвращает 314 байт при чтении 150 байт области DM. - это я вычислил, точно!). Но в итоге в rec_buff нифига не получаю . В чём я ошибся, помогите пожалуйста с написанием. (номер модуля ETN21 : 1 IP : 192.168.1.19 сеть : 1 ) IP компа-клиента в лвс : 192.168.1.2 |
Автор: | Олег [ Чт июн 25, 2009 12:08 ] |
Заголовок сообщения: | |
а хрен его знает где ошибся. попробуй у французов примеры посмотреть, но там на VB http://www.support-omron.fr/Logiciels.html |
Автор: | E7 [ Чт июн 25, 2009 13:23 ] |
Заголовок сообщения: | |
чёт посмотрел..... тяперече визуал басик надо .... а есть какие нить свои разработки прог в этой сфере ? |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа (Russia: MSK) |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |