Simulation Core
 
 
 
 
 
 

268 lines
12 KiB

  1. module CTopDrivePanel
  2. use CTopDrivePanelVariables
  3. use SimulationVariables
  4. use CLog3
  5. implicit none
  6. public
  7. contains
  8. subroutine CDrivePanelToJson(parent)
  9. type(json_value),pointer :: parent
  10. type(json_core) :: json
  11. type(json_value),pointer :: p,pform
  12. integer :: i
  13. ! 1. create new node
  14. call json%create_object(p,'CDrivePanel')
  15. call json%add(p,"TdsPower_REV",data%Equipments%ControlPanel%CTopDrive%TdsPower_REV)
  16. call json%add(p,"TdsPower_OFF",data%Equipments%ControlPanel%CTopDrive%TdsPower_OFF)
  17. call json%add(p,"TdsPower_FWD",data%Equipments%ControlPanel%CTopDrive%TdsPower_FWD)
  18. call json%add(p,"TdsMu_TORQ",data%Equipments%ControlPanel%CTopDrive%TdsMu_TORQ)
  19. call json%add(p,"TdsMu_SPINE",data%Equipments%ControlPanel%CTopDrive%TdsMu_SPINE)
  20. call json%add(p,"TdsMu_DRILL",data%Equipments%ControlPanel%CTopDrive%TdsMu_DRILL)
  21. call json%add(p,"TdsLinkTilt_TILT",data%Equipments%ControlPanel%CTopDrive%TdsLinkTilt_TILT)
  22. call json%add(p,"TdsLinkTilt_OFF",data%Equipments%ControlPanel%CTopDrive%TdsLinkTilt_OFF)
  23. call json%add(p,"TdsLinkTilt_DRILL",data%Equipments%ControlPanel%CTopDrive%TdsLinkTilt_DRILL)
  24. call json%add(p,"LED_OFF",data%Equipments%ControlPanel%CTopDrive%LED_OFF)
  25. call json%add(p,"LED_ON",data%Equipments%ControlPanel%CTopDrive%LED_ON)
  26. call json%add(p,"LED_BLINK",data%Equipments%ControlPanel%CTopDrive%LED_BLINK)
  27. do i=1,data%Equipments%ControlPanel%CTopDrive%Count
  28. call json%create_object(pform,'')
  29. call json%add(pform,"TopDriveTdsPowerState",data%Equipments%ControlPanel%CTopDrive%TopDriveTdsPowerState)
  30. call json%add(pform,"TopDriveTorqueWrench",data%Equipments%ControlPanel%CTopDrive%TopDriveTorqueWrench)
  31. call json%add(pform,"TopDriveDrillTorqueState",data%Equipments%ControlPanel%CTopDrive%TopDriveDrillTorqueState)
  32. call json%add(pform,"TopDriveLinkTiltState",data%Equipments%ControlPanel%CTopDrive%TopDriveLinkTiltState)
  33. call json%add(pform,"TopDriveIbop",data%Equipments%ControlPanel%CTopDrive%TopDriveIbop)
  34. call json%add(pform,"TopDriveTorqueLimitKnob",data%Equipments%ControlPanel%CTopDrive%TopDriveTorqueLimitKnob)
  35. call json%add(pform,"RpmKnob",data%Equipments%ControlPanel%CTopDrive%RpmKnob)
  36. call json%add(pform,"TopDriveOperationFaultLed",data%Equipments%ControlPanel%CTopDrive%TopDriveOperationFaultLed)
  37. call json%add(pform,"TopDriveTdsPowerLed",data%Equipments%ControlPanel%CTopDrive%TopDriveTdsPowerLed)
  38. call json%add(pform,"TopDriveTorqueWrenchLed",data%Equipments%ControlPanel%CTopDrive%TopDriveTorqueWrenchLed)
  39. call json%add(pform,"TopDriveLinkTiltLed",data%Equipments%ControlPanel%CTopDrive%TopDriveLinkTiltLed)
  40. call json%add(pform,"TopDriveIbopLed",data%Equipments%ControlPanel%CTopDrive%TopDriveIbopLed)
  41. call json%add(pform,"TopDriveTorqueLimitGauge",data%Equipments%ControlPanel%CTopDrive%TopDriveTorqueLimitGauge)
  42. call json%add(pform,"TopDriveTorqueGauge",data%Equipments%ControlPanel%CTopDrive%TopDriveTorqueGauge)
  43. call json%add(pform,"TopDriveRpmGauge",data%Equipments%ControlPanel%CTopDrive%TopDriveRpmGauge)
  44. call json%add(p,pform)
  45. end do
  46. call json%add(parent,p)
  47. end subroutine
  48. ! Input routines
  49. subroutine SetTopDriveTdsPowerState(v)
  50. !DEC$ ATTRIBUTES DLLEXPORT :: SetTopDriveTdsPowerState
  51. !DEC$ ATTRIBUTES ALIAS: 'SetTopDriveTdsPowerState' :: SetTopDriveTdsPowerState
  52. implicit none
  53. integer, intent(in) :: v
  54. data%EquipmentControl%TopDrivePanel%TopDriveTdsPowerState = v
  55. #ifdef deb
  56. call Log_3( 'TopDriveTdsPowerState=', data%EquipmentControl%TopDrivePanel%TopDriveTdsPowerState)
  57. #endif
  58. end subroutine
  59. subroutine SetTopDriveTorqueWrench(v)
  60. !DEC$ ATTRIBUTES DLLEXPORT :: SetTopDriveTorqueWrench
  61. !DEC$ ATTRIBUTES ALIAS: 'SetTopDriveTorqueWrench' :: SetTopDriveTorqueWrench
  62. implicit none
  63. logical, intent(in) :: v
  64. data%EquipmentControl%TopDrivePanel%TopDriveTorqueWrench = v
  65. #ifdef deb
  66. call Log_3( 'TopDriveTorqueWrench=', data%EquipmentControl%TopDrivePanel%TopDriveTorqueWrench)
  67. #endif
  68. end subroutine
  69. subroutine SetTopDriveDrillTorqueState(v)
  70. !DEC$ ATTRIBUTES DLLEXPORT :: SetTopDriveDrillTorqueState
  71. !DEC$ ATTRIBUTES ALIAS: 'SetTopDriveDrillTorqueState' :: SetTopDriveDrillTorqueState
  72. implicit none
  73. integer, intent(in) :: v
  74. data%EquipmentControl%TopDrivePanel%TopDriveDrillTorqueState = v
  75. #ifdef deb
  76. call Log_3( 'TopDriveDrillTorqueState=', data%EquipmentControl%TopDrivePanel%TopDriveDrillTorqueState)
  77. #endif
  78. end subroutine
  79. subroutine SetTopDriveLinkTiltState(v)
  80. !DEC$ ATTRIBUTES DLLEXPORT :: SetTopDriveLinkTiltState
  81. !DEC$ ATTRIBUTES ALIAS: 'SetTopDriveLinkTiltState' :: SetTopDriveLinkTiltState
  82. implicit none
  83. integer, intent(in) :: v
  84. data%EquipmentControl%TopDrivePanel%TopDriveLinkTiltState = v
  85. #ifdef deb
  86. call Log_3( 'TopDriveLinkTiltState=', data%EquipmentControl%TopDrivePanel%TopDriveLinkTiltState)
  87. #endif
  88. end subroutine
  89. subroutine SetTopDriveIbop(v)
  90. !DEC$ ATTRIBUTES DLLEXPORT :: SetTopDriveIbop
  91. !DEC$ ATTRIBUTES ALIAS: 'SetTopDriveIbop' :: SetTopDriveIbop
  92. implicit none
  93. logical, intent(in) :: v
  94. data%EquipmentControl%TopDrivePanel%TopDriveIbop = v
  95. #ifdef deb
  96. call Log_3( 'TopDriveIbop=', data%EquipmentControl%TopDrivePanel%TopDriveIbop)
  97. #endif
  98. end subroutine
  99. subroutine SetTopDriveTorqueLimitKnob(v)
  100. !DEC$ ATTRIBUTES DLLEXPORT :: SetTopDriveTorqueLimitKnob
  101. !DEC$ ATTRIBUTES ALIAS: 'SetTopDriveTorqueLimitKnob' :: SetTopDriveTorqueLimitKnob
  102. ! use CSimulationVariables, only: IsPortable
  103. use CDrillingConsoleVariables
  104. use SimulationVariables
  105. use SimulationVariables!, only: data%EquipmentControl%DrillingConsole%RTSwitch, data%EquipmentControl%DrillingConsole%RTTorqueLimitKnob
  106. use CWarnings, only: Activate_TopdriveRotaryTableConfilict
  107. use CScaleRange
  108. implicit none
  109. real, intent(in) :: v
  110. if (IsPortable) then
  111. if(data%EquipmentControl%TopDrivePanel%TopDriveTdsPowerState /= 0 .and. data%EquipmentControl%DrillingConsole%RTSwitch /= 0) call Activate_TopdriveRotaryTableConfilict()
  112. if(data%EquipmentControl%TopDrivePanel%TopDriveTdsPowerState /= 0 .and. data%EquipmentControl%DrillingConsole%RTSwitch == 0) then
  113. data%EquipmentControl%DrillingConsole%RTTorqueLimitKnob = 0
  114. data%EquipmentControl%TopDrivePanel%TopDriveTorqueLimitKnob = v
  115. #ifdef deb
  116. call Log_3( 'RTTorqueLimitKnob=', data%EquipmentControl%DrillingConsole%RTTorqueLimitKnob )
  117. call Log_3( 'TopDriveTorqueLimitKnob=', data%EquipmentControl%TopDrivePanel%TopDriveTorqueLimitKnob )
  118. #endif
  119. endif
  120. if(data%EquipmentControl%TopDrivePanel%TopDriveTdsPowerState == 0 .and. data%EquipmentControl%DrillingConsole%RTSwitch /= 0) then
  121. data%EquipmentControl%TopDrivePanel%TopDriveTorqueLimitKnob = 0
  122. data%EquipmentControl%DrillingConsole%RTTorqueLimitKnob = real(ScaleRange(v, 0.0, 10.0, 0.0, 6000.0), 8)
  123. #ifdef deb
  124. call Log_3( 'RTTorqueLimitKnob=', data%EquipmentControl%DrillingConsole%RTTorqueLimitKnob )
  125. call Log_3( 'TopDriveTorqueLimitKnob=', data%EquipmentControl%TopDrivePanel%TopDriveTorqueLimitKnob )
  126. #endif
  127. endif
  128. else
  129. data%EquipmentControl%TopDrivePanel%TopDriveTorqueLimitKnob = v
  130. #ifdef deb
  131. call Log_3( 'TopDriveTorqueLimitKnob=', data%EquipmentControl%TopDrivePanel%TopDriveTorqueLimitKnob)
  132. #endif
  133. endif
  134. end subroutine
  135. subroutine SetRpmKnob(v)
  136. !DEC$ ATTRIBUTES DLLEXPORT :: SetRpmKnob
  137. !DEC$ ATTRIBUTES ALIAS: 'SetRpmKnob' :: SetRpmKnob
  138. ! use CSimulationVariables, only: IsPortable
  139. use CDrillingConsoleVariables
  140. use SimulationVariables
  141. use SimulationVariables!, only: data%EquipmentControl%DrillingConsole%RTSwitch, data%EquipmentControl%DrillingConsole%RTThrottle
  142. use CWarnings, only: Activate_TopdriveRotaryTableConfilict
  143. use CScaleRange
  144. implicit none
  145. real, intent(in) :: v
  146. if (IsPortable) then
  147. if(data%EquipmentControl%TopDrivePanel%TopDriveTdsPowerState /= 0 .and. data%EquipmentControl%DrillingConsole%RTSwitch /= 0) call Activate_TopdriveRotaryTableConfilict()
  148. if(data%EquipmentControl%TopDrivePanel%TopDriveTdsPowerState /= 0 .and. data%EquipmentControl%DrillingConsole%RTSwitch == 0) then
  149. data%EquipmentControl%DrillingConsole%RTThrottle = 0
  150. data%EquipmentControl%TopDrivePanel%RpmKnob = v
  151. #ifdef deb
  152. call Log_3( 'RTThrottle=', data%EquipmentControl%DrillingConsole%RTThrottle )
  153. call Log_3( 'RpmKnob=', data%EquipmentControl%TopDrivePanel%RpmKnob )
  154. #endif
  155. endif
  156. if(data%EquipmentControl%TopDrivePanel%TopDriveTdsPowerState == 0 .and. data%EquipmentControl%DrillingConsole%RTSwitch /= 0) then
  157. data%EquipmentControl%TopDrivePanel%RpmKnob = 0
  158. data%EquipmentControl%DrillingConsole%RTThrottle = real(ScaleRange(v, 0.0, 965.0, 0.0, 250.0), 8)
  159. #ifdef deb
  160. call Log_3( 'RpmKnob=', data%EquipmentControl%TopDrivePanel%RpmKnob )
  161. call Log_3( 'RTThrottle=', data%EquipmentControl%DrillingConsole%RTThrottle )
  162. #endif
  163. endif
  164. else
  165. data%EquipmentControl%TopDrivePanel%RpmKnob = v
  166. endif
  167. if (IsPortable) then
  168. !
  169. else
  170. data%EquipmentControl%TopDrivePanel%RpmKnob = v
  171. #ifdef deb
  172. call Log_3( 'RpmKnob=', data%EquipmentControl%TopDrivePanel%RpmKnob )
  173. #endif
  174. endif
  175. end subroutine
  176. ! Output routines
  177. integer function GetTopDriveOperationFaultLed()
  178. !DEC$ ATTRIBUTES DLLEXPORT :: GetTopDriveOperationFaultLed
  179. !DEC$ ATTRIBUTES ALIAS: 'GetTopDriveOperationFaultLed' :: GetTopDriveOperationFaultLed
  180. implicit none
  181. GetTopDriveOperationFaultLed = data%EquipmentControl%TopDrivePanel%TopDriveOperationFaultLed
  182. !GetTopDriveOperationFaultLed = 1
  183. end function
  184. integer function GetTopDriveTdsPowerLed()
  185. !DEC$ ATTRIBUTES DLLEXPORT :: GetTopDriveTdsPowerLed
  186. !DEC$ ATTRIBUTES ALIAS: 'GetTopDriveTdsPowerLed' :: GetTopDriveTdsPowerLed
  187. implicit none
  188. GetTopDriveTdsPowerLed = data%EquipmentControl%TopDrivePanel%TopDriveTdsPowerLed
  189. !GetTopDriveTdsPowerLed = 1
  190. end function
  191. integer function GetTopDriveTorqueWrenchLed()
  192. !DEC$ ATTRIBUTES DLLEXPORT :: GetTopDriveTorqueWrenchLed
  193. !DEC$ ATTRIBUTES ALIAS: 'GetTopDriveTorqueWrenchLed' :: GetTopDriveTorqueWrenchLed
  194. implicit none
  195. GetTopDriveTorqueWrenchLed = data%EquipmentControl%TopDrivePanel%TopDriveTorqueWrenchLed
  196. !GetTopDriveTorqueWrenchLed = 1
  197. end function
  198. integer function GetTopDriveLinkTiltLed()
  199. !DEC$ ATTRIBUTES DLLEXPORT :: GetTopDriveLinkTiltLed
  200. !DEC$ ATTRIBUTES ALIAS: 'GetTopDriveLinkTiltLed' :: GetTopDriveLinkTiltLed
  201. implicit none
  202. GetTopDriveLinkTiltLed = data%EquipmentControl%TopDrivePanel%TopDriveLinkTiltLed
  203. !GetTopDriveLinkTiltLed = 1
  204. end function
  205. integer function GetTopDriveIbopLed()
  206. !DEC$ ATTRIBUTES DLLEXPORT :: GetTopDriveIbopLed
  207. !DEC$ ATTRIBUTES ALIAS: 'GetTopDriveIbopLed' :: GetTopDriveIbopLed
  208. implicit none
  209. GetTopDriveIbopLed = data%EquipmentControl%TopDrivePanel%TopDriveIbopLed
  210. !GetTopDriveIbopLed = 1
  211. end function
  212. real function GetTopDriveTorqueGauge()
  213. !DEC$ ATTRIBUTES DLLEXPORT :: GetTopDriveTorqueGauge
  214. !DEC$ ATTRIBUTES ALIAS: 'GetTopDriveTorqueGauge' :: GetTopDriveTorqueGauge
  215. implicit none
  216. GetTopDriveTorqueGauge = data%EquipmentControl%TopDrivePanel%TopDriveTorqueGauge
  217. !GetTopDriveTorqueGauge = 340
  218. end function
  219. real function GetTopDriveTorqueLimitGauge()
  220. !DEC$ ATTRIBUTES DLLEXPORT :: GetTopDriveTorqueLimitGauge
  221. !DEC$ ATTRIBUTES ALIAS: 'GetTopDriveTorqueLimitGauge' :: GetTopDriveTorqueLimitGauge
  222. implicit none
  223. GetTopDriveTorqueLimitGauge = data%EquipmentControl%TopDrivePanel%TopDriveTorqueLimitGauge
  224. !GetTopDriveTorqueLimitGauge = 442
  225. end function
  226. real function GetTopDriveRpmGauge()
  227. !DEC$ ATTRIBUTES DLLEXPORT :: GetTopDriveRpmGauge
  228. !DEC$ ATTRIBUTES ALIAS: 'GetTopDriveRpmGauge' :: GetTopDriveRpmGauge
  229. implicit none
  230. GetTopDriveRpmGauge = data%EquipmentControl%TopDrivePanel%TopDriveRpmGauge
  231. !GetTopDriveRpmGauge = 67
  232. end function
  233. end module CTopDrivePanel