基于TCP/IP的Matlab Modbus与M340 PLC通讯
来源:互联网 发布:php记事本 编辑:程序博客网 时间:2024/05/16 09:15
本人原创,代码拿出来供大家交流学习经验,勿作他用。
废话不多说,代码直接上。
1.创建链接
function link = connect_create(client_addr,port)%*****************************************************% 创建与PLC的链接% client_addr PLC地址% port 端口号,默认为502% 例:% client_addr = 10.64.15.101 //M340地址% port = 502 //modbus方式默认端口号% 调用方法为:t = connect_create('10.64.15.101',502)%*****************************************************port = 502;% link = tcpip('127.0.0.1',502);% link = tcpip('10.64.15.101',502);link = tcpip(client_addr,port);%设置缓冲区set(link, 'InputBufferSize', 30000); %打开链接fopen(link);
2.读寄存器(只写了读一位寄存器的函数,其他的依葫芦画瓢了......)
function date = read_reg_one(link,date_addr,date_num)%*****************************************************% 读取PLC寄存器的数据(一位)% link 之前调用connect_create函数创建的链接% date_addr 请求数据起始地址 date_addr_high date_addr_low% date_num 请求数据长度 date_num_high date_num_low% 例子:% link = connect_create('10.64.15.101',502)% date_addr = 30% date_num = 1 //默认只读一位寄存器的值% read_reg_one(link,30,1)%*****************************************************date_num = 1;%处理数据%数据地址减一date_addr = date_addr -1;%数据地址分解为2个字节的16进制数date_addr_high = floor(date_addr/100);date_addr_low = mod(date_addr,100);%数据量分解为2个字节的16进制数date_num_high = floor(date_num/100);date_num_low = mod(date_num,100);%发送命令fwrite(link,0,'char') %事务元标识符 0x00fwrite(link,0,'char') % 0x00fwrite(link,0,'char') %协议标识符 0x00fwrite(link,0,'char') % 0x00fwrite(link,0,'char') %后续字节长度 0x00fwrite(link,6,'char') % 0x06fwrite(link,255,'char') %单元标识符 0xfffwrite(link,3,'uint8') %命令字 0x03fwrite(link,date_addr_high,'uint8') %数据起始地址highfwrite(link,date_addr_low,'uint8') %数据起始地址lowfwrite(link,date_num_high,'uint8') %数据长度highfwrite(link,date_num_low,'uint8') %数据长度low%发送示例 00 00 00 00 00 06 FF 03 00 1D 00 02 %返回数据 00 00 00 00 00 07 FF 03 04 00 00 00 00 %返回数据的长度在返回信息的第9个字节%分3次读取%第一次读六个,得到后续信息的长度%第二次读后续3个字节,从第九个字节处,得到返回数据的长度%第三次只读取后面的数据out = fread(link,6,'char'); %第一次msg_back_num = out(6);out = fread(link,3,'char'); %第二次date_back_num = out(3);out = fread(link,date_back_num,'char'); %第三次%显示一下数据%disp(int2str(out))date = out(1) * 100 + out(2);
3.关闭链接
function connect_close(link)%*****************************************************% 关闭链接% 例:% t=connect_create('10.64.15.101',502)% connect_close(t)%*****************************************************fclose(link)delete(link)clear link
4.测试程序
%测试例程%将被调用函数的m文件,放到调用函数的文件夹下,即可%画图测试,时间不是很理想,稍长,待改进t=connect_create('10.64.15.101',502)for i = 1:1:100 dat = read_reg_one(t,30,1)endplot(dat)connect_close(t)
- 基于TCP/IP的Matlab Modbus与M340 PLC通讯
- 基于Modbus协议实现单片机与PLC之间的通讯
- 基于Modbus TCP-IP协议的WEINVIEW HMI与PC通讯
- PLC的TCP/IP通讯与Windows系统的比较
- MODBUS通讯----PLC S7-200 与变频器的通讯
- 基于tcp/ip协议的ModBus
- C#使用TCP/IP与ModBus进行通讯
- C#使用TCP/IP与ModBus进行通讯
- C#使用TCP/IP与ModBus进行通讯
- C#使用TCP/IP与ModBus进行通讯
- C#使用TCP/IP与ModBus进行通讯
- C#使用TCP/IP与ModBus进行通讯
- 基于STM32和W5500的Modbus TCP通讯
- VB与S7-200PLC通过Modbus-Rtu通讯
- VC2010基于TCP/IP的Modbus传输实现
- VC2010基于TCP/IP的Modbus传输实现
- 基于多线程技术的PLC与PC的通讯方式
- S7 PLC与 上位机之间可以采用TCP/IP,Socket通讯吗?
- 魔方阵算法及C语言实现
- STL
- C++ 局部对象
- mtk boot.img打包解包
- Linux嵌入式 -- 内核简介(x86)
- 基于TCP/IP的Matlab Modbus与M340 PLC通讯
- hdu_1213 How Many Tables
- Maya: 菜单Create > NURBS Primitives > Sphere
- 产品模块--报表组的使用
- hdu 1022 Train Problem I
- jsp页面的onclick事件
- 定点仿真:仿真方案未必就真
- 亚太版、欧版、港版、国行的区别
- HDU1874 畅通工程续 解题报告--Dijkstra