日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

项目:基于以太网通信,单片机作为客户端,接收CAN-Ethernet的十六进制数据

發布時間:2024/7/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 项目:基于以太网通信,单片机作为客户端,接收CAN-Ethernet的十六进制数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、物理連接

二,流程分析

電腦連接CAN分析儀,電腦通過軟件USB-CAN把can十六進制數據發到CAN分析儀。CAN分析儀連接CAN轉以太網設備,數據通過CAN轉以太網設備后,通過網線傳送到單片機。這里面,CAN轉以太網設置為TCP Client模式,以CAN轉以太網設備作為服務端,服務端IP地址為:192.168.0.7,端口號為:20001。單片機作為客戶端,向服務端發起連接請求,接受來自服務端的數據。

三,客戶端程序

#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; }

總結

以上是生活随笔為你收集整理的项目:基于以太网通信,单片机作为客户端,接收CAN-Ethernet的十六进制数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。