Simulation Core
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

541 lines
18 KiB

  1. module UnitySignalsModule
  2. use UnitySignalVariables
  3. use SimulationVariables
  4. use RedisInterface
  5. contains
  6. subroutine UnitySignalsFromJson(jsonfile)
  7. type(json_value),pointer :: parent
  8. type(json_core) :: json
  9. type(json_value),pointer :: p,pval
  10. type(json_file)::jsonfile
  11. logical::found
  12. integer :: i
  13. call jsonfile%get('UnitySignals.MudBucket',data%State%unitySignals%MudBucket,found)
  14. if ( .not. found ) call logg(4,"Not found: unitySignals%MudBucket")
  15. call jsonfile%get('UnitySignals.Elevator',data%State%unitySignals%Elevator,found)
  16. if ( .not. found ) call logg(4,"Not found: unitySignals%Elevator")
  17. call jsonfile%get('UnitySignals.FillupHead',data%State%unitySignals%FillupHead,found)
  18. if ( .not. found ) call logg(4,"Not found: unitySignals%FillupHead")
  19. call jsonfile%get('UnitySignals.Ibop',data%State%unitySignals%Ibop,found)
  20. if ( .not. found ) call logg(4,"Not found: unitySignals%Ibop")
  21. call jsonfile%get('UnitySignals.Kelly',data%State%unitySignals%Kelly,found)
  22. if ( .not. found ) call logg(4,"Not found: unitySignals%Kelly")
  23. call jsonfile%get('UnitySignals.MouseHole',data%State%unitySignals%MouseHole,found)
  24. if ( .not. found ) call logg(4,"Not found: unitySignals%MouseHole")
  25. call jsonfile%get('UnitySignals.OperationCondition',data%State%unitySignals%OperationCondition,found)
  26. if ( .not. found ) call logg(4,"Not found: unitySignals%OperationCondition")
  27. call jsonfile%get('UnitySignals.SafetyValve',data%State%unitySignals%SafetyValve,found)
  28. if ( .not. found ) call logg(4,"Not found: unitySignals%SafetyValve")
  29. call jsonfile%get('UnitySignals.operation',data%State%unitySignals%operation,found)
  30. if ( .not. found ) call logg(4,"Not found: unitySignals%operation")
  31. call jsonfile%get('UnitySignals.Slips',data%State%unitySignals%Slips,found)
  32. if ( .not. found ) call logg(4,"Not found: unitySignals%Slips")
  33. call jsonfile%get('UnitySignals.Slips_S',data%State%unitySignals%Slips_S,found)
  34. if ( .not. found ) call logg(4,"Not found: unitySignals%Slips_S")
  35. call jsonfile%get('UnitySignals.Swing',data%State%unitySignals%Swing,found)
  36. if ( .not. found ) call logg(4,"Not found: unitySignals%Swing")
  37. call jsonfile%get('UnitySignals.Swing_S',data%State%unitySignals%Swing_S,found)
  38. if ( .not. found ) call logg(4,"Not found: unitySignals%Swing_S")
  39. call jsonfile%get('UnitySignals.TdsBackupClamp',data%State%unitySignals%TdsBackupClamp,found)
  40. if ( .not. found ) call logg(4,"Not found: unitySignals%TdsBackupClamp")
  41. call jsonfile%get('UnitySignals.TdsSpine',data%State%unitySignals%TdsSpine,found)
  42. if ( .not. found ) call logg(4,"Not found: unitySignals%TdsSpine")
  43. call jsonfile%get('UnitySignals.TdsSwing',data%State%unitySignals%TdsSwing,found)
  44. if ( .not. found ) call logg(4,"Not found: unitySignals%TdsSwing")
  45. call jsonfile%get('UnitySignals.TdsTong',data%State%unitySignals%TdsTong,found)
  46. if ( .not. found ) call logg(4,"Not found: unitySignals%TdsTong")
  47. call jsonfile%get('UnitySignals.Tong',data%State%unitySignals%Tong,found)
  48. if ( .not. found ) call logg(4,"Not found: unitySignals%Tong")
  49. call jsonfile%get('UnitySignals.Tong_S',data%State%unitySignals%Tong_S,found)
  50. if ( .not. found ) call logg(4,"Not found: unitySignals%Tong_S")
  51. call jsonfile%get('UnitySignals.TdsConnectionModes',data%State%unitySignals%TdsConnectionModes,found)
  52. if ( .not. found ) call logg(4,"Not found: unitySignals%TdsConnectionModes")
  53. call jsonfile%get('UnitySignals.TdsElevatorModes',data%State%unitySignals%TdsElevatorModes,found)
  54. if ( .not. found ) call logg(4,"Not found: unitySignals%TdsElevatorModes")
  55. end subroutine
  56. subroutine Set_TdsElevatorModes(v)
  57. implicit none
  58. integer , intent(in) :: v
  59. #ifdef ExcludeExtraChanges
  60. if(data%State%unitySignals%TdsElevatorModes == v) return
  61. #endif
  62. data%State%unitySignals%TdsElevatorModes = v
  63. !**call TdsElevatorModesEnum%OnTdsElevatorModesChange%RunAll()
  64. end subroutine
  65. integer function Get_TdsElevatorModes()
  66. implicit none
  67. Get_TdsElevatorModes = data%State%unitySignals%TdsElevatorModes
  68. end function
  69. subroutine Set_Ibop_Install()
  70. implicit none
  71. call Set_Ibop(IBOP_INSTALL)
  72. end subroutine
  73. subroutine Set_Ibop_Remove()
  74. implicit none
  75. call Set_Ibop(IBOP_REMOVE)
  76. end subroutine
  77. subroutine Set_Tong(v)
  78. implicit none
  79. integer , intent(in) :: v
  80. if(data%State%unitySignals%Tong == v) return
  81. data%State%unitySignals%Tong = v
  82. if(print_log) print*, 'Tong=', data%State%unitySignals%Tong
  83. if(data%State%unitySignals%Tong==TONG_MAKEUP_BEGIN) call publishMessageToChannel("TONG_MAKEUP_BEGIN")
  84. if(data%State%unitySignals%Tong==TONG_BREAKOUT_BEGIN) call publishMessageToChannel("TONG_BREAKOUT_BEGIN")
  85. !**call data%State%unitySignals%OnTongChange%RunAll()
  86. end subroutine
  87. integer function Get_Tong()
  88. implicit none
  89. Get_Tong = data%State%unitySignals%Tong
  90. end function
  91. subroutine Set_TdsTong(v)
  92. implicit none
  93. integer , intent(in) :: v
  94. #ifdef ExcludeExtraChanges
  95. if(data%State%unitySignals%TdsTong == v) return
  96. #endif
  97. data%State%unitySignals%TdsTong = v
  98. #ifdef deb
  99. if(print_log) print*, 'TdsTong=', data%State%unitySignals%TdsTong
  100. #endif
  101. !**call data%State%unitySignals%OnTdsTongChange%RunAll()
  102. end subroutine
  103. integer function Get_TdsTong()
  104. implicit none
  105. Get_TdsTong = data%State%unitySignals%TdsTong
  106. end function
  107. subroutine Set_TdsSwing(v)
  108. implicit none
  109. integer , intent(in) :: v
  110. #ifdef ExcludeExtraChanges
  111. if(data%State%unitySignals%TdsSwing == v) return
  112. #endif
  113. data%State%unitySignals%TdsSwing = v
  114. #ifdef deb
  115. if(print_log) print*, 'TdsSwing=', data%State%unitySignals%TdsSwing
  116. #endif
  117. !**call data%State%unitySignals%OnTdsSwingChange%RunAll()
  118. end subroutine
  119. integer function Get_TdsSwing()
  120. implicit none
  121. Get_TdsSwing = data%State%unitySignals%TdsSwing
  122. end function
  123. subroutine Set_TdsSpine(v)
  124. implicit none
  125. integer , intent(in) :: v
  126. #ifdef ExcludeExtraChanges
  127. if(data%State%unitySignals%TdsSpine == v) return
  128. #endif
  129. data%State%unitySignals%TdsSpine = v
  130. #ifdef deb
  131. if(print_log) print*, 'TdsSpine=', data%State%unitySignals%TdsSpine
  132. #endif
  133. !**call data%State%unitySignals%OnTdsSpineChange%RunAll()
  134. end subroutine
  135. integer function Get_TdsSpine()
  136. implicit none
  137. Get_TdsSpine = data%State%unitySignals%TdsSpine
  138. end function
  139. subroutine Set_TdsBackupClamp(v)
  140. implicit none
  141. integer , intent(in) :: v
  142. #ifdef ExcludeExtraChanges
  143. if(data%State%unitySignals%TdsBackupClamp == v) return
  144. #endif
  145. data%State%unitySignals%TdsBackupClamp = v
  146. #ifdef deb
  147. if(print_log) print*, 'TdsBackupClamp=', data%State%unitySignals%TdsBackupClamp
  148. #endif
  149. !**call data%State%unitySignals%OnTdsBackupClampChange%RunAll()
  150. end subroutine
  151. integer function Get_TdsBackupClamp()
  152. implicit none
  153. Get_TdsBackupClamp = data%State%unitySignals%TdsBackupClamp
  154. end function
  155. subroutine Set_Swing(v)
  156. implicit none
  157. integer , intent(in) :: v
  158. #ifdef ExcludeExtraChanges
  159. if(data%State%unitySignals%Swing == v) return
  160. #endif
  161. data%State%unitySignals%Swing = v
  162. #ifdef deb
  163. if(print_log) print*, 'Swing=', data%State%unitySignals%Swing
  164. #endif
  165. !**call data%State%unitySignals%OnSwingChange%RunAll()
  166. end subroutine
  167. integer function Get_Swing()
  168. implicit none
  169. Get_Swing = data%State%unitySignals%Swing
  170. end function
  171. !//TODO: apparently every thing is started here for slips
  172. subroutine Set_Slips(v)
  173. implicit none
  174. integer , intent(in) :: v
  175. if(data%State%unitySignals%Slips == v) return
  176. data%State%unitySignals%Slips = v
  177. if(print_log) print*, 'Slips=', data%State%unitySignals%Slips
  178. if(v==SLIPS_SET_BEGIN) call publishMessageToChannel("SLIPS_SET_BEGIN")
  179. if(v==SLIPS_UNSET_BEGIN) call publishMessageToChannel("SLIPS_UNSET_BEGIN")
  180. !**call data%State%unitySignals%OnSlipsChange%RunAll()
  181. end subroutine
  182. integer function Get_Slips()
  183. implicit none
  184. Get_Slips = data%State%unitySignals%Slips
  185. end function
  186. subroutine Set_Operation(i)
  187. implicit none
  188. integer, intent (in) :: i
  189. data%State%unitySignals%operation = i
  190. end subroutine
  191. subroutine Set_SafetyValve(v)
  192. implicit none
  193. integer , intent(in) :: v
  194. #ifdef ExcludeExtraChanges
  195. if(data%State%unitySignals%SafetyValve == v) return
  196. #endif
  197. data%State%unitySignals%SafetyValve = v
  198. #ifdef deb
  199. if(data%State%unitySignals%SafetyValve == SAFETY_VALVE_NEUTRAL) then
  200. if(print_log) print*, 'SafetyValve=SAFETY_VALVE_NEUTRAL'
  201. else if (data%State%unitySignals%SafetyValve == SAFETY_VALVE_INSTALL) then
  202. if(print_log) print*, 'SafetyValve=SAFETY_VALVE_INSTALL'
  203. else if (data%State%unitySignals%SafetyValve == SAFETY_VALVE_INSTALL) then
  204. if(print_log) print*, 'SafetyValve=SAFETY_VALVE_REMOVE'
  205. endif
  206. #endif
  207. !**call data%State%unitySignals%OnSafetyValveChange%RunAll()
  208. end subroutine
  209. integer function Get_SafetyValve()
  210. implicit none
  211. Get_SafetyValve = data%State%unitySignals%SafetyValve
  212. end function
  213. subroutine Set_SafetyValve_Install()
  214. implicit none
  215. call Set_SafetyValve(SAFETY_VALVE_INSTALL)
  216. end subroutine
  217. subroutine Set_SafetyValve_Remove()
  218. implicit none
  219. call Set_SafetyValve(SAFETY_VALVE_REMOVE)
  220. end subroutine
  221. subroutine Set_OperationCondition(v)
  222. ! use CKellyEnumVariables
  223. implicit none
  224. integer , intent(in) :: v
  225. #ifdef ExcludeExtraChanges
  226. if(data%State%unitySignals%OperationCondition == v) return
  227. #endif
  228. data%State%unitySignals%OperationCondition = v
  229. #ifdef deb
  230. if(print_log) print*, 'OperationCondition=', data%State%unitySignals%OperationCondition
  231. #endif
  232. !**call data%State%unitySignals%OnOperationConditionChange%RunAll()
  233. !**call data%State%unitySignals%OnOperationConditionChangeInt%RunAll(data%State%unitySignals%OperationCondition)
  234. end subroutine
  235. integer function Get_OperationCondition()
  236. implicit none
  237. Get_OperationCondition = data%State%unitySignals%OperationCondition
  238. end function
  239. subroutine Evaluate_OperationCondition()
  240. implicit none
  241. end subroutine
  242. subroutine Set_MouseHole(v)
  243. implicit none
  244. integer , intent(in) :: v
  245. #ifdef ExcludeExtraChanges
  246. if(data%State%unitySignals%MouseHole == v) return
  247. #endif
  248. !call sleep(2)
  249. data%State%unitySignals%MouseHole = v
  250. #ifdef deb
  251. if(print_log) print*, 'MouseHole=', data%State%unitySignals%MouseHole
  252. #endif
  253. !**call data%State%unitySignals%OnMouseHoleChange%RunAll()
  254. end subroutine
  255. integer function Get_MouseHole()
  256. implicit none
  257. Get_MouseHole = data%State%unitySignals%MouseHole
  258. end function
  259. subroutine Set_Kelly(v)
  260. implicit none
  261. integer , intent(in) :: v
  262. #ifdef ExcludeExtraChanges
  263. if(data%State%unitySignals%Kelly == v) return
  264. #endif
  265. data%State%unitySignals%Kelly = v
  266. #ifdef deb
  267. if(print_log) print*, 'Kelly=', data%State%unitySignals%Kelly
  268. #endif
  269. !**call data%State%unitySignals%OnKellyChange%RunAll()
  270. end subroutine
  271. integer function Get_Kelly()
  272. implicit none
  273. Get_Kelly = data%State%unitySignals%Kelly
  274. end function
  275. subroutine Set_Ibop(v)
  276. implicit none
  277. integer , intent(in) :: v
  278. #ifdef ExcludeExtraChanges
  279. if(data%State%unitySignals%Ibop == v) return
  280. #endif
  281. data%State%unitySignals%Ibop = v
  282. #ifdef deb
  283. if(print_log) print*, 'Ibop=', data%State%unitySignals%Ibop
  284. #endif
  285. !**call data%State%unitySignals%OnIbopChange%RunAll()
  286. end subroutine
  287. integer function Get_Ibop()
  288. implicit none
  289. Get_Ibop = data%State%unitySignals%Ibop
  290. end function
  291. subroutine Set_FillupHead(v)
  292. use CManifolds, only: ToggleFillupHead
  293. implicit none
  294. integer , intent(in) :: v
  295. #ifdef ExcludeExtraChanges
  296. if(data%State%unitySignals%FillupHead == v) return
  297. #endif
  298. data%State%unitySignals%FillupHead = v
  299. if (data%State%unitySignals%FillupHead == FILLUP_HEAD_INSTALL) then
  300. call ToggleFillupHead(.true.)
  301. else if (data%State%unitySignals%FillupHead == FILLUP_HEAD_REMOVE) then
  302. call ToggleFillupHead(.false.)
  303. endif
  304. #ifdef deb
  305. if(print_log) print*, 'FillupHead=', data%State%unitySignals%FillupHead
  306. #endif
  307. !**call data%State%unitySignals%OnFillupHeadChange%RunAll()
  308. end subroutine
  309. integer function Get_FillupHead()
  310. implicit none
  311. Get_FillupHead = data%State%unitySignals%FillupHead
  312. end function
  313. subroutine Evaluate_FillupHead()
  314. use CHoistingVariables
  315. use SimulationVariables
  316. use CStudentStationVariables!, only: data%State%StudentStation%FillupHeadInstallation
  317. implicit none
  318. if (data%Configuration%Hoisting%DriveType == TopDrive_DriveType) then
  319. #ifdef OST
  320. if(print_log) print*, 'Evaluate_FillupHead=TopDrive'
  321. #endif
  322. endif
  323. if (data%Configuration%Hoisting%DriveType == Kelly_DriveType) then
  324. #ifdef OST
  325. if(print_log) print*, 'Evaluate_FillupHead=Kelly'
  326. #endif
  327. endif
  328. if (Get_FillupHead() == FILLUP_HEAD_INSTALL) then
  329. data%State%StudentStation%FillupHeadInstallation = .true.
  330. else if (Get_FillupHead() == FILLUP_HEAD_REMOVE) then
  331. data%State%StudentStation%FillupHeadInstallation = .false.
  332. endif
  333. end subroutine
  334. subroutine Set_Elevator(v)
  335. implicit none
  336. integer , intent(in) :: v
  337. #ifdef ExcludeExtraChanges
  338. if(data%State%unitySignals%Elevator == v) return
  339. #endif
  340. data%State%unitySignals%Elevator = v
  341. #ifdef deb
  342. if(print_log) print*, 'Elevator=', data%State%unitySignals%Elevator
  343. #endif
  344. !**call data%State%unitySignals%OnElevatorChange%RunAll()
  345. end subroutine
  346. integer function Get_Elevator()
  347. implicit none
  348. Get_Elevator = data%State%unitySignals%Elevator
  349. end function
  350. subroutine Set_MudBucket(v)
  351. use CManifolds, only: ToggleMudBox
  352. implicit none
  353. integer , intent(in) :: v
  354. #ifdef ExcludeExtraChanges
  355. if(data%State%unitySignals%MudBucket == v) return
  356. #endif
  357. data%State%unitySignals%MudBucket = v
  358. if (data%State%unitySignals%MudBucket == MUD_BUCKET_INSTALL) then
  359. call ToggleMudBox(.true.)
  360. else if (data%State%unitySignals%MudBucket == MUD_BUCKET_REMOVE) then
  361. call ToggleMudBox(.false.)
  362. endif
  363. #ifdef deb
  364. if(print_log) print*, 'MudBucket=', data%State%unitySignals%MudBucket
  365. #endif
  366. !**call data%State%unitySignals%OnMudBucketChange%RunAll()
  367. end subroutine
  368. integer function Get_MudBucket()
  369. implicit none
  370. Get_MudBucket = data%State%unitySignals%MudBucket
  371. end function
  372. subroutine Evaluate_MudBucket()
  373. use CStudentStationVariables!, only: data%State%StudentStation%MudBoxInstallation
  374. implicit none
  375. if (Get_MudBucket() == MUD_BUCKET_INSTALL) then
  376. data%State%StudentStation%MudBoxInstallation = .true.
  377. else if (Get_MudBucket() == MUD_BUCKET_REMOVE) then
  378. data%State%StudentStation%MudBoxInstallation = .false.
  379. endif
  380. end subroutine
  381. !! Moved from CTdsConnectionModeEnum
  382. subroutine Set_TdsConnectionModes(v)
  383. use CManifolds, Only: KellyConnected, KellyDisconnected
  384. implicit none
  385. integer , intent(in) :: v
  386. #ifdef ExcludeExtraChanges
  387. if(data%State%unitySignals%TdsConnectionModes == v) return
  388. #endif
  389. data%State%unitySignals%TdsConnectionModes = v
  390. if(data%State%unitySignals%TdsConnectionModes == TDS_CONNECTION_NOTHING) then
  391. call KellyDisconnected()
  392. else
  393. call KellyConnected()
  394. endif
  395. #ifdef deb
  396. if(print_log) print*, 'data%State%unitySignals%TdsConnectionModes=', data%State%unitySignals%TdsConnectionModes
  397. #endif
  398. !**call data%State%unitySignals%OnTdsConnectionModesChange%RunAll()
  399. end subroutine
  400. integer function Get_TdsConnectionModes()
  401. use SimulationVariables
  402. implicit none
  403. Get_TdsConnectionModes = data%State%unitySignals%TdsConnectionModes
  404. end function
  405. subroutine Evaluate_TdsConnectionModes()
  406. use CUnityInputs
  407. use SimulationVariables
  408. use UnityModule
  409. implicit none
  410. if (data%Configuration%Hoisting%DriveType == TopDrive_DriveType) then
  411. #ifdef OST
  412. if(print_log) print*, 'Evaluate_TdsConnectionModes=TopDrive'
  413. #endif
  414. !TOPDRIVE-CODE=3
  415. if (Get_TdsStemIn() .and.&
  416. Get_TdsSpine() == TDS_SPINE_CONNECT_END .and.&
  417. !TopDriveDrillTorqueState == TdsMu_SPINE
  418. Get_TdsConnectionModes() == TDS_CONNECTION_NOTHING) then
  419. call Set_TdsConnectionModes(TDS_CONNECTION_SPINE)
  420. return
  421. end if
  422. !TOPDRIVE-CODE=4
  423. if (Get_TdsTong() == TDS_TONG_MAKEUP_END .and.&
  424. Get_TdsConnectionModes() == TDS_CONNECTION_SPINE ) then
  425. call Set_TdsConnectionModes(TDS_CONNECTION_STRING)
  426. data%Equipments%TopDrivePanel%TopDriveTorqueWrenchLed = LED_OFF
  427. return
  428. end if
  429. !TOPDRIVE-CODE=5
  430. if (Get_TdsTong() == TDS_TONG_BREAKOUT_END .and.&
  431. Get_TdsConnectionModes() == TDS_CONNECTION_STRING ) then
  432. call Set_TdsConnectionModes(TDS_CONNECTION_SPINE)
  433. data%Equipments%TopDrivePanel%TopDriveTorqueWrenchLed = LED_OFF
  434. return
  435. end if
  436. !TOPDRIVE-CODE=6
  437. if (Get_TdsSpine() == TDS_SPINE_DISCONNECT_END .and.&
  438. !Get_TdsStemIn() == .false. .and.&
  439. Get_TdsConnectionModes() == TDS_CONNECTION_SPINE) then
  440. call Set_TdsConnectionModes(TDS_CONNECTION_NOTHING)
  441. return
  442. end if
  443. endif
  444. if (data%Configuration%Hoisting%DriveType == Kelly_DriveType) then
  445. #ifdef OST
  446. if(print_log) print*, 'Evaluate_TdsConnectionModes=Kelly'
  447. #endif
  448. endif
  449. end subroutine
  450. end module UnitySignalsModule