我是靠谱客的博主 执着发卡,这篇文章主要介绍Python modbus rtu slave+mysql+随机数生产模拟数据,现在分享给大家,希望可以做个参考。

目的:
通过读取mysq’l rtu数据表地址数值,用python在原值得基础上加上随机数(0-9)
mysql数据
数据结构
在这里插入图片描述
数据列表(部分)
在这里插入图片描述

Python代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/env python # -*- coding: utf_8 -*- import sys import time import pymysql import json import random import modbus_tk import modbus_tk.defines as cst from modbus_tk import modbus_rtu import serial #PORT = 0 PORT = '/dev/ttyS1' mysqlhost="localhost" mysqluser="python" mysqlpassword="python" mysqlport=3306 mysqldatabase="python" mysqlcharset='utf8' #读取数据库触发条件规则 def mysql_rule(myserver,slaveid): db = pymysql.connect(mysqlhost, mysqluser, mysqlpassword, port=mysqlport, database=mysqldatabase, charset=mysqlcharset) cursor = db.cursor(cursor =pymysql.cursors.DictCursor) #设置游标类型为DictCursor以后,生成的就是字段名和值组成的键值对字典了 sql = "SELECT * FROM rtu where slave_id='"+str(slaveid)+"'" print(sql) try: cursor.execute(sql) results = cursor.fetchall() value=[] for row in results: value=[] slave_id = row['slave_id'] name = row['name'] addr = int(row['addr']) myvalue =int(row['value'])+random.randint(0,9) value.append(myvalue) print(str(slave_id)+" "+name+" "+str(addr)+" "+str(myvalue)) myslave = myserver.get_slave(slaveid) myslave.set_values(name,addr,myvalue) value = myslave.get_values(name,addr, 1) sys.stdout.write('done: values written: %srn' % (str(value)+' id'+str(row['id']))) # 打印结果 except: print("Error: unable to fecth data") cursor.close() db.close() 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,baudrate=9600)) try: logger.info("running...") logger.info("enter 'quit' for closing the server") server.start() slave_1 = server.add_slave(1) slave_1.add_block('0', cst.HOLDING_REGISTERS, 0, 100) while True: slave_id = 1 name = '0' address = int('0') mysql_rule(server,slave_id) time.sleep(1) # 休眠1秒 finally: server.stop() if __name__ == "__main__": main()

测试结果

复制代码
1
2
在这里插入代码片

在这里插入图片描述

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@bogon lqj]# python rtu.py RtuServer /dev/ttyS1 is opened running... enter 'quit' for closing the server SELECT * FROM rtu where slave_id='1' 1 0 0 66 done: values written: (66,) id1 1 0 1 68 done: values written: (68,) id2 1 0 2 63 done: values written: (63,) id3 1 0 3 64 done: values written: (64,) id4 1 0 4 60 done: values written: (60,) id5 1 0 5 68 done: values written: (68,) id6 1 0 7 69 done: values written: (69,) id7 1 0 8 66

最后

以上就是执着发卡最近收集整理的关于Python modbus rtu slave+mysql+随机数生产模拟数据的全部内容,更多相关Python内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部