返回顶部
首页 > 资讯 > 后端开发 > Python >用Python实现modbus slav
  • 266
分享到

用Python实现modbus slav

Pythonmodbusslav 2023-01-31 02:01:15 266人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

最近在研究modbus master和modbus slave。项目要求实现modbus slave虚拟机来做功能测试。 网上modbus master相关的demo很多,但是modbus slave相关的demo很少。还是Google给

最近在研究modbus master和modbus slave。项目要求实现modbus slave虚拟机来做功能测试

网上modbus master相关的demo很多,但是modbus slave相关的demo很少。还是Google给力,最后在google上找到一些有用的方法实现。

python是很容易实现modbus slave的工具,简单易上手。

下面是自己写的modbus slave demo。先安装Anaconda,Anaconda相当于安装了Python,使用自带的集成开发环境spyder。用的是modbus_tk库实现modbus slave。


# -*- coding: utf-8 -*-
"""
Created on Mon Aug 21 17:00:53 2017

@author: Administrator
"""

import sys
import struct  
import modbus_tk 
import modbus_tk.defines as mtk  
import modbus_tk.modbus  
import modbus_tk.modbus_tcp  
import time  
import random  
import string
  
logger = modbus_tk.utils.create_logger(name="console", record_fORMat="%(message)s")  
  
try:  
    #server = modbus_tk.modbus_tcp.TcpServer()  
    #这里的端口和地址都是默认的,地址是本地:  
    server = modbus_tk.modbus_tcp.TcpServer(port=502, address='127.0.0.1', timeout_in_sec=3)         
    server.start()  
    slave_1 = server.add_slave(1)  
   # slave_2 = server.add_slave(2)
    # 创建寄存器,寄存器的别名为block1,寄存器为保持寄存器(Holding_ReGISter),寄存器起始地址为0,寄存器个数为...
    slave_1.add_block('block1', modbus_tk.defines.HOLDING_REGISTERS, 0, 11) 
    slave_1.set_values('block1', 0, 10*[0])
    slave_1.set_values('block1', 10, 255)   #PLC--第0011寄存器的初始值为高八位全为0,低八位全为1
   # slave_1.add_block('block2', modbus_tk.defines.HOLDING_REGISTERS, 2, 1)
    #给slave_1添加一个模块(模块名,只读,地址,长度)  
    valueAll = slave_1.get_values('block1', 0, 11)
    print 'valueAll: ', valueAll

    valueSet = slave_1.get_values('block1', 0, 1)   # 寄存器0000 -- 状态位初始值为全0
    print 'valueSet:  ', valueSet

    while True:       
        value = slave_1.get_values('block1', 10, 1)    
        print 'value', value

        ss = int(str(value[0]))
        print 'ss:', ss
        
    ## 判断执行机构开启操作
        if (((ss & 256) == 256) and (ss & 1) == 0):   # 256  判断“补光灯1启动”
            value1 = slave_1.get_values('block1', 0, 1)
            print 'open value1:', value1
            ss1 = int(str(value1[0]))
            slave_1.set_values('block1', 0, (ss1 | 256))
            valueSet = slave_1.get_values('block1', 0, 1)
            print 'valueSet:  ', valueSet
            
        if (((ss & 256<<1) == 256<<1) and  (ss & 1<<1) == 0):   # 512 左移一位 判断“补光灯2启动”
            value2 = slave_1.get_values('block1', 0, 1)
            print 'open value2:', value2
            ss2 = int(str(value2[0]))
            slave_1.set_values('block1', 0, (ss2 | 512))

        if (((ss & 256<<2) == 256<<2) and (ss & 1<<2) == 0):   # 1024 左移二位 判断“如气风机启动”
            value3 = slave_1.get_values('block1', 0, 1)
            print 'open value3:', value3
            ss3 = int(str(value3[0]))
            slave_1.set_values('block1', 0 , (ss3 | 1024))
                
        if (((ss & 256<<3) == 256<<3) and (ss & 1<<3) == 0):   # 2048 左移三位 判断“供液泵启动”   
            value4 = slave_1.get_values('block1', 0, 1)
            print 'open value4:', value4
            ss4 = int(str(value4[0]))
            slave_1.set_values('block1', 0 , (ss4 | 2048))
                
        if (((ss & 256<<4) == 256<<4) and (ss & 1<<4) == 0):   # 4096 左移四位 判断“回液泵启动”        
            value5 = slave_1.get_values('block1', 0, 1)
            print 'open value5:', value5
            ss5 = int(str(value5[0]))
            slave_1.set_values('block1', 0 , (ss5 | 4096))
           
    ##  判断执行机构关闭操作
        if ((ss & 1) == 1):                                    # 判断“补光灯1关闭”
            value01 = slave_1.get_values('block1', 0, 1)
            print 'close value01: ', value01
            ss01 = int(str(value01[0]))
            slave_1.set_values('block1', 0, (ss01 & (~256)))
            
        if ((ss & 1<<1) == 1<<1):                             # 判断“补光灯2关闭”
            value02 = slave_1.get_values('block1', 0, 1)
            print 'close value02: ', value02
            ss02 = int(str(value02[0]))
            slave_1.set_values('block1', 0, (ss02 & (~(256<<1))))
            
        if ((ss & 1<<2) == 1<<2):                              # 判断“如气风机关闭”
            value03 = slave_1.get_values('block1', 0, 1)
            print 'close value03: ', value03
            ss03 = int(str(value03[0]))
            slave_1.set_values('block1', 0, (ss03 & (~(256<<2))))   
            
        if ((ss & 1<<3) == 1<<3):                             # 判断“供液泵关闭”
            value04 = slave_1.get_values('block1', 0, 1)
            print 'close value04: ', value04
            ss04 = int(str(value04[0]))
            slave_1.set_values('block1', 0, (ss04 & (~(256<<3)))) 
            
        if ((ss & 1<<4) == 1<<4):                             # 判断“回液泵关闭”
            value05 = slave_1.get_values('block1', 0, 1)
            print 'close value05: ', value05
            ss05 = int(str(value05[0]))
            slave_1.set_values('block1', 0, (ss05 & (~(256<<4))))        
            
            
        value0 = slave_1.get_values('block1', 0, 1) 
        print 'value0:', value0
            
        value_all = slave_1.get_values('block1', 0, 11)
        sys.stdout.write('done: values read: %s\r\n' % (str(value_all)))
        


        print '======================'
        time.sleep(0.5)


except:  
    print '============error==========='  
finally:  
    print '=========stop========'  
    server.stop()  

--结束END--

本文标题: 用Python实现modbus slav

本文链接: https://lsjlt.com/news/186183.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 用Python实现modbus slav
    最近在研究modbus master和modbus slave。项目要求实现modbus slave虚拟机来做功能测试。 网上modbus master相关的demo很多,但是modbus slave相关的demo很少。还是Google给...
    99+
    2023-01-31
    Python modbus slav
  • Modbus协议及基于Python的ModbusTCP客户端实现
    Modbus 协议是由 Modicon 公司(现在的施耐德电气 Schneider Electric )于1979年为使用可编程逻辑控制器(PLC)通信而推出,主要建立在物理串口、以太网 TCP/IP...
    99+
    2023-09-23
    python 开发语言
  • python使用pymodbus库进行modbus tcp通信
    使用pymodbus库进行modbus tcp通信 使用python解决工业通信问题是一个非常好的选择,python具有丰富的生态,可以轻松解决工业通信的各种问题。本篇主要介绍使用pymodbus...
    99+
    2023-09-04
    python 开发语言 制造
  • java如何利用socket通信实现Modbus-RTU通信协议
    小编给大家分享一下java如何利用socket通信实现Modbus-RTU通信协议,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ModbusModbus是一种串行...
    99+
    2023-06-14
  • java利用socket通信实现Modbus-RTU通信协议的示例代码
    Modbus Modbus是一种串行通信协议。Modbus 一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,...
    99+
    2024-04-02
  • [Python]用python实现批量/
      针对前面的代码 http://lxsym.blog.51cto.com/1364623/1065854,还存在的问题进行了改善:     1、去掉明文密码,通过交互输入密码     2、通过传参执行相关命令,增加灵活...
    99+
    2023-01-31
    批量 Python python
  • 用python实现Minecraft
    你有没有想过用python制作一个Minecraft在github上就有这样一个python程序(链接:https://github.com/zifan-wang/Minecraft.git),玩起来还像模像样的: 一.游戏截图 ...
    99+
    2023-09-18
    python 开发语言 Powered by 金山文档
  • 用 Python 实现 OPCUA
    用 Python 实现 OPCUA 简介 OPCUA(基于开放平台通信联盟,Open Platform Communications Unified Architecture)是一种用于工业自动化系统...
    99+
    2023-09-04
    python 网络协议
  • 用python实现ping
    这里使用的是最简易的方式,使用python的子进程管理模块,调用系统的ping命令,代码如下:import subprocess    import rep = subprocess.Popen(["ping.exe", 'google.c...
    99+
    2023-01-31
    python ping
  • 用 Python 实现 LDA
    原文出处:Jordan Barber LDA 是什么LDA 演练 需要用到的包导入文档清洗文档  分词移除停用词词干提取创建 document-term matrix应用 LDA 模型检查结果LDA 原理完整代码 隐含狄利克雷分布...
    99+
    2023-01-31
    Python LDA
  • 用Python实现Zabbix-API
        做运维的朋友应该知道,公司IDC机房经常有上架、下架、报修和报废的服务器。如果服务器数量很多的时候很容易造成监控遗漏。       大的互联网公司把监控系统和CMDB(资产管理系统|配置管理数据库系统)集成在一起,当上架一台新机...
    99+
    2023-01-30
    Python Zabbix API
  • 利用virtualenv实现Python
    由于开发需求,需要Python2和Python3共存,利用当下最流行的虚拟环境工具virtualenv实现。#安装virtualenv pip install virtualenv #使用virtualenv创建虚拟环境 virtualen...
    99+
    2023-01-31
    virtualenv Python
  • 使用 python 实现 Voronoi
    以下程序 使用python实现 Voronoi图from PIL import Image import random import math def generate_voronoi_diagram(width, height, n...
    99+
    2023-01-31
    python Voronoi
  • S7-200SMART 实现MODBUS TCP通信的具体方法示例(客户端读写+服务器响应)
    S7-200SMART 实现MODBUS TCP通信的具体方法示例(客户端读写+服务器响应) 前面和大家介绍了MODBUS TCP的基本使用方法,具体可参考以下链接中的内容: S7-200SMART...
    99+
    2023-09-11
    S7-200SMART MODBUS TCP通信 具体方法 客户端读写 服务器响应
  • 实现正确实现Python调用jar包
    博主最近在做python的项目,需要调用jar包,但是虽然参考了网上很多的教程,但是有一点是无法解决,那就是用python无法启动jvm虚拟机!!!这是所有工作的前提,重装了好多次也没有解决,最后请教大佬解决了。 问题的关键点在于:电脑的...
    99+
    2023-01-31
    正确 Python jar
  • Python基础 用Python实现时钟
    语言:Python IDE:Python.IDE编写时钟程序,要求根据时间动态更新 代码思路 需求:5个Turtle对象, 1个绘制外表盘+3个模拟表上针+1个输出文字 Step1:建立Turtle对象并初始化 Step2:静态表盘绘制...
    99+
    2023-01-31
    时钟 基础 Python
  • 用python实现调用jar包
    本文作者:botoo背景:python3.6 32位 + jre 32位 + windows64位首先环境搭建:安装jpype,安装的时候输入 pip install jpype1 (后面要加一个1)*一定要注意 jre和python的位数...
    99+
    2023-01-31
    python jar
  • 用python实现五子棋实例
    本文实例为大家分享了用python实现五子棋的具体代码,供大家参考,具体内容如下 # 制作一个棋盘 """ ++++++++++ ++++++++++ ++++++++++ ++++...
    99+
    2024-04-02
  • 使用python实现矩阵
    文章目录 矩阵__init____getitem____setitem__reshape__repr____add__ 与 __mul____matmul__LU分解转置利用LU分解求行列式 ...
    99+
    2023-10-25
    python 矩阵 算法 学习
  • 20190118-利用Python实现P
    1.利用Python实现Pig Latin字母游戏 “Pig Latin”是一个英语儿童文字改写游戏,整个游戏遵从下述规则:a. 元音字母是‘a’、‘e’、‘i’、‘o’、‘u’。字母‘y’在不是第一个字母的情况下,也被视作元音字母。其...
    99+
    2023-01-30
    Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作