【问题标题】:How do you implement a Python Gekko application for real time systems? [closed]您如何为实时系统实现 Python Gekko 应用程序? [关闭]
【发布时间】:2019-07-18 00:41:12
【问题描述】:

我想将 Python Gekko 应用程序连接到实时系统。对于控制器的每个“循环”,都有三个步骤:

  1. 从测量设备中读取当前值
  2. Python 应用程序根据测量结果和预测模型创建新的移动计划
  3. 移动计划被重新插入到物理过程中

过程的可视化显示在this video 或从该帧静止。

为了连接到实时系统,客户端必须读取和写入值。在 Python 中连接分布式控制系统 (DCS) 或可编程逻辑控制器 (PLC) 等过程控制系统的标准通信协议是什么?

【问题讨论】:

    标签: python gekko


    【解决方案1】:

    Python 可以从 MODBUS、OPC 以及 SQL 或其他协议读取和写入值。这是 Modbus (pymodbus) 和 OPC (OpenOPC) 的 example code

    Python 中的 OPC 示例

    # #######################################
    # 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
    

    Python 中的 MODBUS 示例

    # #######################################
    # 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
    

    除了 MODBUS 和 OPC,还有其他基于文本的文件传输和其他公司支持的通信方法,尽管这些在石油和天然气行业中最常见,它们拥有分布式控制系统 (DCS) 或可编程逻辑控制器 ( PLC),用于调度和数据采集(DAQ)。据我所知,工业应用中大约有 140 个 Gekko/APMonitor 实例。其中一些是listed here

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 2021-04-06
      • 2017-09-01
      • 2011-07-09
      • 2016-08-11
      • 1970-01-01
      相关资源
      最近更新 更多