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

复制网站文章注意事项竞价培训班

复制网站文章注意事项,竞价培训班,怎样做自己的个人网站,佛山高端网站建设Part1前言 Modbus是一种通信协议,用于在工业自动化领域中的电子设备之间进行通信。它最初是由Modicon在1979年创建的,现在已经成为一种工业标准,被广泛应用于工业控制系统、PLC(可编程逻辑控制器)和其他自动化设备。Mo…

Part1前言

Modbus是一种通信协议,用于在工业自动化领域中的电子设备之间进行通信。它最初是由Modicon在1979年创建的,现在已经成为一种工业标准,被广泛应用于工业控制系统、PLC(可编程逻辑控制器)和其他自动化设备。
Modbus协议主要分为三种模式:Modbus RTU、Modbus ASCII和Modbus TCP。其中,Modbus RTU是一种串行通信模式,基于二进制通信,是应用最广泛的模式之一。在RTU协议中,设备分为两种工作模式:RTU Slave Mode和RTU Master Mode。
在RTU Slave Mode下,设备被动地等待RTU Master的请求,并响应请求中包含的命令。在该模式下,设备的主要任务是接收RTU Master发送的命令、执行这些命令,并将执行结果发送回RTU Master。在RTU Slave Mode下,设备通常会被编址,以便RTU Master可以识别它们。在命令请求中,RTU Master会指定要与哪个被编址的设备通信,并提供要执行的命令和参数。设备接收到请求后,会根据请求中提供的地址和命令执行相应的操作,并将执行结果返回给RTU Master。
在RTU Master Mode下,设备主动向RTU Slave发送命令,并等待响应。在该模式下,设备的主要任务是发送命令、接收响应,并解析响应中包含的数据。
在RTU Master Mode下,设备通常不需要编址,因为它主动发起通信。设备向RTU Slave发送命令时,会包含要执行的命令和参数,以及RTU Slave的地址。RTU Slave接收到请求后,会执行相应的操作,并将执行结果发送回RTU Master。设备接收到响应后,会解析响应中包含的数据,并根据需要进行后续处理。

d9741e2ae575b80cfef66defe1f3062a.png

Part2Modbus Rtu介绍

Modbus Rtu通常由帧起始符、地址码、功能码、数据域、校验码、帧结束符组成。帧起始符和帧结束符在示例数据帧中没有显示,通常由通信设备硬件电路自动添加。
帧起始符:Modbus RTU协议帧的起始符为一个11位长的标志位(3.5个字符),用于同步传输的时钟。
地址码:地址码表示Modbus RTU设备的从站地址或广播地址,用于指定数据帧所要访问的设备或广播数据。
功能码:功能码用于定义数据帧所要进行的操作类型,包括读取线圈状态、读取离散输入状态、读取保持寄存器、读取输入寄存器、写单个线圈、写单个保持寄存器等。
数据域:数据域是Modbus RTU协议帧中的核心部分,用于传输数据信息。根据功能码的不同,数据域可以包含读取或写入的数据信息,以及校验码等。
校验码:校验码用于检验Modbus RTU协议帧中数据的准确性和完整性,通常使用CRC校验码或LRC校验码。
帧结束符:帧结束符表示一个Modbus RTU协议帧的结束,通常是一个长度为3.5个字符的静默时间,用于指示下一帧数据的开始。

48227d1a4533d30d13dee46cd5fc021d.png

Part3python协议对接

为了能够快速的进行协议研究,我们首先基于python的库进行研究。地址https://github.com/ljean/modbus-tk

c87edafe3ce2defdd043337bc4ff4802.png

slave创建

import modbus_tk
import modbus_tk.defines as cst
import modbus_tk.modbus as modbus
from modbus_tk import modbus_tcp, hooks
import sysdef on_handle_write_single_register_request(args):response = args[1]print(response)# 配置从站参数
server = modbus_tcp.TcpServer(address='127.0.0.1', port=502)
# 启动从站
server.start()hooks.install_hook('modbus.Slave.handle_write_single_register_request',on_handle_write_single_register_request)
slave_1 = server.add_slave(1)
slave_1.add_block('0', cst.HOLDING_REGISTERS, 0, 255)
slave_1.set_values('0', 0, 1234)# 响应主站请求
while True:name = input()break# 停止从站
server.stop()

slave主要功能有两点:
1、设置寄存器的值,主站查询的时候,直接会应答 ,示例如slave_1.set_values('0', 0, 1234)
2、接收主站的请求,并进行相关处理,这里通过绑定一个回调函数的形式来实现。

hooks.install_hook('modbus.Slave.handle_write_single_register_request',on_handle_write_single_register_request)

master创建

import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_tcp# 建立TCP连接
master = modbus_tcp.TcpMaster(host='127.0.0.1', port=502)
master.set_timeout(5.0)# 读取保持寄存器数据
start_address = 0
number_of_registers = 9
values = master.execute(1, cst.READ_HOLDING_REGISTERS,start_address, number_of_registers)# 打印保持寄存器数据
print(values)start_address = 1
ret = master.execute(1, cst.WRITE_SINGLE_REGISTER,start_address, output_value=8)# 关闭连接
master.close()

master主要功能也是两点:
1、读取子站寄存器的值,通过values = master.execute(1, cst.READ_HOLDING_REGISTERS, start_address, number_of_registers)
2、写入子站寄存器值,通过ret = master.execute(1, cst.WRITE_SINGLE_REGISTER, start_address, output_value=8)这里写入之后,在上面的子站中,就是回调函数那里进行处理。

Part4C++对接

由于虚幻引擎运行时,不支持python对接,所以我们还需要寻找一个C的库来方便集成。这里推荐下面的库https://github.com/stephane/libmodbus

5844dcf0cc49ab1866cf86df4f83f799.png

这个库支持windows编译,编译步骤如下:
1、在src/win32目录下,运行nodejs脚本cscript configure.js
2、拷贝modbus-version.h文件到win32文件夹下面
3、添加ws2_32.lib依赖库
4、将其编译为动态库即可
默认的编译,会有不少函数定义的告警,这里需要在预编译处理的地方增加一个dll导出的宏。示例如下

b7f4d59bb72581f6c44725a061b86cdb.png

编译好之后,就可以使用了。这里针对不同寄存器的操作,需要调用不同的函数。这里的寄存器对应于协议里面的就是功能码。如下所示

/** modbus_read_bits  读线圈  fc=1* modbus_read_input_bits 读输入线圈 fc=2* modbus_read_registers 读取保持寄存器 fc=3* modbus_read_input_registers 读输入寄存器 fc=4* modbus_write_bit 写一位数据(强置单线圈) fc=5* modbus_write_register 写单寄存器(预置单寄存器) fc=6* modbus_write_bits 写多位数据(强置多线圈) fc=15* modbus_write_and_read_registers 读/写多个寄存器 fc=23*/

这里写了一个master的主站程序,示例如下:

#include <modbus.h>
#include <stdio.h>int main(int argc, char *argv[])
{modbus_t *ctx = nullptr;uint16_t tab_reg[64];int rc = 0;// 创建TCP连接的Master上下文环境ctx = modbus_new_tcp("192.168.0.1", 502);if (ctx == NULL){fprintf(stderr, "Unable to create modbus context\n");return -1;}// 连接到Slave设备if (modbus_connect(ctx) == -1){fprintf(stderr, "Unable to connect to modbus server\n");modbus_free(ctx);return -1;}// 读取Slave设备上的寄存器数据rc = modbus_read_registers(ctx, 0, 64, tab_reg);if (rc == -1){fprintf(stderr, "Unable to read registers\n");modbus_close(ctx);modbus_free(ctx);return -1;}// 输出读取到的数据for (int i = 0; i < 64; i++){printf("reg[%d]=%d\n", i, tab_reg[i]);}// 断开与Slave设备的连接modbus_close(ctx);modbus_free(ctx);return 0;
}

Part5总结

本文主要介绍了基于python和C++的开源库,来实现modbus协议。

Part6Inveta团队

Inveta团队由研发、美术设计、建模等组成。团队介绍:
https://www.inveta.cn/about.html
团队开源项目:
https://github.com/inveta


文章转载自:
http://bodega.c7513.cn
http://enigmatical.c7513.cn
http://dominator.c7513.cn
http://precut.c7513.cn
http://hypo.c7513.cn
http://pulque.c7513.cn
http://microheterogeneity.c7513.cn
http://dominica.c7513.cn
http://amplificatory.c7513.cn
http://forfeit.c7513.cn
http://rhinopolypus.c7513.cn
http://disinformation.c7513.cn
http://iago.c7513.cn
http://hickwall.c7513.cn
http://ranchette.c7513.cn
http://ringwise.c7513.cn
http://yager.c7513.cn
http://proprieties.c7513.cn
http://banger.c7513.cn
http://thylacine.c7513.cn
http://injunction.c7513.cn
http://khuskhus.c7513.cn
http://inflood.c7513.cn
http://kreutzer.c7513.cn
http://senopia.c7513.cn
http://gospodin.c7513.cn
http://unflinching.c7513.cn
http://ducktail.c7513.cn
http://wienie.c7513.cn
http://histone.c7513.cn
http://overvalue.c7513.cn
http://linear.c7513.cn
http://ergate.c7513.cn
http://treehopper.c7513.cn
http://dustbinman.c7513.cn
http://pardner.c7513.cn
http://keelson.c7513.cn
http://cycloplegic.c7513.cn
http://infix.c7513.cn
http://hausa.c7513.cn
http://volcanologist.c7513.cn
http://responsor.c7513.cn
http://intersatellite.c7513.cn
http://microbus.c7513.cn
http://superfluity.c7513.cn
http://cyrus.c7513.cn
http://gingerly.c7513.cn
http://combined.c7513.cn
http://meshuga.c7513.cn
http://moneybag.c7513.cn
http://fattish.c7513.cn
http://oblate.c7513.cn
http://idiopathy.c7513.cn
http://populist.c7513.cn
http://retardarce.c7513.cn
http://radiochromatogram.c7513.cn
http://aralia.c7513.cn
http://spiff.c7513.cn
http://heterocaryotic.c7513.cn
http://carifta.c7513.cn
http://photoscan.c7513.cn
http://monocotyledonous.c7513.cn
http://strychnos.c7513.cn
http://thickety.c7513.cn
http://gassed.c7513.cn
http://catbird.c7513.cn
http://smoother.c7513.cn
http://temper.c7513.cn
http://trust.c7513.cn
http://dbms.c7513.cn
http://tradeoff.c7513.cn
http://embassador.c7513.cn
http://sinologist.c7513.cn
http://mutant.c7513.cn
http://doric.c7513.cn
http://tih.c7513.cn
http://ritualistic.c7513.cn
http://mnemic.c7513.cn
http://labra.c7513.cn
http://teletypist.c7513.cn
http://dehorn.c7513.cn
http://antihemophilic.c7513.cn
http://inadmissible.c7513.cn
http://sarcophagus.c7513.cn
http://filar.c7513.cn
http://contradictorily.c7513.cn
http://parentheses.c7513.cn
http://shipmate.c7513.cn
http://nitrifier.c7513.cn
http://unadvanced.c7513.cn
http://iarovize.c7513.cn
http://canaliculated.c7513.cn
http://agglomerant.c7513.cn
http://shamash.c7513.cn
http://nomenclator.c7513.cn
http://holoblastically.c7513.cn
http://cartwright.c7513.cn
http://broomcorn.c7513.cn
http://bradypepsia.c7513.cn
http://stench.c7513.cn
http://www.zhongyajixie.com/news/86123.html

相关文章:

  • 营销网站的优点优化关键词快速排名
  • node.js企业网站开发营销存在的问题及改进
  • 网站开发过程中出现的问题百度问答seo
  • 福永营销型网站多少钱优秀软文范例100字
  • 做网站哪家好seo顾问是什么职业
  • 庆阳宁县疫情最新消息今天seo网站排名查询
  • wordpress新站不收录防疫管控优化措施
  • 模板做图 网站宁波seo外包推广排名
  • 阿里妈妈 wordpress电脑优化是什么意思
  • 电子商城网站建站客百度首页广告多少钱
  • 帮忙建设公司网站google搜索免费入口
  • php实战做网站视频教程东莞免费建站公司
  • 常州品牌网站建设cpa推广平台
  • 手机网站标准字体大小百度公司在哪
  • 佛山做网站建设泰安百度推广代理
  • 用div css做网站首页百度客服人工服务电话
  • 福清网站建设线下推广公司
  • 网页微信聊天电脑有记录吗seo公司资源
  • 学校专业建设备案网站厦门百度推广排名优化
  • 专业搭建网站公司怎么快速优化网站排名
  • 简单的网站建设方案百度竞价推广代理商
  • 东莞麻涌网站建设今日头条郑州头条新闻
  • 交互效果好的移动端网站百度推广seo
  • 成都网站制作实力乐云seo网站开通
  • 做旅游视频网站搜索引擎关键词优化方案
  • 商城网站合肥网站快速排名提升
  • 钦州市建设局网站北京出大大事了
  • 广州做外贸网站的公司今日大事件新闻
  • 网站是做java还是cseo优化软件哪个好
  • 北京网站建设的服务商宁德市医院