main.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. from models.data_sender import Sender
  2. from models.batcher import Batcher
  3. from models.billet_trace_pusher import Trace_pusher
  4. from utils.s7data import S7data, S7Client
  5. from utils.mqttdata import Mqttdata, MqttClient
  6. from utils.logger import Logger
  7. from models.data_forward import *
  8. from models.parking import Parking
  9. from models.overhead_crane import Crane
  10. from models.data_checker import Checker
  11. from models.billet_stacks import Stack_manager
  12. from models.jiaoban import Banci
  13. from models.mysql_data import MysqlData, MysqlDataSizing
  14. from dbutils.pooled_db import PooledDB
  15. from models.s7_writer import S7Writer
  16. import pymysql, random, logging
  17. _debug = True
  18. ##############################################################
  19. # 日志配置
  20. logger_5 = Logger('5#')
  21. logger_5.file_on_with_rotation('logs/5#log.log')
  22. logger_5.screen_on(logging.INFO)
  23. logger_6 = Logger('6#')
  24. logger_6.file_on_with_rotation('logs/6#log.log')
  25. logger_6.screen_on(logging.INFO)
  26. logger_sender = Logger('sender')
  27. logger_sender.file_on_with_rotation('logs/sender_log.log')
  28. # logger_sender.screen_on()
  29. logger_trace = Logger('trace')
  30. logger_trace.file_on_with_rotation('logs/trace_log.log')
  31. logger_trace.screen_on(logging.INFO)
  32. logger_mysql = Logger('mysql')
  33. logger_mysql.file_on_with_rotation('logs/mysql.log')
  34. # logger_trace.screen_on()
  35. ##############################################################
  36. # S7数据源配置
  37. s7_5 = S7Client()
  38. s7_5.connect('192.168.1.215', 0, 0)
  39. data_5 = S7data(r"conf/5#nodes.csv")
  40. data_5.set_S7Client(s7_5)
  41. data_5.set_logger(logger_5)
  42. data_5.auto_update_group()
  43. logger_5.info('[PREPARE]5#机PLC连接成功')
  44. s7_6 = S7Client()
  45. s7_6.connect('192.168.1.216', 0, 0)
  46. data_6 = S7data(r"conf/6#nodes.csv")
  47. data_6.set_S7Client(s7_6)
  48. data_6.set_logger(logger_6)
  49. data_6.auto_update_group()
  50. logger_6.info('[PREPARE]6#机PLC连接成功')
  51. ##############################################################
  52. # MQTT数据源配置
  53. _debug_random_str = ""
  54. random_char_lib = "abcdefghijklmnopqrstuvwxyz0123456789"
  55. if _debug:
  56. _debug_random_str = '_debug_' + ''.join(random.choices(random_char_lib, k = 10))
  57. mqtt_mes_clientid = 'python-mqtt-mes-billet' + _debug_random_str
  58. mqtt_mes = MqttClient(mqtt_mes_clientid, 'readonly', '1qazxsw@')
  59. mqtt_mes.connect('192.168.12.201', 1883)
  60. mqtt_mes.loop_start()
  61. data_mes = Mqttdata()
  62. data_mes.set_mqtt_client(mqtt_mes)
  63. logger_5.info('[PREPARE]与MES使用MQTT连接成功')
  64. logger_6.info('[PREPARE]与MES使用MQTT连接成功')
  65. mqtt_web_clientid = 'python-mqtt-web-billet' + _debug_random_str
  66. mqtt_web = MqttClient(mqtt_web_clientid)
  67. mqtt_web.connect('192.168.0.119', 1883)
  68. mqtt_web.loop_start()
  69. data_web = Mqttdata()
  70. data_web.set_mqtt_client(mqtt_web)
  71. logger_sender.info('[PREPARE]与WEB业务平台使用MQTT连接成功')
  72. ##############################################################
  73. # MYSQL数据库连接
  74. db = pymysql.connect(host='localhost', port=3306, user='root', password='1qaz2wsx@..', database='steel_production_db')
  75. nuo_db = PooledDB(
  76. creator=pymysql,
  77. maxconnections=5,
  78. mincached=1,
  79. blocking=True,
  80. host='192.168.12.201',
  81. user='gpszh',
  82. password='lg123456',
  83. database='nuo_scheduling_lm2',
  84. charset='utf8mb4'
  85. )
  86. data_nuo = MysqlData(nuo_db, logger_mysql)
  87. qbc_db = PooledDB(
  88. creator=pymysql,
  89. maxconnections=5,
  90. mincached=1,
  91. blocking=True,
  92. host='192.168.1.211',
  93. user='zgzt',
  94. password='zgzt1234',
  95. database='steelmaking_data',
  96. charset='utf8mb4'
  97. )
  98. data_qbc = MysqlDataSizing(qbc_db, logger_mysql)
  99. ##############################################################
  100. # 数据发送服务
  101. sender = Sender(logger_sender)
  102. if _debug:
  103. sender.http_flag = False
  104. sender.mysql_flag = False
  105. else:
  106. sender.set_mqtt_client(mqtt_web)
  107. sender.set_mysql_client(db)
  108. sender.mysql_flag = True
  109. ##############################################################
  110. # 分炉分坯服务
  111. flfp_5 = Batcher(data_mes, data_5, data_web, "5", logger_5, sender, data_nuo, data_qbc)
  112. flfp_6 = Batcher(data_mes, data_6, data_web, "6", logger_6, sender, data_nuo, data_qbc)
  113. position_5 = [10650, 11600, 12830, 13924, 15237, 16440, 17757, 18935]
  114. position_6 = [8084, 9303, 10618, 11998, 13040, 14409, 15584, 16853]
  115. pusher_5 = Trace_pusher(flfp_5.batch_billet.output_billet_queues, data_5, logger_5, sender, position_5, True)
  116. pusher_6 = Trace_pusher(flfp_6.batch_billet.output_billet_queues, data_6, logger_6, sender, position_6, hostmove_flag=True)
  117. ##############################################################
  118. # 堆垛管理服务
  119. stack_manager = Stack_manager()
  120. stack_manager.add_stack('501', '5', data_5)
  121. stack_manager.add_stack('601', '6', data_5, -170)
  122. ##############################################################
  123. # 停车位检测服务
  124. parking = Parking(data_5, sender)
  125. ##############################################################
  126. # 天车跟踪服务
  127. crane = Crane(data_5, pusher_5, pusher_6, parking, stack_manager, sender, logger_trace)
  128. ##############################################################
  129. # 数据警报服务
  130. checker = Checker(data_5, data_6, logger_sender)
  131. if not _debug:
  132. checker.async_start_check()
  133. ##############################################################
  134. # 自动交班服务
  135. banci_5 = Banci(data_5, sender, logger_5, '5')
  136. banci_6 = Banci(data_6, sender, logger_6, '6')
  137. ##############################################################
  138. # 数据转发服务
  139. forward_5 = Forward(data_5, sender, True, '5')
  140. forward_5.start_auto_forward()
  141. forward_6 = Forward(data_6, sender, False, '6')
  142. forward_6.start_auto_forward()
  143. ##############################################################
  144. # PLC写入服务
  145. if not _debug:
  146. s7_5w = S7Client()
  147. s7_5w.connect('192.168.1.215', 0, 0)
  148. s7_writer = S7Writer(s7_5w)
  149. s7_writer.add_task("dint", 420, 34, flfp_5.batch_heat.current_heat_point)
  150. s7_writer.loop_start()