如何为实时系统实现Python Gekko应用程序?

如何为实时系统实现Python Gekko应用程序?,python,gekko,Python,Gekko,我想将Python Gekko应用程序连接到实时系统。对于控制器的每个“循环”,有三个步骤: 从测量装置读取电流值 Python应用程序基于度量和预测模型创建新的移动计划 移动计划将重新插入到物理进程中 该过程的可视化显示在此框架中或从该框架中 要连接到实时系统,客户端必须读取和写入值。用于连接过程控制系统(如Python中的分布式控制系统(DCS)或可编程逻辑控制器(PLC))的标准通信协议是什么?Python可以读取和写入MODBUS、OPC以及SQL或其他协议中的值。以下是Modbus(

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

  • 从测量装置读取电流值
  • Python应用程序基于度量和预测模型创建新的移动计划
  • 移动计划将重新插入到物理进程中
  • 该过程的可视化显示在此框架中或从该框架中


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

    Python可以读取和写入MODBUS、OPC以及SQL或其他协议中的值。以下是Modbus(pymodbus)和OPC(OpenOPC)的示例

    Python中的OPC示例

    ########################################
    #OPC写入
    # #######################################
    尝试:
    #OPC连接
    导入OpenOPC
    opc=OpenOPC.client()
    b=opc.connect('Kepware.KEPServerEX.V5')
    #opc.connect('Kepware.KEPServerEX.V5','localhost')
    载荷1_平均值=opcm[0][0]
    载荷2_平均值=opcm[0][1]
    载荷3_平均值=opcm[0][2]
    载荷4_平均值=opcm[0][3]
    载荷1_max=opcm[1][0]
    载荷2_max=opcm[1][1]
    载荷3_max=opcm[1][2]
    载荷4_max=opcm[1][3]
    载荷1_min=opcm[2][0]
    荷载2_min=opcm[2][1]
    载荷3_min=opcm[2][2]
    载荷4_min=opcm[2][3]
    加载_T12=opcm[3][0]
    荷载=opcm[3][1]
    荷载=opcm[3][2]
    荷载=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()
    除:
    打印“OPC通信失败”
    通过
    
    Python中的MODBUS示例

    ########################################
    #Modbus写入
    # #######################################
    尝试:
    #导入各种服务器实现
    从pymodbus.client.sync导入modbuscpclient作为ModbusClient
    从pymodbus.constants导入Endian
    从pymodbus.payload导入二进制PayloadBuilder
    从pymodbus.client.sync导入modbuscpclient作为ModbusClient
    从pymodbus.payload导入二进制PayloadDecoder
    #启动客户端
    ##client=ModbusClient('192.168.0.1')
    client=ModbusClient(host='localhost',port=502)
    从机地址=0
    #平均寄存器Modbus 40001,3,5,7
    #最大寄存器Modbus 40009,11,13,15
    #最小寄存器Modbus 40017,19,21,23
    #仪表寄存器Modbus 40025,27,29,31
    #登记册
    reg=0
    #平均值,最大值,最小值,仪表
    对于范围(0,4)内的i:
    #渠道
    对于范围(0,4)内的j:
    builder=BinaryPayloadBuilder(endian=endian.Little)
    builder.add_32位浮点(opcm[j][i])
    payload=builder.build()
    结果=客户端。写入寄存器(int(reg),有效负载,跳过编码=真,单位=int(从机地址))
    #两个浮点数寄存器
    reg=reg+2
    client.close()
    除:
    打印“Modbus通信失败”
    通过
    
    除MODBUS和OPC外,还有其他基于文本的文件传输和公司支持的其他通信方法,尽管这些方法在石油和天然气行业中最为常见,因为这些行业具有分布式控制系统(DCS)或可编程逻辑控制器(PLC),用于调度和数据采集(DAQ)。据我所知,在工业应用中,Gekko/APMonitor大约有140个实例。其中一些是