基于Matlab的UDP通信(浪高仪)实录

这篇具有很好参考价值的文章主要介绍了基于Matlab的UDP通信(浪高仪)实录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

由于最近需要使用一个利用UDP网口进行传输数据的浪高仪,且它需要基于Matlab平台与程序进行数据融合,这里同时接触到一些新的数据编译工作。在这里简单记录一下开发该程序的全过程。


目录

一、UDP协议介绍

二、通讯代码

三、数据编译代码

四、采用网络调试助手辅助验证算法

五、源代码


一、UDP协议介绍

UDP类似于我上文提到的串口RS485的Modbus协议,不像TCP是两者固定的连接,而是使用广播的方式进行通信。

二、通讯代码

fclose(instrfindall);   %先关闭之前可能存在的UDP
ipA = '192.168.0.2';    %这个根据说明书所设定的本地IP地址
portA = 10000;          %这个是所设定的本地主机端口
ipB = '192.168.0.21';   %这个是仪器的远程ip地址(前面三段数字相同,网络即处于同一网段)
portB = 10000;          %这个是所设定的远程主机端口
handles.udpA = udp(ipB,'RemotePort',portB,'LocalPort',portA); %新建一个udp对象
udpA.OutputBufferSize=8192;   %根据传输的数据长度来定
udpA.TimeOut=10;    %超时时间为10ms
udpA.BytesAvailableFcnCount  = 'byte';
udpA.BytesAvailableFcnCount  = 1024;  %触发中断的数据数量
fopen(udpA);   %设备之间网络连接


for i=1:1:10
    fwrite(udpA,(hex2dec(['DA'; '05'; '01'; '02'; '00'; 'E2'])));  %发送指令
    pause(1); %一定的延时(需要把控精确的计算时间的可以采用下面注释的代码)
    if(c.BytesAvailable)    %若满足传输的字节为9个字节
       data1= fread(udpA,9);  %读取9个字节
    end   
end
fclose(udpA);
delete(udpA);

注意:

1.电脑主机IP的更改在网络设置里面更改Internet协议版本4(TCP/IPv4) 属性。

2.这里端口需要统一, 才可以连接

3.写数据和读取数据的方式跟串口通讯是一模一样的。

三、数据编译代码

基于Matlab的UDP通信(浪高仪)实录

根据说明书中的指令,经过NetAssist V5.0.3的试验,其发送指令和相应的响应指令如下:

T:DA 05 01 02 00 E2

R:DC 00 FF 00 81 17 BA 8C 43

由于浪高仪发送回来的是浮点数,且遵循低位在前,高位在后的原则,这里需要这样进行编译。

4个字节的16进制字符可以转换为32bit浮点数。

b = 'BA8C8117';
c = typecast(uint32(hex2dec(b)),'single');

基于Matlab的UDP通信(浪高仪)实录 运行程序可以看到,c=-0.0011

四、采用网络调试助手辅助验证算法

提前先采用网络调试助手来与matlab进行连接,是因为这样可以看到发送和接受的信息,若直接和设备相连无法看到发送过去的是什么内容。同样的,这里由于测试是在一个机器上进行通讯,因此改为只有一个本地的ip地址(即127.0.0.1)。另外这里通讯的时候,两个端口是相反的(且由于在同一个地址内,端口不能相同),这个应该好理解。代码如下:

clc
clear
delete(instrfindall);  %先关闭之前可能存在的UDP
udpA = udp('127.0.0.1','RemotePort',8080,'LocalPort',8086); %这里'127.0.0.1'指的是本地
udpA.OutputBufferSize=8192;   %根据传输的数据长度来定
udpA.TimeOut=10;    %超时时间为10ms
udpA.BytesAvailableFcnMode =  'byte';
udpA.BytesAvailableFcnCount  = 9;  %触发中断的数据数量
fopen(udpA);   %设备之间网络连接


for i=1:1:10
    fwrite(udpA,(hex2dec(['DA'; '05'; '01'; '02'; '00'; 'E2'])));  %发送指令
    pause(1); %一定的延时(需要把控精确的计算时间的可以采用下面注释的代码)
%%              tic  
%%                 for t = 0.001:0.001:0.2  
%%                    while toc < t
%%                     end
%%                 end

    if(udpA.BytesAvailable)    %若满足传输的字节为9个字节
       data1= fread(udpA,9);  %读取9个字节
    end   
end
fclose(udpA);
delete(udpA);

基于Matlab的UDP通信(浪高仪)实录

这代表在正式的仪器连接中,仪器是能够接受到正确的指令。(如果这里只发送前面指令,而不发送附加位,这里可以勾选checksum8)


基于Matlab的UDP通信(浪高仪)实录

可以看到,matlab也成功接受了由网络调试助手发送的DC 00 FF 00 81 17 BA 8C 43指令,并将其解析为实际的数据。即由于matlab中是不显示16进制的,只会以10进制显示所收到的数据。因此这里需要将返回来的数据先变为第三节代码所需要的数据形式,即一个一维的字符串。方法有点笨拙,有改进的请在评论区发给我吧。(注意低字节在前,高字节在后,我之前不小心弄错了顺序,弄成[H3,H4,H1,H2]了,还有注意哪4个字节是数据,这里数据的字节是17 BA 8C 43,转换成浮点数应为281.4538)文章来源地址https://www.toymoban.com/news/detail-454906.html

H=dec2hex(data1(6:9));    %将十进制的double型数据变为十六进制的二维字符串
H1=H(1,:);
H2=H(2,:);
H3=H(3,:);
H4=H(4,:);
data2=[H4,H3,H2,H1];      %拼接成一维的字符串,且低位在前,高位在后 

五、源代码

clc
clear
delete(instrfindall);  %先关闭之前可能存在的UDP
udpA = udp('127.0.0.1','RemotePort',8080,'LocalPort',8086); %这里'127.0.0.1'指的是本地
udpA.OutputBufferSize=8192;   %根据传输的数据长度来定
udpA.TimeOut=10;    %超时时间为10ms
udpA.BytesAvailableFcnMode =  'byte';
udpA.BytesAvailableFcnCount  = 9;  %触发中断的数据数量
fopen(udpA);   %设备之间网络连接
pause(5)

for i=1:1:10
    fwrite(udpA,(hex2dec(['DA'; '05'; '01'; '02'; '00'; 'E2'])));  %发送指令
    pause(1); %一定的延时(需要把控精确的计算时间的可以采用下面注释的代码)
    if(udpA.BytesAvailable)    %若满足传输的字节为9个字节
       data1= fread(udpA,9);  %读取9个字节
    end   
    H=dec2hex(data1(6:9));    %将十进制的double型数据变为十六进制的二维字符串
    H1=H(1,:);
    H2=H(2,:);
    H3=H(3,:);
    H4=H(4,:);
    data2=[H4,H3,H2,H1];      %拼接成一维的字符串   
    data3 = typecast(uint32(hex2dec(data2)),'single');
end
fclose(udpA);
delete(udpA);

到了这里,关于基于Matlab的UDP通信(浪高仪)实录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于python socket实现TCP/UDP通信

    两个应用程序如果需要进行通讯最基本的一个前提就是能够唯一的标示一个进程,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。能够唯一标示网络中的进程后

    2024年02月16日
    浏览(48)
  • 基于UDP/TCP的网络通信编程实现

    红色是心中永不褪色的赤诚 操作系统为网络编程提供了 Socket api , Socket是基于TCP/IP协议的网络通信的基本单元, 基于Socket的网络程序开发就是 网络编程. 由于直接与应用层联系的是传输层, 所以针对应用层协议(TCP, UDP), Shocket提供了三种套接字, 分别是 流套接字(使用TCP) , 数据报

    2024年02月08日
    浏览(51)
  • 【网络原理】使用Java基于UDP实现简单客户端与服务器通信

    我们用Java实现UDP数据报套接字编程,需要借用以下API来实现 网络编程, 本质上是要操作网卡. 但是网卡不方便直接操作. 在操作系统内核中, 使用了一种特殊的叫做 “socket” 这样的文件来抽象表示网卡. 因此进行网络通信, 势必需要先有一个 socket 对象. DatagramSocket 是UDP Socket,

    2024年03月11日
    浏览(58)
  • 【Java网络编程】基于UDP-Socket 实现客户端、服务器通信

    ​ 哈喽,大家好~我是你们的老朋友: 保护小周ღ   本期为大家带来的是网络编程的 UDP Socket 套接字,基于 UDP协议的 Socket 实现客户端服务器通信 ,Socket 套接字可以理解为是,传输层给应用层提供的一组 API,如此程序,确定不来看看嘛~~ 本期收录于博主的专栏 : JavaEE_保

    2024年02月02日
    浏览(63)
  • FPGA基于Tri Mode Ethernet MAC实现UDP通信 提供3套工程源码和技术支持

    目前网上的fpga实现udp基本生态如下: 1:verilog编写的udp收发器,但不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代

    2024年02月16日
    浏览(39)
  • FPGA基于AXI 1G/2.5G Ethernet Subsystem实现千兆UDP通信 提供工程源码和技术支持

    目前网上的fpga实现udp基本生态如下: 1:verilog编写的udp收发器,但不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代

    2024年02月09日
    浏览(38)
  • FPGA基于AXI 1G/2.5G Ethernet Subsystem实现UDP通信DMA传输 提供工程源码和技术支持

    目前网上的fpga实现udp基本生态如下: 1:verilog编写的udp收发器,但不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代

    2024年02月10日
    浏览(40)
  • 通信算法之177: 基于Matlab的OFDM通信系统关键基带算法设计7-流程

    一. 接收算法流程 1.1 粗同步(分组检测) 1.2 载波同步(精细频偏估计) 多普勒频偏和晶振。频率偏差,会破坏子载波间的正交性,且这种频差对相位的影响还具有累加性。                         1.3 精同步(OFDM起始,符号同步) 1.4 信道估计  【见上一篇博客】

    2024年02月15日
    浏览(39)
  • 基于OFDM的水下图像传输通信系统matlab仿真

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 matlab2022a        基于OFDM的水下图像传输通信系统是一种用于在水下环境中传输图像数据的通信系统。它采用了OFDM(Orthogonal Frequency Division Multiplexing)技术,这种技术在水下

    2024年02月10日
    浏览(38)
  • FPGA基于SFP光口实现10G万兆网UDP通信 10G Ethernet Subsystem替代网络PHY芯片 提供工程源码和技术支持

    目前网上的fpga实现udp基本生态如下: 1:verilog编写的udp收发器,但不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代

    2024年02月01日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包