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

好看的网站分享江苏seo策略

好看的网站分享,江苏seo策略,ui设计的网站有哪些,云服务器如何搭建网站python实现MC协议#xff08;SLMP 3E帧#xff09;的TCP服务端是一件稍微麻烦点的事情。它不像modbusTCP那样#xff0c;可以使用现成的pymodbus模块去实现。但是#xff0c;我们可以根据协议帧进行组包#xff0c;自己去实现帧的格式#xff0c;而这一切可以基于socket模…python实现MC协议SLMP 3E帧的TCP服务端是一件稍微麻烦点的事情。它不像modbusTCP那样可以使用现成的pymodbus模块去实现。但是我们可以根据协议帧进行组包自己去实现帧的格式而这一切可以基于socket模块。本文为第二篇。 二、读写保持寄存器的完整交互包 # 客户端发送读 -》 50 00 00 FF FF 03 00 0C 00 10 00 01 04 00 00 00 00 00 A8 05 00 # 《- 服务端应答 D0 00 00 FF FF 03 00 0C 00 00 00 73 00 00 00 00 00 00 00 00 00 # 客户端发送写 -》 50 00 00 FF FF 03 00 16 00 10 00 01 14 00 00 0A 00 00 A8 05 00 4E 47 00 00 00 00 00 00 00 00 # 《- 服务端应答 D0 00 00 FF FF 03 00 02 00 00 00 1、分析交互包 基于上述交互包我们查阅官方文档发现交互包使用的是二进制代码。那么二进制代码与ASCII代码有什么区别呢 SLMPSeamless Message Protocol3E帧有两种表示方式二进制格式和ASCII格式。它们的区别在于数据的传输方式和呈现形式。 1二进制格式 在二进制格式中SLMP 3E帧中的各个字段如帧头、副帧头、命令码、数据等以二进制形式直接编码和传输。数据在网络中以原始的二进制位模式传输这种方式效率较高适用于网络传输。二进制格式通常用于实际的网络通信中数据以二进制流的形式在网络上传输。 2ASCII格式 在ASCII格式中SLMP 3E帧中的各个字段被转换成ASCII字符表示。数据以ASCII码的文本形式进行传输每个字节被转换为两个ASCII字符通常是十六进制表示。ASCII格式通常用于调试和人机界面中方便人们查看和理解数据。 总的来说二进制格式适用于机器之间的网络通信而ASCII格式适用于人机交互和调试过程中的数据显示。选择哪种格式取决于具体的应用场景和需求。 因此本文实现的是二进制格式如果你会实现二进制格式那么你也能实现ASCII格式。 2、读写保持寄存器的请求处理 1表头 客户端的两个请求相同部分都为50 00 00 FF FF 03 00我们姑且称之为表头。 2读/写长度协议帧的长度 0C 00是固定长度读的时候报文都是这么长与16 00 根据实际长度变化表示后面数据的长度例如前者应该以00 0C来看长度表示后面有12个00那样的长度。 3固定值 10 00 4读/写指令 01 04 / 01 14 5读/写寄存器地址 00 00 00 00 00 A8 05 00 /  00 00 0A 00 00 A8 05 00其中写的0A 00代表从第10个保持寄存器05表示读写5个寄存器 3、读写保持寄存器的响应处理 1表头 客户端的两个请求相同部分都为D0 00 00 FF FF 03 00我们姑且称之为表头。 2长度协议帧的长度 读0C 00根据实际长度变化写02 00 可以不变化。 3固定值 00 00 4读/写响应 响应实际读到的数据 / 无 4、程序设计 根据上述内容实现了一个定制MC服务器能够处理保持寄存器的读写请求给出正确的响应。 import socket import struct# 创建一个TCP/IP套接字 server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定套接字到特定地址和端口 server_address (192.168.1.188, 12345) # 服务器地址和端口 server_socket.bind(server_address)# 监听连接 server_socket.listen(1)print(等待客户端连接...) connection, client_address server_socket.accept()print(客户端已连接:, client_address)def request_verdict(req_bytes_frame): # req_bytes_frame是字节数据b\x02\x00\x08\x00\x00\x00\x00\x00\x10\x00\x01\x01\x02\x03\x04\x03command req_bytes_frame.hex()[22:26] # 转成16进制字符串好数据处理if command in [0104, 0401]: # 判断读写return False # 读elif command in [0114, 1401]:return True # 写else:raise ValueError(读写指令错误)def write_response_frame(req_bytes_frame):response D00000FFFF030002000000 # 写成功则返回这一串数据content req_bytes_frame.hex()[42:] # 看一下客户端想写的内容print(客户端想要写入的内容, bytes.fromhex(content).decode())return bytes().fromhex(response)def read_response_frame(req_bytes_frame, res_data):header D00000FFFF03000C000000 # 读的响应头nums req_bytes_frame.hex()[38:42] # 获取客户端想要读的寄存器个数act_nums_hex nums[2:] nums[:2] # 涉及大端序和小端序需要转一下act_nums int(act_nums_hex, 16) # 得到实际数量res_data_hex .join([hex(ord(c))[2:].zfill(2) for c in res_data]) # 将要返回的数据转成16进制字符串response header res_data_hex 0*(act_nums*2*2-len(res_data_hex)) # 根据请求数量返回对应的内容return bytes().fromhex(response)try:while True:# 接收客户端请求request connection.recv(1024)print(001:, request)if request:flag request_verdict(request)if flag: # 响应写response write_response_frame(request)print(002:,response)else: # 响应读response read_response_frame(request, start)print(003:,response)connection.sendall(response) finally:# 清理连接connection.close()
http://www.tj-hxxt.cn/news/230410.html

相关文章:

  • 公司网站的实例何使网站的页面结构更为合理建
  • 博客网站开发教程小型公司网络建设方案
  • 电子商务网站需求分析大学生学风建设专题网站
  • 网站logo的颜色与网页的颜色如何做网站推广广告
  • 玛多县网站建设公司做网站大概需要多少钱
  • 用Python做网站如何配置域名电子商务网站对比分析
  • 做网站能赚钱吗表情包做淘宝客网站需要注意什么
  • 网站建设优劣势分析无法与网站建立安全连接
  • 专业的佛山网站建设丹东电信网站备案
  • 哪些网站是做零售的网站备案的好处
  • 网站后台上传案例能同步到博客吗网络营销推广实例
  • 企业网站设计wordpress南昌地宝网招聘信息网最新招聘
  • 网站建设岗位将来有什么发展wordpress安装方式
  • 影视网站开发装修设计师一般多少钱
  • 网站后台代码中国人做英文网站
  • 让别人做网站需要注意什么问题查建设公司年度保证金网站
  • 企业做不做网站的坏处在线建站|网页制作|网站建设平台
  • wordpress社交链接设置百度seo搜索引擎优化厂家
  • 重庆企业做网站公司网站做一年多少钱
  • 苏州网站关键词优化推广沈阳不孕不育医院前三名
  • 一个云主机 多个网站百度推广官网推荐:sk67666
  • 用vue做的网站模板微营销是什么合法吗
  • 外贸网站建设有哪些要求中天建设集团门户网站
  • 只有一个人网站开发外贸建站需要花多少钱
  • 一学一做专题网站单位网站建设内容
  • 营销型网站建设发难开通网站申请书
  • 虚拟主机建站邮票上的化学史网站开发
  • 浙江建设职业学校网站企业自己建网站怎么建
  • 网站空间编辑器做网站的专业
  • 五莲网站设计小学网站建设设计方案