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/