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.

UnitySignals.f90 18 KiB

1 year ago
1 year ago
1 year ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  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