
FINS/UDP Method | Section |
32 /* ALLOCATE IP ADDRESS AND PORT # TO SOCKET*/
33bzero((char *) & s_addr,sizeof(ws_addr));
34ws_addr.sin_family = AF_INET;
35ws_addr.sin_addr.s_addr = htonl(INADDR_ANY);
36 ws_addr.sin_port = htons(0); /* GET AVAILABLE PORT FOR LOCAL UDP PORT */
37if (bind(sockfd,(struct sockaddr *)&ws_addr,sizeof(ws_addr)) < 0)
38err_exit("can't bind local address");
39
40/*
41* GENERATE MEMORY AREA READ COMMAND
42* (READ 150 WORDS FROM DM 100)
43*/
44fins_cmnd[0] = 0x80; /* ICF */
45fins_cmnd[1] = 0x00; /* RSV */
46fins_cmnd[2] = 0x02; /* GCT */
47fins_cmnd[3] = 0x00; /* DNA */
48fins_cmnd[4] = 0x64; /* DA1 *//* Ethernet Unit FINS NODE NUMBER*/
49fins_cmnd[5] = 0x00; /* DA2 */
50fins_cmnd[6] = 0x00; /* SNA */
51fins_cmnd[7] = 0x32; /* SA1 *//* WS FINS NODE NUMBER*/
52fins_cmnd[8] = 0x00; /* SA2 */
53fins_cmnd[9] = ++sid; /* SID */
54fins_cmnd[10] = 0x01; /* MRC */
55fins_cmnd[11] = 0x01; /* SRC */
56fins_cmnd[12] = 0x82; /* VARIABLE TYPE: DM*/
57fins_cmnd[13] = 0x00; /* READ START ADDRESS: DM 100*/
58fins_cmnd[14] = 0x64;
59fins_cmnd[15] = 0x00;
60fins_cmnd[16] = 0x00; /* WORDS READ: 150*/
61fins_cmnd[17] = 0x96;
62
63/* SEND FINS COMMAND*/
64bzero((char *) &cs_addr,sizeof(cs_addr));
65cs_addr.sin_family = AF_INET;
66cs_addr.sin_addr.s_addr = inet_addr(SERV_IP_ADDR);
67cs_addr.sin_port = htons(FINS_UDP_PORT);
68
69signal(SIGALRM,recv_fail);
71CMND_SEND:
72sendlen = 18;
74if (sendto(sockfd,fins_cmnd,sendlen,0,&cs_addr,sizeof(cs_addr)) == sendlen)
75{
76 | alarm(RESP_TIMEOUT); /* START RESPONSE MONITOR TIMER*/ |
77printf("send length %d¥n",sendlen);
78}
79else
80{
81err_exit("send error");
82}
83
84