import serial
import struct
import logging
import modbus_tk
import modbus_tk.defines as cst
import modbus_tk.modbus_rtu as modbus_rtu
logger = modbus_tk.utils.create_logger("console")

if __name__ == '__main__':
try:
serial = serial.Serial(port="COM2",baudrate=9600,bytesize=8,parity='N',stopbits=1)
master = modbus_rtu.RtuMaster(serial)
master.set_timeout(5.0)
master.set_verbose(True)
logger.info("connected!")

# 写单个寄存器
logger.info(master.execute(1, cst.WRITE_SINGLE_REGISTER, 0, output_value=99))
logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 1))

# 写单个寄存器 负数
logger.info(master.execute(1, cst.WRITE_SINGLE_REGISTER, 1, output_value=-123))
logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 1, 1))

# 写多个寄存器 起始地址为4的保持寄存器,操作寄存器个数为4 ,根据列表长度来判断写入个数
logger.info(master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 4, output_value=[3,-13, 6,24]))
# 读也读4个寄存器
read_data = master.execute(1, cst.READ_HOLDING_REGISTERS, 4, 4)

# 写寄存器 起始地址为8的保持寄存器,操作寄存器个数为 4 ,一个浮点数float 占两个寄存器;
# 写浮点数时一定要加 data_format 参数,两个ff 表示要写入两个浮点数,以此类推
# 我这里模拟的是小端模式,具体可参考 struct 用法。和数据源保持一致即可。
logger.info(master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 8, output_value=[3.3,-6.4],data_format='<ff'))
# 读对应的 4个寄存器,指定数据格式
read_data = master.execute(1, cst.READ_HOLDING_REGISTERS, 8, 4,data_format='<ff')
logger.info(read_data)

# 写入 双精度 数据到寄存器
logger.info(master.execute(1, cst.WRITE_MULTIPLE_REGISTERS, 16, output_value=[3.313, -6.414], data_format='<dd'))
read_data = master.execute(1, cst.READ_HOLDING_REGISTERS, 16, 8, data_format='<dd')

# 写单个线圈,写寄存器地址为0的线圈寄存器,写入内容为1 位操作)
logger.info(master.execute(1, cst.WRITE_SINGLE_COIL, 0, output_value= 1))
logger.info(master.execute(1,cst.READ_COILS,0,1))

# 写多个线圈 写寄存器地址为1的线圈寄存器,写入内容为列表内容 位操作)
logger.info(master.execute(1, cst.WRITE_MULTIPLE_COILS,1,output_value=[0,1,1,0]))
logger.info(master.execute(1,cst.READ_COILS,1,4))

# 读保持寄存器,从 8 开始读 8 个,元组形式返回
data = master.execute(1, cst.READ_HOLDING_REGISTERS, 8, 8)
logger.info(data)

# 读输入寄存器,从 2 开始读 5 个,元组形式返回
logger.info(master.execute(1, cst.READ_INPUT_REGISTERS, 2, 5))

# 读线圈寄存器
logger.info(master.execute(1, cst.READ_COILS, 8, 8))

# 读离散输入寄存器
logger.info(master.execute(1, cst.READ_DISCRETE_INPUTS, 8, 8))

# 同时读写多个寄存器
# ??

except modbus_tk.modbus.ModbusError as e:
logger.error("%s-ErrCode=%d" % (e, e.get_exception_code()))

参考链接:https://blog.csdn.net/evenio/article/details/105156457

modbus_tk Rru的更多相关文章

  1. BBU和RRU具体区别是 什么?

    RRU是Remote Radio Unit 远端射频模块,BBU是Building Baseband Unit 室内基带处理单元.基带BBU集中放置在机房,RRU可安装至楼层,BBU与RRU之间采用光 ...

  2. (转)RRU交织冗余在LTE-R组网中的应用研究

    RRU交织冗余在LTE-R组网中的应用研究 王 芳1,2 庞萌萌1,2 (1.北京全路通信信号研究设计院集团有限公司,北京 100070; 2.北京市高速铁路运行控制系统工程技术研究中心,北京 100 ...

  3. BBU+RRU基本介绍

    现代移动通信网络中的数模转化架构:RRU+BBU: 因为学习需要了解RRU+BBU.特此网上查找了一番,找到了一些还不错的解释,分享给大家! BBU与RRU的区别: 通常大型建筑物内部的层间有楼板,房 ...

  4. 问题:modbus_tk开发中遇到[Errno 98] Address already in use (已解决)

    案例: from modbus_tk import modbus_tcp,defines import time s = modbus_tcp.TcpServer(port=5300) def mai ...

  5. modbus_tk模块

    modbus_tk模块 通过modbus-RTU 读取地址,调用后返回反馈数值和故障信息. modbus_tk模块安装 pip install pymodbus_tk 下面代码功能:读取地址为0x42 ...

  6. 5G系统架构

    原文标题:迈向5G之路,颠覆性的5G系统架构?   本文部分图片,资料摘自<迈向5G C-RAN:需求.架构与挑战> 突如一夜春风来,随着Polar码与LDPC码作为5G编码候选方案,通信 ...

  7. 从2G到5G, 基站天线过去与未来

    在蜂窝移动通信系统中,天线是电路信号与空间辐射电磁波的转换器,是移动通信系统的末梢关键组成部分. 从2G到4G,移动基站天线经历了全向天线.定向单极化天线.定向双极化天线.电调单极化天线.电调双极化天 ...

  8. css随笔1

    1.简单清除浏览器样式 *{        padding: 0px;        margin: 0px;    } 2.得到屏幕范围的div html,body{        width: 1 ...

  9. 【POJ2104】K-th Number

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABToAAAJ2CAIAAADwi6oDAAAgAElEQVR4nOy9a5Pj1nnvi0/Q71Llj3

  10. CSS字体记录

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaYAAACnCAIAAADVOG9FAAAgAElEQVR4nOy9eXwcxZk/vL/9ve8eb7 ...

随机推荐

  1. uniapp打包小程序运行到微信开发工具

    1.在manifest.json文件中配置AppID 2.在HBuilderX中配置微信开发者工具的安装路径. 工具->设置->运行设置 3.  在微信开发者工具中配置 设置->安全 ...

  2. 用telnet远程连接linux系统

    环境,centos7.6 通过telnet进行远程登录的方法如下: 1.安装telnet,telnet-server,xinetd 检测是否安装telnet rpm -qa | grep telnet ...

  3. oracle abs ap 银行账号 组织层 新增api

    DECLARE l_return_status VARCHAR2(1); l_msg_count NUMBER; l_msg_data VARCHAR2(1000); x_acct_use_id nu ...

  4. RepOpt-VGG:梯度参数化的开创

    ​ 本文来自公众号"AI大道理" ​ YOLov6的量化问题: yolov6在结构中大量使用了重参数结构,导致数据分布过差,PTQ精度急剧下降.另外,重参数化结构网络无法直接使用Q ...

  5. EXCEL函数总结

    ------------------截取"号"之前的字符 =MID(A45,1,FIND("号",A45,1)-1)

  6. jeecgboot <j-popup

    <a-col :span="24"> <a-form-item label=" 规格" :labelCol="labelCol&qu ...

  7. python读取文本中的字典

    首先得明确文本的每行是存的json或者用python的write(str(一个字典))写入的,那么不用借助json模块就能读取为字典,使用eval函数就行,json只能处理带双引号的字符串,但很多时候 ...

  8. 如何把高德地图搜索商家电话资料导出成excel里?

    有很多人问我地图商家结果采集怎么做? 怎么样能够快速的把高德地图左边的搜索列表里的商家地图,电话,导出到EXCEL里. 如何快速地将高德地图里的商家电话资料导出EXCEL? 操作步骤: 1. 选择你要 ...

  9. re的finditer()

    在前面学习了findall()函数,它可以一次性找到多个匹配的字符串,但是不能提供所在的位置,并且是一起返回的,如果有数万个一起返回来,就不太好处理了,因此要使用finditer()函数来实现每次只返 ...

  10. AIIE21th003: 2021年第二届国际工业工程和人工智能大会(IEAI 2021)

    会议亮点: 1.IEAI2021由ACM新加坡分会赞助举办,它是MSIE 2021的分会. 2.被接收的文章会被发表在ACM国际论文集上,并被EI Compendex, Scopus, Thomson ...