首页 > 其他分享 >Matlab构建上位机:TCP/IP测试

Matlab构建上位机:TCP/IP测试

时间:2024-03-31 15:44:44浏览次数:23  
标签:Set IP image ConfigPacket TCP Length Matlab 170

版本更新:

Matlab代码经历过更新,其中Buffer这类属性都不再被支持使用。

Which is the Buffer Size of a TCP/IP socket (tcpclient)? - MATLAB Answers - MATLAB Central (mathworks.cn)

作为取代的新代码参考:

Transition Your Code to tcpclient Interface - MATLAB & Simulink - MathWorks 中国

更多细节参考下面这个之前的笔记。

之前写的博客:

Matlab作为上位机TCP/IP发送视频给FPGA_matlab网络链接-CSDN博客

代码描述:

PC作为客户端,FPGA作为服务端

Matlab安装约定好的帧头对配置包和数据包进行打包,使用TCP/IP进行发送。

代码内容:

clc;
clear all; 
close all; 
warning off;

% ConfigPacket Frame Packet
ConfigPacket_Length = 14;% 配置包单帧长
ConfigPacket_Content = zeros(1,ConfigPacket_Length,"uint8");% 配置包单帧内容初始化

image_w = 640;
image_h = 512;

Set_ConfigPacket_Content = [0,image_w,image_h,0];% 配置包内容数组
Set_ConfigPacket_Length = length(Set_ConfigPacket_Content);% 配置包总帧长

Readback_ConfigPacket = zeros(Set_ConfigPacket_Length, ConfigPacket_Length, "uint8");

% Data Frame Packet
framehead = uint8([170,170,170,170,170,170,170,170]);% 配置包单帧内容初始化
Data_Line_Buf = zeros(1, image_w * 2,"uint8");


% Set Connection 
Client_1 = tcpclient("192.168.1.10",10000,"Timeout",20,"ConnectTimeout",30);

for j = 1:Set_ConfigPacket_Length 
    for i = 1:ConfigPacket_Length 
        if i <= 8
            ConfigPacket_Content (i) = 85;% Frame Header
        elseif i == 9
            ConfigPacket_Content (i) = j - 1;% addr
        elseif i == 10
            ConfigPacket_Content (i) = 0;% R/W
        elseif i == 11
            ConfigPacket_Content (i) = uint8(bitand((bitshift(Set_ConfigPacket_Content(j),-24)),255));
        elseif i == 12
            ConfigPacket_Content (i) = uint8(bitand((bitshift(Set_ConfigPacket_Content(j),-16)),255));
        elseif i == 13
            ConfigPacket_Content (i) = uint8(bitand((bitshift(Set_ConfigPacket_Content(j),-8)),255));
        elseif i == 14
            ConfigPacket_Content (i) = uint8(bitand((bitshift(Set_ConfigPacket_Content(j),0)),255));
        end
    end  
    % s is a tcp/ip object
    write(Client_1,ConfigPacket_Content)
    pause(0.0001)
    Readback_ConfigPacket(j, 1:end) = read(Client_1, ConfigPacket_Length, "uint8");
end

clear Client_1;

pause(0.0001);
write(Client_1,framehead);
pause(0.0001);
for n = 1:image_h
    for m = 1:image_w
        Data_Line_Buf(2 * m -1) = 0;
        if n < image_h/4
            Data_Line_Buf(2 * m) = 64;
        elseif n < image_h/2
            Data_Line_Buf(2 * m) = 128;
        elseif n < image_h/2 + image_h/4
            Data_Line_Buf(2 * m) = 192;
        else
            Data_Line_Buf(2 * m) = 255;
        end
    end
    write(Client_1,Data_Line_Buf)
    pause(0.000001);
end
readreq = read(Client_1, 8, "uint8");

pause(0.0001);
write(Client_1,framehead);
pause(0.0001);
for n = 1:image_h
    for m = 1:image_w
        Data_Line_Buf(2 * m -1) = 255;
        if n < image_h/4
            Data_Line_Buf(2 * m) = 192;
        elseif n < image_h/2
            Data_Line_Buf(2 * m) = 128;
        elseif n < image_h/2 + image_h/4
            Data_Line_Buf(2 * m) = 64;
        else
            Data_Line_Buf(2 * m) = 0;
        end
    end
    write(Client_1,Data_Line_Buf)
    pause(0.000001);
end
readreq = read(Client_1, 8, "uint8");

pause(0.0001);
write(Client_1,framehead);
pause(0.0001);
for n = 1:image_h
    for m = 1:image_w
        Data_Line_Buf(2 * m -1) = 0;
        if n < image_h/4
            Data_Line_Buf(2 * m) = 64;
        elseif n < image_h/2
            Data_Line_Buf(2 * m) = 128;
        elseif n < image_h/2 + image_h/4
            Data_Line_Buf(2 * m) = 192;
        else
            Data_Line_Buf(2 * m) = 255;
        end
    end
    write(Client_1,Data_Line_Buf)
    pause(0.000001);
end
readreq = read(Client_1, 8, "uint8");

pause(0.0001);
write(Client_1,framehead);
pause(0.0001);
for n = 1:image_h
    for m = 1:image_w
        Data_Line_Buf(2 * m -1) = 255;
        if n < image_h/4
            Data_Line_Buf(2 * m) = 192;
        elseif n < image_h/2
            Data_Line_Buf(2 * m) = 128;
        elseif n < image_h/2 + image_h/4
            Data_Line_Buf(2 * m) = 64;
        else
            Data_Line_Buf(2 * m) = 0;
        end
    end
    write(Client_1,Data_Line_Buf)
    pause(0.000001);
end
readreq = read(Client_1, 8, "uint8");
clear Client_1;
View Code

 

标签:Set,IP,image,ConfigPacket,TCP,Length,Matlab,170
From: https://www.cnblogs.com/VerweileDoch/p/18106804

相关文章

  • 清理 Conda 缓存和 Pip 缓存
    清理Conda缓存:查看Conda缓存的使用情况:condaclean--dry-run--all删除不再使用的包和缓存:condaclean--all清理Pip缓存在使用pip安装Python库时,如果之前已经下载过该库,pip会默认使用缓存来安装库,而不是重新从网络上下载。缓存文件通常存储在用户目录下的缓......
  • 最好用的截图工具丨Snipaste 截图 + 贴图
    今天我要向大家推荐一款功能强大、操作简便的截图工具——Snipaste。无论你是编程人员、设计师还是普通用户,Snipaste都能为你带来前所未有的截图体验,吊打QQ、微信截图!软件介绍Snipaste是一个简单但强大的截图工具,也可以让你将截图贴回到屏幕上!下载并打开Snipaste,按下......
  • 【研发日记】Matlab/Simulink开箱报告(十一)——Requirements Toolbox
    目录前言RequirementsToolbox编写需求需求联接设计需求跟踪开发进度追溯性矩阵分析和应用总结前言        见《开箱报告,SimulinkToolbox库模块使用指南(六)——S-Fuction模块(TLC)》        见《开箱报告,SimulinkToolbox库模块使用指南(七)——S-Fu......
  • 【洛谷P1036】 [NOIP2002 普及组] 选数
    一、题目:二、解题思路:本文章采用的解决方法是递归与DFS(深度优先搜索)。以下图是思路图:1.首先-确定位置题目说4个数字取三个数,所以考虑的只有三个位置和这三个位置分别放什么数值。从第一个位置开始放数。2.其次-开始放数分为4种可能,第一位置可以先放3,那么第二个位置......
  • JavaScript高级 —— 学习(二)
    目录一、深入对象(一)创建对象三种方式1.利用对象字面量创建2.利用newObject()创建3.利用构造函数创建(二)利用构造函数创建对象1.构造函数介绍2.约定3.实例化执行过程(三)实例成员&静态成员1.实例成员说明:2.静态成员说明:(四)内置构造函数1.包装类型:String:lengt......
  • C# NamePipe 进程间通信
    应答式进程间通信全体应答式是指服务端开启管道连接并等待连接,客户端写入请求,服务端读取请求,处理后写入应答,客户端读取应答。最后关闭管道。通信数据为XML形式,写入管道前将对象XML序列化,读取时XML反序列化得到对象。使用XML的原因为.net版本较低,不使用第三方库则不支持JSON,不......
  • Matlab与数学计算
    原文地址:Matlab与数学计算-Pleasure的博客下面是正文内容:前言这是一篇笔记。主要用于介绍MatLab的作用以及其作为数学工具的使用方法。目的是总结学校课件复习自用,但是不可能像相关的书籍那么系统全面,力求简单明了。都是一些最基础的用法,更近一层的深入需要特定的环境......
  • 在项目中 .npmrc 文件写入 @lands:registry=http://{ip}:4873/ 作用是什么
    在项目中的.npmrc文件中写入一行配置如下:@lands:registry=http://{ip}:4873/这一行配置的作用是为特定的npm包前缀@lands设置了一个自定义的注册表(registry)地址。具体解释如下:包前缀(Scope):@lands是一个npm包的命名空间前缀,通常用于组织内部或团队私有的npm包。带......
  • m基于深度学习的64QAM调制解调系统频偏估计和补偿算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:  算法涉及理论知识概要   2.2基于深度学习的频偏估计和补偿算法       基于深度学习的频偏估计和补偿算法利用深度神经网络来建立接收信号与频偏之间的非线性映射关系,通过训练网络模型来实现频偏的估计和补......
  • DataGrip的安装和破解
    DataGrip的安装和破解安装包获取方式:关注公众号爬虫探索者,发送datagrip即可领取。解压安装包下一步确定安装路径配置安装项菜单目录默认即可安装结束破解教程可以参考:pycharm破解安装......