我是靠谱客的博主 粗犷巨人,最近开发中收集的这篇文章主要介绍python中modbus_rtu与poll主机读写交互,附官方demo详细说明第一步设置win虚拟主机,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
首先要下载modbus-poll主机虚拟软件,百度自行下载
官方demo注释说明
# -*- coding: utf_8 -*-
"""
Modbus TestKit: Implementation of Modbus protocol in python
(C)2009 - Luc Jean - luc.jean@gmail.com
(C)2009 - Apidev - http://www.apidev.fr
This is distributed under GNU LGPL license, see license.txt
"""
import sys
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
import serial
# RtuServer python作为从机去与主机交互 连接主串口
# RtuMaster python作为主机与从机交互
连接从串口
#PORT = '/dev/ptyp5'
def main():
"""main"""
logger = modbus_tk.utils.create_logger(name="console", record_format="%(message)s")
#Create the server
server = modbus_rtu.RtuServer(serial.Serial(port="com2",
baudrate=9600, bytesize=8, parity='O', stopbits=1))
try:
logger.info("running...")
logger.info("enter 'quit' for closing the server")
server.start()
# 添加从机 参数为从机id
slave_1 = server.add_slave(1)
# 添加模块, 模块名称:0 功能码:cst.HOLDING_REGISTERS,起始地址:0 ,线圈个数:10
slave_1.add_block('0', cst.HOLDING_REGISTERS, 0, 10)
while True:
# 读取cmd输入的一行数据
cmd = sys.stdin.readline()
# 以空格切割,转换成列表对象
args = cmd.split(' ')
# 退出cmd
if cmd.find('quit') == 0:
sys.stdout.write('bye-byern')
break
# 添加从机
elif args[0] == 'add_slave':
slave_id = int(args[1])
# 从机id
server.add_slave(slave_id)
sys.stdout.write('done: slave %d addedrn' % (slave_id))
elif args[0] == 'add_block':
slave_id = int(args[1])
# 从机id
name = args[2]
# 块名称
block_type = int(args[3])
# 功能码 设置 1 2 3 4
实际是个枚举类型 例如3 对应的是HOLDING_REGISTERS
starting_address = int(args[4]) # 开始地址 (如果之前已经添加开始地址为0,线圈个数为10,则这里起始为11)
length = int(args[5])
# 线圈个数
slave = server.get_slave(slave_id)
slave.add_block(name, block_type, starting_address, length)
sys.stdout.write('done: block %s addedrn' % (name))
elif args[0] == 'set_values':
slave_id = int(args[1])
# slaveid值
name = args[2]
# 块名称
address = int(args[3])
# 开始地址值
values = []
# 写入从机的值
for val in args[4:]:
values.append(int(val))
slave = server.get_slave(slave_id)
slave.set_values(name, address, values)
values = slave.get_values(name, address, len(values))
sys.stdout.write('done: values written: %srn' % (str(values)))
elif args[0] == 'get_values':
slave_id = int(args[1])
#slaveid值
name = args[2]
#块名称
address = int(args[3])
#开始地址值
length = int(args[4])
# 读取从机几个数据
slave = server.get_slave(slave_id)
values = slave.get_values(name, address, length)
sys.stdout.write('done: values read: %srn' % (str(values)))
else:
sys.stdout.write("unknown command %srn" % (args[0]))
finally:
server.stop()
if __name__ == "__main__":
main()
测试
第一步设置win虚拟主机
主机连接上后开始测试
按照顺序cmd写入值,每个位置的意义我在注释中有说明
set_values 1 0 0 1 2 3 4 5 6 7 8 9
获取前5个的值
添加一个块
此时可以找到这个块,且为该块设置值或者获取值
图解
为该块设置值
获取该块的值
最后
以上就是粗犷巨人为你收集整理的python中modbus_rtu与poll主机读写交互,附官方demo详细说明第一步设置win虚拟主机的全部内容,希望文章能够帮你解决python中modbus_rtu与poll主机读写交互,附官方demo详细说明第一步设置win虚拟主机所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复