推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

Python在智能IO模块上的应用

更新时间:2019-12-21 11:28:09 大小:1M 上传用户:songhuahua查看TA发布的资源 标签:python智能io模块 下载积分:1分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

Python语言以其功能强大的扩展模块、易于理解的编程方式,逐步被应用于工业控制领域,成为主流编程语言之一。因此,通过Python编写程序来实现RS485通信,以完成对智能模块的控制。


部分文件列表

文件名 大小
Python在智能IO模块上的应用.pdf 1M

部分页面预览

(完整内容请下载后查看)
Telecom Power Technology  
2019 年 3 月 25 日第 36 卷第 3 期  
Mar. 25,2019,Vol. 36 No. 3  
doi:10.19399/j.cnki.tpt.2019.03.035  
设计应用  
Python 在智能 IO 模块上的应用  
万伟军  
(江苏联合职业技术学院 无锡机电分院,江苏 无锡 214000)  
摘要:  
Python 语言以其功能强  
大的扩展模块、易于理解的编  
程方式,逐步被应用于工业控制领域,成为主流程语  
言之一。因此,通 过 Python 写程序来实现 RS485 通 信,以完成对智能模块的控制。  
关键词:  
智能 IO 模块;Python;modbus_tk 库  
Application of Python in Intelligent IO Module  
WAN Wei-jun  
(Wuxi Electrical and Mechanical Branch of Jiangsu Union Technical Institute,Wuxi 214000,China)  
Abstract:Python language,with its powerful expansion module and easy-to-understand programming  
method,has gradually been applied in the field of industrial control and become one of the mainstream programming  
languages. Therefore,RS485 communication can be easily realized by Python programming to complete the control of  
intelligent module.  
Key words:intelligent IO module;Python;modbus_tk Library  
可实现网络通信、界面显示等功能。Python 功能库中  
可实现的 Modbus 信协议有 Modbus_tkPymodbus  
Minimalmodbus本文使用 Modbus_tk 实现上位  
0ꢀ引ꢀ言  
目前,工业网络通信程序多采用 C# 编写,以实现  
上位机与智能模块建立的通信。Python 语言具备简单  
易懂的编写模式和功能齐全的扩展库,易于实现工业  
网络通信程序的编写。  
机与智能模块间的数据交换 [1]  
2.1ꢀModbus_tk 库中的函数分析  
Modbus_tk 是一个全功能 Modbus Python 扩  
通过调用内部函数实现 Modbus Python  
Modbus_tk 库函数与 Modbus 协议部分功能码之间  
的对应关系,如表 1 所示。  
1ꢀ智能 IO 模块的介绍  
智能 IO 模块采用意法半导体公司的 STM32F407  
为控制核可实现 16 输入信号采集和 7 输  
出控输入 / 出电路采用 EL357NC 行信号隔  
离,以保证模块工作稳定。同时,智能 IO 模块采用  
MAX1487 芯片实现串口通信,通过 ARM 程序实现主  
从设备间的 RS485 通信。该智能模块可代替 PLC 的基  
本功能,通过内部 ARM 较灵活的程序开发功能实现设  
备的智能化,并降低设备制造成本。  
通信本质上,Modbus 是一种串口通信,主从设备  
间进行通信前必须建立链接。使用 Modbus_tk 库文件  
建立通信关系的程序,如下:  
def connect():  
logger=modbus_tk.utils.create_logger("console")  
master=modbus_rtu.RtuMaster(serial.Serial(port="C  
OM3",baudrate=19200,bytesize=8,parity='N',stopbits=1,xo  
nxoff=0))  
2ꢀPython 控制程序的编写  
master.set_timeout(5.0)  
Python语言具有功能强大的第三方开发的库文件,  
1Modbus 功能码与 Python Modbus_tk 库函数对照表  
Modbus_tk 函数  
Modbus 功能码  
0X01  
功能  
read_coils  
读线圈  
0X02  
read_discrete_inputs  
read_holding_registers  
read_input_registers  
write_single_coil  
读离散输入  
读乘法寄存器  
读输入寄存器  
写单一线圈  
写单一寄存器  
写多个线圈  
写多寄存器  
0X03  
0X04  
0X05  
0X06  
write_single_register  
write_multiple_coils  
write_multiple_registers  
0X0F  
0X10  
收稿日期:  
2018-12-11  
作者简介:  
万伟军(1980-),男,江苏无锡人,本科,讲师,  
主要研究方向为机电设备研制、机电课程开发。  
· 97 ·  
Telecom Power Technology  
ꢀ 2019 年 3 月 25 日第 36 卷第 3 期  
Mar. 25,2019,Vol. 36 No. 3  
master.set_verbose(True)  
2.3ꢀ输出控制程序举例  
logger.info("connected")  
为实现交互界面,输出控制程序可采用 tkinter 的  
Checkbutton 控件。控制程序如下:  
global y0  
此程序中,通过 modbus_rtu.RtuMaster()函数设  
定了串口、波特率及字节长度等。执行此程序,主从  
设备之间建立了通信关系,后续程序只需调用功能函  
y0=IntVar() # 创建变量 y0  
数就能实现对应功能 [2]  
def y_out(): # 输处控制程序函数 y_out()  
connect() # 使用 connect() 函数建立主从设备通信  
链接  
2.2ꢀ输入信号检测与显示程序举例  
为 实 现 输 入 信 号 的 显 示 与 输 出 控 制, 可 使 用  
Python tkinter 进行 GUI 开发。为实现输入信号显示  
与标签,可使用 Label 控件。程序如下:  
photo_r=PhotoImage(file="r.gif")  
logger.info(master.execute(1,cst.WRITE_SINGLE_  
COIL,0, output_value=y0.get())  
# 创建复选按钮 ck,并设定其属性,y0 变量存储  
复选按钮设定值,同时调用 y_out 函数  
ck=Checkbutton(text="y0",variable=y0,command=y_  
out)  
photo_y=PhotoImage(file="y.gif") # 加载显示图片  
lab0=Label(root,text="X0")  
lab0.place(x=10,y=10) # 创建 X0 标签文字  
label_x0=Label(root,image=photo_y)  
label_x0.place(x=10,y=30) #X0 无输入时,显示黄  
色指示灯  
ck.place(x=10,y=120)  
logger.info(master.execute(1,cst.WRITE_  
SINGLE_COIL,0,output_value=y0.get())) 语  
中,  
def input_x(): # 输入检测与显示程序函数 input_x()  
connect() # 使用 connect() 函数建立主从设备通信  
链接  
master.execute 数内部参数的具体含义2所示。  
master.execute(1, cst. WRITE_SINGLE_COIL, 0, output_value=y0.get () )  
内置函数 模块地址  
功能指令  
单线圈地址 单线圈状态值  
logger.info(master.execute(1,cst.READ_DISCRETE_  
INPUTS,0,16))  
2master.execute()函数内部参数的具体含义图  
in_x=master.execute(1,cst.READ_DISCRETE_  
INPUTS,0,16)  
模块地址由每个智能 IO 模块的内部 ARM 设定。  
本功能指令是执行 Modbus 内部单线圈状态设定功能。  
单线圈地址确定了智能 IO 模块的输出口位置y0 口。  
单线圈状态值由复选按钮设定值决定。复选按钮被选  
中,设定值为 1;复选按钮未被选中,设定值为 0。执  
行此程序,当 Python 编写的 GUI 界面中的复选按钮被  
If in_x[0]==1: # 判断 X0 是否有输入,有输入显  
示红灯,没输入显示黄灯  
label_x0.config(imag=photo_r) # 显示红灯  
else:  
label_x0.config(imag=photo_y) # 显示黄灯  
master.execute(1,cst.READ_DISCRETE_  
INPUTS,0,16) master.execute函数内部参  
数的具体含义,如图 1 所示。  
选中时,智能 IO 模块的 y0 口导通 [3]  
3ꢀ结ꢀ论  
本文采用 Python Modbus_tk 库实现智能 IO 模块  
与上位机之间的数据通信,语言简洁易懂,且 Python 扩  
展库功能强大,可简单实现各种工业控制功能。  
master.execute (1, cst. READ_DISCRETE_INPUTS, 0, 16)  
内置函数 模块地址 功能指令  
离散输入起始地址  
偏移量  
参考文献:  
1master.execute()函数内部参数的具体含义  
模块地址由每个智能 IO 模块的内部 ARM 设定。  
本功能指令是读取 Modbus 离散输入量,读取地址从  
0 共读取 16 为保证实时读取输入数  
据,程序必须间隔一定时间执行 input_x()函数。函  
数调用可采用多线程定时方式,也可使用 Python 的  
APScheduler 定时任务框架。  
[1] 李文名 . 相关 Modbus ASCIIRTU TCP 协议(上)  
[N]. 电子报,2018-10-076.  
[2] 李文名 . 相关 Modbus ASCIIRTU TCP 协议(下)  
[N]. 电子报,2018-10-146.  
[3] 金海琴,陈ꢀ兴,翟林鹏 . 基于 Modbus 协议的串行通  
信的应用 [J]. 电子设计工程,2013218):157-160.  
· 98 ·  

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载