python开发应用系统 究竟如何_如何为实时系统实现Python Gekko应用程序?

I want to connect a Python Gekko application to a real-time system. For each "cycle" of the controller there are three steps:

current values are read from the measurement devices

the Python application creates a new move plan based on the measurements and a predictive model

the move plan is re-inserted into the physical process

A visualization of the process is shown in this video or from this frame still.

For connection to real-time systems, the client must read and write values. What are standard communication protocols for connecting to process control systems such as a Distributed Control System (DCS) or Programmable Logic Controller (PLC) in Python?

解决方案

Python can read and write values from MODBUS, OPC, and with SQL or other protocols. Here is example code for Modbus (pymodbus) and OPC (OpenOPC).

OPC Example in Python

# #######################################

# OPC write

# #######################################

try:

# OPC connection

import OpenOPC

opc=OpenOPC.client()

b=opc.connect('Kepware.KEPServerEX.V5')

#opc.connect('Kepware.KEPServerEX.V5','localhost')

Load1_avg = opcm[0][0]

Load2_avg = opcm[0][1]

Load3_avg = opcm[0][2]

Load4_avg = opcm[0][3]

Load1_max = opcm[1][0]

Load2_max = opcm[1][1]

Load3_max = opcm[1][2]

Load4_max = opcm[1][3]

Load1_min = opcm[2][0]

Load2_min = opcm[2][1]

Load3_min = opcm[2][2]

Load4_min = opcm[2][3]

Load_T12 = opcm[3][0]

Load_T21 = opcm[3][1]

Load_T32 = opcm[3][2]

Load_T41 = opcm[3][3]

opc.write( ('Channel2.Device1.T_12_Load_AVG',Load1_avg) )

opc.write( ('Channel2.Device1.T_21_Load_AVG',Load2_avg) )

opc.write( ('Channel2.Device1.T_32_Load_AVG',Load3_avg) )

opc.write( ('Channel2.Device1.T_41_Load_AVG',Load4_avg) )

opc.write( ('Channel2.Device1.T_12_Load_MAX',Load1_max) )

opc.write( ('Channel2.Device1.T_21_Load_MAX',Load2_max) )

opc.write( ('Channel2.Device1.T_32_Load_MAX',Load3_max) )

opc.write( ('Channel2.Device1.T_41_Load_MAX',Load4_max) )

opc.write( ('Channel2.Device1.T_12_Load_MIN',Load1_min) )

opc.write( ('Channel2.Device1.T_21_Load_MIN',Load2_min) )

opc.write( ('Channel2.Device1.T_32_Load_MIN',Load3_min) )

opc.write( ('Channel2.Device1.T_41_Load_MIN',Load4_min) )

opc.write( ('Channel2.Device1.T_12_Load_INST',Load_T12) )

opc.write( ('Channel2.Device1.T_21_Load_INST',Load_T21) )

opc.write( ('Channel2.Device1.T_32_Load_INST',Load_T32) )

opc.write( ('Channel2.Device1.T_41_Load_INST',Load_T41) )

opc.close()

except:

print 'OPC communication failed'

pass

MODBUS Example in Python

# #######################################

# Modbus write

# #######################################

try:

# import the various server implementations

from pymodbus.client.sync import ModbusTcpClient as ModbusClient

from pymodbus.constants import Endian

from pymodbus.payload import BinaryPayloadBuilder

from pymodbus.client.sync import ModbusTcpClient as ModbusClient

from pymodbus.payload import BinaryPayloadDecoder

# initiate client

##client = ModbusClient('192.168.0.1')

client = ModbusClient(host='localhost', port=502)

slave_address = 0

# AVG Registers Modbus 40001,3,5,7

# MAX Registers Modbus 40009,11,13,15

# MIN Registers Modbus 40017,19,21,23

# INST Registers Modbus 40025,27,29,31

# registers

reg = 0

# AVG, MAX, MIN, INST

for i in range(0,4):

# Channels

for j in range(0,4):

builder = BinaryPayloadBuilder(endian=Endian.Little)

builder.add_32bit_float(opcm[j][i])

payload = builder.build()

result = client.write_registers(int(reg), payload, skip_encode=True, unit=int(slave_address))

# two registers for floating point numbers

reg = reg + 2

client.close()

except:

print 'Modbus communication failed'

pass

Besides MODBUS and OPC, there are also other text based file transfers and other methods of communication supported by companies although these are the most common in oil and gas industries where they have a Distributed Control System (DCS) or Programmable Logic Controller (PLC) that is for Scheduling and Data Aquisition (DAQ). There are about 140 instances of Gekko/APMonitor in industrial applications that I know about. Some of them are listed here.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值