FINS/UDP Method

Section 7-3

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

169

Page 193
Image 193
Omron CJ1W-ETN21 operation manual 169