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

做直播网站有市场吗企业seo排名费用报价

做直播网站有市场吗,企业seo排名费用报价,wordpress编辑php.ini,做证书的网站监测数据采集物联网应用开发步骤(9.2) Modbus rtu协议开发 本章节在《监测数据采集物联网应用开发步骤(7)》基础上实现可参考《...开发步骤(7)》调试工具,本章节代码需要调用modbus_tk组件,阅读本章节前建议baidu熟悉modbus rtu协议内容 组件安装modb…
  1. 监测数据采集物联网应用开发步骤(9.2)

Modbus rtu协议开发

本章节在《监测数据采集物联网应用开发步骤(7)》基础上实现可参考《...开发步骤(7)》调试工具,本章节代码需要调用modbus_tk组件阅读本章节前建议baidu熟悉modbus rtu协议内容

组件安装modbus_tk

pip3 install modbus_tk

验证是否安装成功,python中运行下列代码无异常则安装成功:

import modbus_tk

新建modbus协议管理类com.zxy.comport.ComModBus.py

#! python3
# -*- coding: utf-8 -
'''
Created on 2020年05月10日
@author: zxyong 13738196011
'''
import time,struct
from com.zxy.common import Com_Para
from com.zxy.common.Com_Fun import Com_Fun
from com.zxy.z_debug import z_debug
import modbus_tk.defines as cst
import modbus_tk.modbus_rtu as modbus_rtu#监测数据采集物联网应用--modbus协议管理类
class ComModBus(z_debug):def __init__(self):pass@staticmethoddef get_objAryRtuMaster(inputComPort):        master = Com_Fun.GetHashTableNone(Com_Para.objAryRtuMaster, inputComPort)if master is None:com_at = Com_Fun.GetHashTableNone(Com_Para.htComPort, inputComPort)if com_at is not None:master = modbus_rtu.RtuMaster(com_at.attSerial)           # 设定串口为从站master.set_timeout(5.0)master.set_verbose(True)Com_Fun.SetHashTable(Com_Para.objAryRtuMaster, inputComPort, master)return master#字符串转16进制字节并+crc16校验,传入参数无crc校验@staticmethoddef get_data_com_nocrc(inputComPort, CmdStr):  temReturn = None       try:  com_at = Com_Fun.GetHashTable(Com_Para.htComPort, inputComPort)  inputByte = bytes().fromhex(CmdStr)inputByte = inputByte + ComModBus._getCrc16(inputByte)if com_at.WritePortData(inputByte) > 0:temReturn = com_at.attReturnValue                    com_at.attReturnValue = Noneexcept Exception as e:temReturn = Nonereturn temReturn#字符串转字节发送,ascii发送@staticmethoddef get_data_com_ascii(inputComPort, CmdStr):  temReturn = None       try:  com_at = Com_Fun.GetHashTable(Com_Para.htComPort, inputComPort)inputByte = bytes(CmdStr, encoding="utf8")if com_at.WritePortDataImmed(inputByte) > 0:temReturn = com_at.attReturnValue                    com_at.attReturnValue = Noneexcept Exception as e:temReturn = Nonereturn temReturn#字符串转16进制字节发送@staticmethoddef get_data_com_hex(inputComPort, CmdStr):     temReturn = None    try:com_at = Com_Fun.GetHashTable(Com_Para.htComPort, inputComPort)  inputByte = bytes().fromhex(CmdStr)if com_at.WritePortData(inputByte) > 0:comValue = com_at.attReturnValueif comValue is None:return NonetemReturn = comValuecom_at.attReturnValue = Noneexcept Exception as e:temReturn = Nonereturn temReturn#字节发送@staticmethoddef get_data_com_byte(inputComPort, inputByte):    temReturn = None     try:com_at = Com_Fun.GetHashTable(Com_Para.htComPort, inputComPort)  if com_at.WritePortData(inputByte) > 0:comValue = com_at.attReturnValueif comValue is None:return NonetemReturn = comValuecom_at.attReturnValue = Noneexcept Exception as e:temReturn = Nonereturn temReturn#Modbus 04功能码发送@staticmethoddef get_data_rtu_04(inputComPort, inputModbusAddr, inputModbusBegin, inputModbusLength):red = []try:master = ComModBus.get_objAryRtuMaster(inputComPort)if master is not None:red = master.execute(int(inputModbusAddr), cst.READ_INPUT_REGISTERS, int(inputModbusBegin), int(inputModbusLength))  # 这里可以修改需要读取的功能码             time.sleep(0.1)                if isinstance(red, list) or isinstance(red, tuple): return redelse:return [""]except Exception as e:return [""]#Modbus 03功能码发送 @staticmethoddef get_data_rtu_03(inputComPort, inputModbusAddr, inputModbusBegin, inputModbusLength):read = []try:master = ComModBus.get_objAryRtuMaster(inputComPort)if master is not None:read = master.execute(inputModbusAddr, cst.READ_HOLDING_REGISTERS, inputModbusBegin, inputModbusLength)  # 这里可以修改需要读取的功能码             time.sleep(0.1)                if isinstance(read, list) or isinstance(read, tuple): return readelse:return [""]except Exception as e:return [""]#Modbus 写寄存器数据@staticmethoddef set_data_rtu(inputComPort, inputModbusAddr, inputModbusBegin, inputValue):read = []try:master = ComModBus.get_objAryRtuMaster(inputComPort)if master is not None:# 这里可以修改需要读取的功能码 if isinstance(inputValue, list) or isinstance(read, tuple):read = master.execute(inputModbusAddr, cst.WRITE_MULTIPLE_REGISTERS, inputModbusBegin, output_value=inputValue) else:read = master.execute(inputModbusAddr, cst.WRITE_SINGLE_REGISTER, inputModbusBegin, output_value=inputValue)               if isinstance(read, list) or isinstance(read, tuple): return readelse:return [""]except Exception as e:return [""]@staticmethoddef set_data_rtu2(inputComPort, inputModbusAddr, inputModbusBegin, inputValue):read = []try:master = ComModBus.get_objAryRtuMaster(inputComPort)if master is not None:# 这里可以修改需要读取的功能码 if isinstance(inputValue, list) or isinstance(read, tuple):read = master.execute(inputModbusAddr, cst.ANALOG_INPUTS, inputModbusBegin, output_value=inputValue) else:read = master.execute(inputModbusAddr, cst.ANALOG_INPUTS, inputModbusBegin, output_value=inputValue)               if isinstance(read, list) or isinstance(read, tuple): return readelse:return [""]except Exception as e:return [""]@staticmethoddef _getCrc16(RtuStr):b = 0xA001# 16位寄存器a = 0xFFFFfor byte in RtuStr:# 1、把数据帧中的第一个8位字节与CRC寄存器中的低字节进行异或运算a = a ^ bytefor i in range(8):# 3、如果最低位为1:将CRC寄存器与一个预设的固定值(0A001H)进行异或运算if a & 0x0001:a = a >> 1a = a ^ b # 2、将CRC寄存器向右移一位,最高位填以0,最低位移出并检测else:a = a >> 1aa = '0' * (6 - len(hex(a))) + hex(a)[2:]# 获取低和高位lo, hh = int(aa[:2], 16), int(aa[2:], 16)hexbytes = bytes([hh, lo])return hexbytes#高低位 reverse: true高位在前 false低位在前@staticmethoddef ReadFloat(n1, n2, reverse=False):    n = '%04x' % n1m = '%04x' % n2if reverse:v = n + melse:v = m + ny_bytes = bytes.fromhex(v)y = struct.unpack('!f', y_bytes)[0]y = round(y, 6)return y@staticmethoddef WriteFloat(value, reverse=False):y_bytes = struct.pack('!f', value)y_hex = ''.join(['%02x' % i for i in y_bytes])n, m = y_hex[:-4], y_hex[-4:]n, m = int(n, 16), int(m, 16)if reverse:v = [n, m]else:v = [m, n]return v@staticmethoddef ReadDint(n1,m1, reverse=False):n ='%04x' % n1m = '%04x' % m1if reverse:v = n + melse:v = m + ny_bytes = bytes.fromhex(v)y = struct.unpack('!i', y_bytes)[0]return y@staticmethoddef WriteDint(value, reverse=False):y_bytes = struct.pack('!i', value)y_hex = ''.join(['%02x' % i for i in y_bytes])n, m = y_hex[:-4], y_hex[-4:]n, m = int(n, 16), int(m, 16)if reverse:v = [n, m]else:v = [m, n]return v

modbus rtu测试案例MonitorDataCmd.py主文件中编写:

from com.zxy.comport.ComModBus import ComModBus

在    if __name__ == '__main__':下添加

        #串口配置参数Com_Para.ComPortList = "COM2,9600,8,0,A;COM4,9600,8,2,B"#串口连接初始化Init_Page.Start_ComPort()#Modbus-rtu协议功能测试temA01modbus = ComModBus()#利用modbus_tk组件获取数据,参数:COM索引,modbus站地址,modbus起始位,modbus长度read = temA01modbus.get_data_rtu_03("A",1,0,10)print("获取10进制原始返回值=>"+str(read))modValue = []iIndex = 0.0n1 = 0n2 = 0for temSV in read:if iIndex % 2 != 0:n2 = int(temSV)#16进制单精转浮点temMV = temA01modbus.ReadFloat(n1,n2,True)modValue.append(temMV)else:n1 = int(temSV)iIndex = iIndex + 1print("获取读到并解析的寄存器浮点数=>"+str(modValue))#利用modbus指令协议直接通过com口读取数据temCmd = "010300A1000A942F"bhex = temA01modbus.get_data_com_hex("A",temCmd)read = str(binascii.b2a_hex(bhex).decode(Com_Para.U_CODE)).upper()print("获取16进制返回值=>"+str(read))

运行测试结果如下图:

测试案例中例举了2种方法都可以读到数据,任取其一即可。

针对        

#利用modbus指令协议直接通过com口读取数据

      temCmd = "010300A1000A942F"

指令解释如下:

01 站地址

03 功能码

00A1 寄存器开始地址(16进制)

000A  读取数据长度10个(16进制转10进制)

942F CRC校验码

获取16进制返回值=>010314429DA8F643060A3D420070A44343000043554CCD49A8返回值解释如下:

01 站地址

03 功能码

14 数据长度20(16进制转10进制)

429DA8F643060A3D420070A44343000043554CCD 数据值16进制

49A8 CRC校验码

429DA8F643060A3D420070A44343000043554CCD 数据值解析要依据相关对方开发说明文档,假设该数据为寄存器浮点数则按如下解析:

429D A8F6 ==>10进制浮点数 78.83

4306 0A3D ==>10进制浮点数 134.039

4200 70A4 ==>10进制浮点数 32.11

4343 0000 ==>10进制浮点数 195

4355 4CCD ==>10进制浮点数 213.300

可以利用该工具计算IEEE 754浮点数十六进制相互转换(32位,四字节,单精度)

在线进制转换-IEE754浮点数16进制转换


文章转载自:
http://www.morning.hqwxm.cn.gov.cn.hqwxm.cn
http://www.morning.ypzsk.cn.gov.cn.ypzsk.cn
http://www.morning.wynqg.cn.gov.cn.wynqg.cn
http://www.morning.wrfk.cn.gov.cn.wrfk.cn
http://www.morning.clndl.cn.gov.cn.clndl.cn
http://www.morning.bnkcl.cn.gov.cn.bnkcl.cn
http://www.morning.nydtt.cn.gov.cn.nydtt.cn
http://www.morning.supera.com.cn.gov.cn.supera.com.cn
http://www.morning.rrxnz.cn.gov.cn.rrxnz.cn
http://www.morning.gbyng.cn.gov.cn.gbyng.cn
http://www.morning.rmyt.cn.gov.cn.rmyt.cn
http://www.morning.npxht.cn.gov.cn.npxht.cn
http://www.morning.nsncq.cn.gov.cn.nsncq.cn
http://www.morning.brfxt.cn.gov.cn.brfxt.cn
http://www.morning.gjssk.cn.gov.cn.gjssk.cn
http://www.morning.cwjsz.cn.gov.cn.cwjsz.cn
http://www.morning.wbxtx.cn.gov.cn.wbxtx.cn
http://www.morning.pwdgy.cn.gov.cn.pwdgy.cn
http://www.morning.gfkb.cn.gov.cn.gfkb.cn
http://www.morning.ghryk.cn.gov.cn.ghryk.cn
http://www.morning.qnzld.cn.gov.cn.qnzld.cn
http://www.morning.xhlpn.cn.gov.cn.xhlpn.cn
http://www.morning.jzkqg.cn.gov.cn.jzkqg.cn
http://www.morning.hyhqd.cn.gov.cn.hyhqd.cn
http://www.morning.rfmzs.cn.gov.cn.rfmzs.cn
http://www.morning.lhxdq.cn.gov.cn.lhxdq.cn
http://www.morning.bkqdg.cn.gov.cn.bkqdg.cn
http://www.morning.fwgnq.cn.gov.cn.fwgnq.cn
http://www.morning.rfrnc.cn.gov.cn.rfrnc.cn
http://www.morning.mhnxs.cn.gov.cn.mhnxs.cn
http://www.morning.kwxr.cn.gov.cn.kwxr.cn
http://www.morning.cpktd.cn.gov.cn.cpktd.cn
http://www.morning.fldsb.cn.gov.cn.fldsb.cn
http://www.morning.rycd.cn.gov.cn.rycd.cn
http://www.morning.smwlr.cn.gov.cn.smwlr.cn
http://www.morning.rxnxl.cn.gov.cn.rxnxl.cn
http://www.morning.yrbq.cn.gov.cn.yrbq.cn
http://www.morning.dmzfz.cn.gov.cn.dmzfz.cn
http://www.morning.rswfj.cn.gov.cn.rswfj.cn
http://www.morning.spwm.cn.gov.cn.spwm.cn
http://www.morning.jntcr.cn.gov.cn.jntcr.cn
http://www.morning.btblm.cn.gov.cn.btblm.cn
http://www.morning.psgbk.cn.gov.cn.psgbk.cn
http://www.morning.bby45.cn.gov.cn.bby45.cn
http://www.morning.fsrtm.cn.gov.cn.fsrtm.cn
http://www.morning.fxzw.cn.gov.cn.fxzw.cn
http://www.morning.pfgln.cn.gov.cn.pfgln.cn
http://www.morning.cxlys.cn.gov.cn.cxlys.cn
http://www.morning.btblm.cn.gov.cn.btblm.cn
http://www.morning.rythy.cn.gov.cn.rythy.cn
http://www.morning.pfnwt.cn.gov.cn.pfnwt.cn
http://www.morning.rnzgf.cn.gov.cn.rnzgf.cn
http://www.morning.xywfz.cn.gov.cn.xywfz.cn
http://www.morning.ghcfx.cn.gov.cn.ghcfx.cn
http://www.morning.rdlong.com.gov.cn.rdlong.com
http://www.morning.tymnr.cn.gov.cn.tymnr.cn
http://www.morning.zqcsj.cn.gov.cn.zqcsj.cn
http://www.morning.bzbq.cn.gov.cn.bzbq.cn
http://www.morning.hmnhp.cn.gov.cn.hmnhp.cn
http://www.morning.btypn.cn.gov.cn.btypn.cn
http://www.morning.cnyqj.cn.gov.cn.cnyqj.cn
http://www.morning.qlkjh.cn.gov.cn.qlkjh.cn
http://www.morning.zympx.cn.gov.cn.zympx.cn
http://www.morning.fhrgk.cn.gov.cn.fhrgk.cn
http://www.morning.fsfz.cn.gov.cn.fsfz.cn
http://www.morning.zlsmx.cn.gov.cn.zlsmx.cn
http://www.morning.yrwqz.cn.gov.cn.yrwqz.cn
http://www.morning.rntgy.cn.gov.cn.rntgy.cn
http://www.morning.jycr.cn.gov.cn.jycr.cn
http://www.morning.wchcx.cn.gov.cn.wchcx.cn
http://www.morning.zyrp.cn.gov.cn.zyrp.cn
http://www.morning.fpzpb.cn.gov.cn.fpzpb.cn
http://www.morning.gftnx.cn.gov.cn.gftnx.cn
http://www.morning.qhkdt.cn.gov.cn.qhkdt.cn
http://www.morning.ltbwq.cn.gov.cn.ltbwq.cn
http://www.morning.bxbkq.cn.gov.cn.bxbkq.cn
http://www.morning.ydnxm.cn.gov.cn.ydnxm.cn
http://www.morning.mmjqk.cn.gov.cn.mmjqk.cn
http://www.morning.nflpk.cn.gov.cn.nflpk.cn
http://www.morning.cknws.cn.gov.cn.cknws.cn
http://www.tj-hxxt.cn/news/13460.html

相关文章:

  • 电子商城网站开发支持手机端企业培训考试app
  • 做美容美发学校网站公司梅州seo
  • 青岛模板网站百度公司地址在哪里
  • 源代码网站和模板做的区别北京seo专员
  • vs2013怎么做网站seo整站优化解决方案
  • 垂直 社交网站 建设十大暗网搜索引擎
  • 徐州网站开发设计平台中牟网络推广
  • 建设网站好公司哪家好怎么做网站免费的
  • wordpress page内容重庆搜索引擎seo
  • 最方便建立网站深圳20网络推广
  • 永州公司做网站营销策划培训
  • 武汉影楼网站建设天津百度推广公司
  • 陕西省建设监理协会网站搜索数据
  • 广西网站建设推荐百度如何添加店铺位置信息
  • 广东省网站免备案aso安卓优化公司
  • 深圳公司网站建设设计百度视频
  • 网页布局网站开发客户的70个渠道
  • 家庭宽带做网站服务器吗在线培训系统平台
  • 成都网站开发制作seo外贸公司推广
  • 重庆最专业的房产网站建设什么是百度指数
  • 网站建设规划方案ppt最新互联网项目平台网站
  • 天津个人网站建设优化教程网
  • 有没有个人做网站赚钱沈阳优化推广哪家好
  • 电商数据分析网站绍兴seo公司
  • 西安幼儿园网站制作seo标题优化裤子关键词
  • 武汉手机网站建设信息百度搜索排名与点击有关吗
  • 淘宝做导航网站有哪些功能吗网络seo公司
  • 有没有专门发布毕业设计代做网站杭州百度seo
  • 建设的基本流程网站网上营销新观察网
  • 上海建站网站简洁案例搜索引擎优化师工资