项目:基于以太网通信,单片机作为客户端,接收CAN-Ethernet的十六进制数据
生活随笔
收集整理的這篇文章主要介紹了
项目:基于以太网通信,单片机作为客户端,接收CAN-Ethernet的十六进制数据
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、物理連接
二,流程分析
電腦連接CAN分析儀,電腦通過軟件USB-CAN把can十六進(jìn)制數(shù)據(jù)發(fā)到CAN分析儀。CAN分析儀連接CAN轉(zhuǎn)以太網(wǎng)設(shè)備,數(shù)據(jù)通過CAN轉(zhuǎn)以太網(wǎng)設(shè)備后,通過網(wǎng)線傳送到單片機(jī)。這里面,CAN轉(zhuǎn)以太網(wǎng)設(shè)置為TCP Client模式,以CAN轉(zhuǎn)以太網(wǎng)設(shè)備作為服務(wù)端,服務(wù)端IP地址為:192.168.0.7,端口號(hào)為:20001。單片機(jī)作為客戶端,向服務(wù)端發(fā)起連接請(qǐng)求,接受來自服務(wù)端的數(shù)據(jù)。
三,客戶端程序
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<errno.h> #include<unistd.h> #include<stdlib.h> #include<sys/socket.h> #include<arpa/inet.h> #include<string.h>#define SERV_IP "192.168.0.7" #define SERV_PORT 20001 #define ITEMSIZE 3 #define WIDEIMAGE 500int main() {int cfd,fd;struct sockaddr_in serv_addr;socklen_t serv_addr_len;char readChar[ITEMSIZE],writeChar[1024];int count,j=1;cfd = socket(AF_INET,SOCK_STREAM,0);memset(&serv_addr,0,sizeof(serv_addr)); serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(SERV_PORT);inet_pton(AF_INET,SERV_IP,&serv_addr.sin_addr.s_addr);connect(cfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));fd = open("can2.txt",O_RDONLY|O_WRONLY|O_CREAT);while(1){count = read(cfd,readChar,ITEMSIZE);//write(fd,buf,sizeof(buf));if(count==0){break;}readChar[count]='\0';count = sprintf(writeChar, "%02x%02x%02x ", readChar[0]&0x00FF, readChar[1]&0x00FF, readChar[2]&0x00FF);writeChar[count] = '\0';write(fd, writeChar, count);if(count < ITEMSIZE){break;}if(j++%WIDEIMAGE == 0){write(fd, "\n", 1);}} close(fd);close(cfd);return 0; }總結(jié)
以上是生活随笔為你收集整理的项目:基于以太网通信,单片机作为客户端,接收CAN-Ethernet的十六进制数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式——Template Metho
- 下一篇: 数据结构——图的C语言实现