当前位置: 首页 > news >正文

聊城网站建设代理商ui设计师证书

聊城网站建设代理商,ui设计师证书,外贸采购平台推荐,关于加强网站建设工作的意见一、Modbus TCP通信概述 MODBUS/TCP是简单的、中立厂商的用于管理和控制自动化设备的MODBUS系列通讯协议的派生产品#xff0c;显而易见#xff0c;它覆盖了使用TCP/IP协议的“Intranet”和“Internet”环境中MODBUS报文的用途。协议的最通用用途是为诸如PLC#xff0c;I/…一、Modbus TCP通信概述  MODBUS/TCP是简单的、中立厂商的用于管理和控制自动化设备的MODBUS系列通讯协议的派生产品显而易见它覆盖了使用TCP/IP协议的“Intranet”和“Internet”环境中MODBUS报文的用途。协议的最通用用途是为诸如PLCI/O模块以及连接其它简单域总线或I/O模块的网关服务的。 Modbus TCP协议是在RTU协议前面添加MBAP报文头由于TCP是基于可靠连接的服务RTU协议中的CRC校验码就不再需要所以在Modbus TCP协议中是没有CRC校验码。(使用上的主要区别)。MBAP报文头 识( 2字节 ) 长度( 2字节 ) 单元标识符(1字节 ) 目前Modbus TCP/IP协议主要应用领域Internet或Intranet中而以太网传输距离远、传输速度快使得应用范围广泛传输距离远、传输速度快使得应用范围广泛。 二. Modbus TCP使用的功能代码 modbus的操作对象有四种线圈、离散输入、输入寄存器、保持寄存器 线圈PLC的输出位开关量在MODBUS中可读可写 离散量PLC的输入位开关量在MODBUS中只读 输入寄存器PLC中只能从模拟量输入端改变的寄存器在MODBUS中只读 保持寄存器PLC中用于输出模拟量信号的寄存器在MODBUS中可读可写 根据对象的不同modbus的功能码有 0x01读线圈 0x02读离散量输入 0x03读保持寄存器 0x04读输入寄存器 0x05写单个线圈 0x06写单个保持寄存器 0x10写多个保持寄存器 0x0F写多个线圈 三、nmodbus4指南 NModbus4是一个基于C#的Modbus协议库可用于与Modbus RTU、ASCII、TCP和UDP设备进行通信。NModbus4中文版相当于对原版进行了翻译使得不懂英文的人能够更方便地使用这个开源库进行编程。NModbus4是用C#编写的Modbus通信协议库它支持的Modbus协议包括Modbus RTU、ASCII、TCP和UDP可用于编程读写Modbus设备的寄存器和线圈。它完全符合Modbus协议规范同时通过使用的事件调用机制能够实现断线重连的功能。 NModbus4是一个完全开源的库可以在GitHub上免费下载和使用 四、Modbus TCP通讯应用举例  4.1搭建西门子博途V15的环境 搭建西门子仿真环境需要先前掌握这些看本人这些博客 windows10企业版安装西门子博途V15---01准备环境 windows10企业版安装西门子博途V15---02安装软件 windows10企业版安装西门子博途V15---03安装仿真软件 windows10企业版安装西门子博途V15---04连接测试   4.2熟悉modbusTCP环境 需要先前掌握这些看本人这些博客 4.3创建PLC仿真环境 4.4 博途V15创建项目 本文最后会提供这个项目只要打开即可 4.5创建数据块变量 4.6创建tcp连接数据块 4.7创建modbustcp通信模块 请注意这里为什么是BYTE 20是因为变量mf1到mf5共10寄存器每个寄存器占2个字节所以是20个字节编译完成后下载到Plc中 4.8创建监控表 以上8个步骤就完成了modbustcp服务器接下来搞程序来读写Plc中的浮点数 4.9创建winform项目 打开VS2019创建窗体项目布局很简单4个button按钮 4.10添加nmodbus4库 4.11编写“nmodbus4读取一个float”代码 /// summary/// nmodbus4读取一个float/// /summary/// param namesender/param/// param namee/paramprivate void button4_Click(object sender, EventArgs e){//nmodbus4读取到的数据都是ushort类型tcpClient new TcpClient();tcpClient.Connect(192.168.1.199, 6800);//连接到主机master ModbusIpMaster.CreateIp(tcpClient);//Ip 主站 byte slaveAddr byte.Parse(1);//从站地址//ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints);表示读保持寄存器//slaveAddress从站地址默认为1通常也是1//startAddress寄存器开始地址这个地址是modbus的地址不是Plc变量地址//numberOfPoints寄存器数量real类型占2个寄存器数量ushort[] uDatas master.ReadHoldingRegisters(slaveAddr, ushort.Parse(0), ushort.Parse(2));byte[] t ByteArrayLib.GetByteArrayFromUShortArray(uDatas);//ushort数组转byte数组float[] floats FloatLib.GetFloatArrayFromByteArray(t);//byte数组转float数组string fw1a string.Join(,, floats);float fw1b FloatLib.GetFloatFromByteArray(t, 0);//byte数组转floatMessageBox.Show(方式a fw1a.ToString() 方式b fw1b.ToString());uDatas master.ReadHoldingRegisters(slaveAddr, ushort.Parse(2), ushort.Parse(2));t ByteArrayLib.GetByteArrayFromUShortArray(uDatas);floats FloatLib.GetFloatArrayFromByteArray(t);fw1a string.Join(,, floats);fw1b FloatLib.GetFloatFromByteArray(t, 0);MessageBox.Show(方式a fw1a.ToString() 方式b fw1b.ToString());uDatas master.ReadHoldingRegisters(slaveAddr, ushort.Parse(4), ushort.Parse(2));t ByteArrayLib.GetByteArrayFromUShortArray(uDatas);floats FloatLib.GetFloatArrayFromByteArray(t);fw1a string.Join(,, floats);fw1b FloatLib.GetFloatFromByteArray(t, 0);MessageBox.Show(方式a fw1a.ToString() 方式b fw1b.ToString());uDatas master.ReadHoldingRegisters(slaveAddr, ushort.Parse(6), ushort.Parse(2));t ByteArrayLib.GetByteArrayFromUShortArray(uDatas);floats FloatLib.GetFloatArrayFromByteArray(t);fw1a string.Join(,, floats);fw1b FloatLib.GetFloatFromByteArray(t, 0);MessageBox.Show(方式a fw1a.ToString() 方式b fw1b.ToString());uDatas master.ReadHoldingRegisters(slaveAddr, ushort.Parse(8), ushort.Parse(2));t ByteArrayLib.GetByteArrayFromUShortArray(uDatas);floats FloatLib.GetFloatArrayFromByteArray(t);fw1a string.Join(,, floats);fw1b FloatLib.GetFloatFromByteArray(t, 0);MessageBox.Show(方式a fw1a.ToString() 方式b fw1b.ToString());master.Dispose();tcpClient.Dispose();} 运行效果 全部读取到了PLC中的数据 nmodbus4读取到的数据都是ushort类型 ushort[] ReadHoldingRegisters(byte slaveAddress, ushort startAddress, ushort numberOfPoints);表示读保持寄存器             slaveAddress从站地址默认为1通常也是1             startAddress寄存器开始地址这个地址是modbus的地址不是Plc变量地址             numberOfPoints寄存器数量real类型占2个寄存器数量 ushort[] uDatas master.ReadHoldingRegisters(slaveAddr, ushort.Parse(0), ushort.Parse(2)); 这个意思是读取从站地址1中的从0开始的2个寄存器数据即%DB4.DBD0中的数据结果是1.1 很多人搞不清楚这个为何是开始地址0数量是2这就需要明白PLC中的地址与MODBUS地址的关系另外nmodbus4读取到的数据都是ushort类型因此需要进行类型转换将ushort数组转byte数组再将byte数组转float数组 4.12编写“nmodbus4读取全部float”代码 /// summary/// nmodbus4读取全部/// /summary/// param namesender/param/// param namee/paramprivate void button5_Click(object sender, EventArgs e){tcpClient new TcpClient();tcpClient.Connect(192.168.1.188, 6800);//连接到主机master ModbusIpMaster.CreateIp(tcpClient);//Ip 主站 byte slaveAddr byte.Parse(1);ushort[] uDatas master.ReadHoldingRegisters(slaveAddr, ushort.Parse(5), ushort.Parse(10));byte[] t ByteArrayLib.GetByteArrayFromUShortArray(uDatas);float[] floats FloatLib.GetFloatArrayFromByteArray(t);string fw1a string.Join(,, floats);MessageBox.Show(fw1a.ToString());master.Dispose();tcpClient.Dispose();} 运行效果 4.13编写“nmodbus4写入单个浮点”代码 /// summary/// nmodbus4写入单个浮点/// /summary/// param namesender/param/// param namee/paramprivate void button7_Click(object sender, EventArgs e){tcpClient new TcpClient();tcpClient.Connect(192.168.1.199, 6800);//连接到主机master ModbusIpMaster.CreateIp(tcpClient);//Ip 主站 //从站地址byte slaveAddr byte.Parse(1);开始地址ushort startAddr ushort.Parse(0);数据的值string vals (12.625);float[] uVals02 vals.Split(,).Select(s float.Parse(s)).ToArray();byte[] y ByteArrayLib.GetByteArrayFromFloatArray(uVals02);ushort[] ushorts UShortLib.GetUShortArrayFromByteArray(y);//void WriteMultipleRegisters(byte slaveAddress, ushort startAddress, ushort[] data);//写入多保持寄存器意思是指向多个寄存器地址写入数据也就是指同时向多个寄存器写入数据//slaveAddress表示从站地址通常为1默认也为1//startAddress表示寄存器开始地址必须是ushort类型//data表示写入的具体数值必须是ushort数组master.WriteMultipleRegisters(slaveAddr, startAddr, ushorts);//向第一个寄存器地址是0写入数据12.625MessageBox.Show(【 通过多保持寄存器】写入正数成功!);float floatValue 12.625f;startAddr ushort.Parse(2);byte[] byteArray ByteArrayLib.GetByteArrayFromFloat(floatValue);//将字节数组中第0个开始的2个字节转换成ushort类型即01ushort ua UShortLib.GetUShortFromByteArray(byteArray, 0, DataFormat.ABCD);master.WriteSingleRegister(slaveAddr, startAddr, ua);//向从站地址1中的第3个寄存器地址为2写入数据ua//将字节数组中第2个开始的2个字节转换成ushort类型即23 ushort ub UShortLib.GetUShortFromByteArray(byteArray, 2, DataFormat.ABCD);startAddr ushort.Parse(3);master.WriteSingleRegister(slaveAddr, startAddr, ub);//向从站地址1中的第4个寄存器地址为3写入数据ubMessageBox.Show(【 通过单保持寄存器】写入正数成功!); vals (-18.326);startAddr ushort.Parse(8);uVals02 vals.Split(,).Select(s float.Parse(s)).ToArray();y ByteArrayLib.GetByteArrayFromFloatArray(uVals02);ushorts UShortLib.GetUShortArrayFromByteArray(y);master.WriteMultipleRegisters(slaveAddr, startAddr, ushorts);MessageBox.Show(【 通过多保持寄存器】写入负数成功!);master.Dispose();tcpClient.Dispose();} 运行效果 4.14编写“nmodbus4写入多个浮点代码 /// summary/// nmodbus4写入多个浮点/// /summary/// param namesender/param/// param namee/paramprivate void button6_Click(object sender, EventArgs e){tcpClient new TcpClient();tcpClient.Connect(192.168.1.199, 6800);//连接到主机master ModbusIpMaster.CreateIp(tcpClient);//Ip 主站 //从站地址byte slaveAddr byte.Parse(1);//开始地址ushort startAddr ushort.Parse(0);//数据的值string vals (4.9635,6.9635,-1.28,67,-902);float[] uVals02 vals.Split(,).Select(s float.Parse(s)).ToArray();byte[] y ByteArrayLib.GetByteArrayFromFloatArray(uVals02);ushort[] ushorts UShortLib.GetUShortArrayFromByteArray(y);master.WriteMultipleRegisters(slaveAddr, startAddr, ushorts);MessageBox.Show(【 多保持寄存器】写入成功!);master.Dispose();tcpClient.Dispose();} 运行效果 浮点数包括整数小数也包括正数或负数所以正整数负整数正小数负小数都可以写入 五modbustcp协议小结 MODBUS TCP 结合了以太网物理网络和网络标准 TCP/IP 以及以 MODBUS 作为应用协议标准的数据表示方法。MODBUS TCP 通信报文被封装于以太网 TCP/IP 数据包中MODBUS 协议规范一帧数据的最大长度为 256 个字节。 MODBUS TCP/IP 的通信系统中有两种类型的设备MODBUS TCP/IP 客户端和服务器设备。 1.MODBUS 客户端 客户端TCP Client主动向服务器TCP Server发起连接请求连接建立成功仅允许客户端主动发起通讯请求。 以太网机型作为 MODBUS TCP 客户端时通过 S_OPEN 指令建立 TCP 连接通过 M_TCP 指令发起 MODBUS 请求。 2.MODBUS 服务器 服务器主动监听 502 端口等待客户端连接请求连接建立成功响应符合 Modbus TCP 协议规范的数据通讯请求。 3.优势  优势 免费、简单、容易使用Modbus协议是现在国内工业领域应用最多的协议不只PLC设备各种终端设备比如水控机、水表、电表、工业秤、各种采集设备 4.特点 采用主从问答方式进行通信 Modbus TCP是应用层协议基于传输层TCP协议实现 Modbus TCP端口号默认为502但在本案例中修改成6800当然你也可以改成别的 六代码下载 链接https://pan.baidu.com/s/1mARLDATOBphLKbecj4sW8g  提取码lggv
http://www.dnsts.com.cn/news/114747.html

相关文章:

  • 建设快照网站现在建网站软件
  • 建站公司人员配置江苏建设监理协会网站
  • 那个网站教做仙芋鲜怎样做推广更有效
  • 柳州团购汽车网站建设做一个企业的网站怎么做的
  • 建筑行业数据共享平台网站自己做网站可以赚钱吗
  • 网站建设费怎么做会计分录关于电商网站建设与管理的书籍
  • 天津网站建设公司最好深圳市设计网站
  • 做网站是不是需要服务器免费商标图案 创意
  • 石狮住房和城乡建设网站蛋糕店网站模板
  • 特色的佛山网站建设wordpress插件点不开
  • 兰州微网站知名企业网站搭建新感觉全网价值营销服务商
  • 网站建设费用 多少html网站支付链接怎么做的
  • 做茶叶网站的目的和规划长春网站制作方案定制
  • 保定网页模板建站崂山区建设局网站
  • 网上购物网站开发英文文献网络营销方法有哪几种
  • 网站pc和手机端分离怎么做小程序制作要求
  • 常州市建设工程交易网网站seo优化很好徐州百都网络点赞
  • wap网站发布百度推广售后电话
  • 韩国ps教程网站湛江仿站定制模板建站
  • 网站权重降低仓库盘点网站开发
  • 官方网站怎么备案想要黑掉一个网站 要怎么做
  • 足球网站模板网站设置文件夹权限
  • 目前网页设计工资多少宁德seo推广
  • 武平县网站建设建文帝网站建设
  • 淘宝关键词排名查询网站门户网站系统建设项目投标书
  • 无锡做网站6可拖拽式网站建设
  • 网站建设商城制作搜索引擎优化涉及的内容
  • wordpress调用菜单代码河南seo推广
  • ppt网站学做网站能赚钱吗
  • 黄浦网站设计网站设计美工多少