Advertisement
Guest User

Untitled

a guest
Feb 11th, 2015
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.46 KB | None | 0 0
  1. #!/usr/bin/python
  2. import linuxcnc, hal, time, comms
  3.  
  4. vfd1 = hal.component("spdvfd")
  5. vfd1.newpin("drivestatus", hal.HAL_U32, hal.HAL_OUT)
  6. vfd1.newpin("commfrequency", hal.HAL_FLOAT, hal.HAL_OUT)
  7. vfd1.newpin("outtorque", hal.HAL_FLOAT, hal.HAL_OUT)
  8. vfd1.newpin("outfrequency", hal.HAL_FLOAT, hal.HAL_OUT)
  9. vfd1.newpin("outcurrent", hal.HAL_FLOAT, hal.HAL_OUT)
  10. vfd1.newpin("outvoltage", hal.HAL_FLOAT, hal.HAL_OUT)
  11. vfd1.newpin("power", hal.HAL_FLOAT, hal.HAL_OUT)
  12. vfd1.newpin("runtime", hal.HAL_FLOAT, hal.HAL_OUT)
  13. vfd1.newpin("powerontime", hal.HAL_FLOAT, hal.HAL_OUT)
  14. vfd1.newpin("run", hal.HAL_BIT, hal.HAL_IN)
  15. vfd1.newpin("forward", hal.HAL_BIT, hal.HAL_IN)
  16. vfd1.newpin("freqset", hal.HAL_FLOAT, hal.HAL_IN)
  17. vfd1.ready()
  18.  
  19. vfd2 = hal.component("cltvfd")
  20. vfd2.newpin("drivestatus", hal.HAL_U32, hal.HAL_OUT)
  21. vfd2.newpin("errorstatus", hal.HAL_U32, hal.HAL_OUT)
  22. vfd2.newpin("commfrequency", hal.HAL_FLOAT, hal.HAL_OUT)
  23. vfd2.newpin("outfrequency", hal.HAL_FLOAT, hal.HAL_OUT)
  24. vfd2.newpin("outcurrent", hal.HAL_FLOAT, hal.HAL_OUT)
  25. vfd2.newpin("outvoltage", hal.HAL_FLOAT, hal.HAL_OUT)
  26. vfd2.newpin("dcbusvoltage", hal.HAL_FLOAT, hal.HAL_OUT)
  27. vfd2.newpin("run", hal.HAL_BIT, hal.HAL_IN)
  28. vfd2.newpin("forward", hal.HAL_BIT, hal.HAL_IN)
  29. vfd2.newpin("freqset", hal.HAL_FLOAT, hal.HAL_IN)
  30. vfd2.ready()
  31.  
  32. vfd3 = hal.component("hydvfd")
  33. vfd3.newpin("drivestatus", hal.HAL_U32, hal.HAL_OUT)
  34. vfd3.newpin("errorstatus", hal.HAL_U32, hal.HAL_OUT)
  35. vfd3.newpin("commfrequency", hal.HAL_FLOAT, hal.HAL_OUT)
  36. vfd3.newpin("outfrequency", hal.HAL_FLOAT, hal.HAL_OUT)
  37. vfd3.newpin("outcurrent", hal.HAL_FLOAT, hal.HAL_OUT)
  38. vfd3.newpin("outvoltage", hal.HAL_FLOAT, hal.HAL_OUT)
  39. vfd3.newpin("dcbusvoltage", hal.HAL_FLOAT, hal.HAL_OUT)
  40. vfd3.newpin("run", hal.HAL_BIT, hal.HAL_IN)
  41. vfd3.newpin("forward", hal.HAL_BIT, hal.HAL_IN)
  42. vfd3.newpin("freqset", hal.HAL_FLOAT, hal.HAL_IN)
  43. vfd3.ready()
  44.  
  45. #baudate 9600bps, byte size 8, parity none, stop bits 2, timeout 0.2s
  46. baudrate = 9600
  47. bytesize = 8
  48. parity = comms.serial.PARITY_NONE
  49. stopbits = 2
  50. timeout = 0.2
  51. port = '/dev/ttyS0'
  52.  
  53. #spindle vfd has slave id 1
  54. serialvfd1 = comms.Instrument(port, 1)
  55. serialvfd1.serial.baudrate = baudrate
  56. serialvfd1.serial.bytesize = bytesize
  57. serialvfd1.serial.parity = parity
  58. serialvfd1.serial.stopbits = stopbits
  59. serialvfd1.serial.timeout = timeout
  60. serialvfd1.mode = comms.MODE_CUSTOM
  61.  
  62. #coolant vfd has slave id 2
  63. serialvfd2 = comms.Instrument(port, 2)
  64. serialvfd2.serial.baudrate = baudrate
  65. serialvfd2.serial.bytesize = bytesize
  66. serialvfd2.serial.parity = parity
  67. serialvfd2.serial.stopbits = stopbits
  68. serialvfd2.serial.timeout = timeout
  69. serialvfd2.mode = comms.MODE_ASCII
  70.  
  71. #hydraulic vfd has slave id 3
  72. serialvfd3 = comms.Instrument(port, 3)
  73. serialvfd3.serial.baudrate = baudrate
  74. serialvfd3.serial.bytesize = bytesize
  75. serialvfd3.serial.parity = parity
  76. serialvfd3.serial.stopbits = stopbits
  77. serialvfd3.serial.timeout = timeout
  78. serialvfd3.mode = comms.MODE_ASCII
  79.  
  80. #initialize variables to safe settings
  81. vfd1.run, vfd2.run, vfd3.run = 0, 0, 0
  82. vfd1.forward, vfd2.forward, vfd3.forward = 1, 1, 1
  83. vfd1.freqset, vfd2.freqset, vfd3.freqset = 7.49, 60, 60
  84. cmd2, cmd3 = 17, 17
  85.  
  86. try:
  87. while 1:
  88. time.sleep(0.01)
  89. #-----------------SPINDLE VFD--------------------
  90. readparamA = []
  91. responseA=serialvfd1._performCommand(3, "none")
  92. for i in xrange(0,len(responseA)/8):
  93. readparamA.append(responseA[i*8+2:8*i+8+2])
  94.  
  95. vfd1.outfrequency = float(readparamA[0])/10000
  96. vfd1.outcurrent = float(readparamA[1])/1000
  97. vfd1.drivestatus = int(readparamA[2])
  98. vfd1.outtorque = int(readparamA[7])/100
  99. vfd1.outvoltage = float(readparamA[8])/1000
  100. vfd1.power = float(readparamA[9])/1000
  101. vfd1.runtime = int(readparamA[11])
  102. vfd1.powerontime = int(readparamA[12])
  103. vfd1.commfrequency = float(serialvfd1._performCommand(6, "F001"))/100
  104.  
  105. #start/stop/cw/ccw
  106. if vfd1.run and vfd1.forward: #run CW
  107. serialvfd1._performCommand(0, "1")
  108. elif vfd1.run and not vfd1.forward: #run CCW
  109. serialvfd1._performCommand(0, "2")
  110. else: #do not run. keep resending this for safety.
  111. serialvfd1._performCommand(0, "0")
  112.  
  113. #set the frequency
  114. if ('%.2f'%vfd1.commfrequency) != ('%.2f'%vfd1.freqset):
  115. print "spdle vfd freq set"
  116. print vfd1.commfrequency
  117. print vfd1.freqset
  118. serialvfd1._performCommand(1, '%06d' % (vfd1.freqset*100))
  119.  
  120.  
  121. #---------------COOLANT VFD-------------------
  122. vfd2.errorstatus = int(serialvfd2.read_register(0x2100, 0))
  123. vfd2.drivestatus = int(serialvfd2.read_register(0x2101, 0))
  124. vfd2.commfrequency = float(serialvfd2.read_register(0x2102, 0))/100
  125. vfd2.outfrequency = float(serialvfd2.read_register(0x2103, 0))/100
  126. vfd2.outcurrent = float(serialvfd2.read_register(0x2104, 0))/10
  127. vfd2.dcbusvoltage = float(serialvfd2.read_register(0x2105, 0))/10
  128. vfd2.outvoltage = float(serialvfd2.read_register(0x2106, 0))
  129.  
  130. #start/stop/cw/ccw
  131. if vfd2.run and vfd2.forward: #run CW
  132. cmd2 = 18
  133. elif vfd2.run and not vfd2.forward: #run CCW
  134. cmd2 = 34
  135. elif not vfd2.run and not vfd2.forward: #stop in CCW mode
  136. cmd2 = 33
  137. else: #stop in CW mode by default
  138. cmd2 = 17
  139.  
  140. serialvfd2.write_register(0x2000,cmd2,0,6)
  141.  
  142. #set the frequency
  143. if ('%.2f'%vfd2.commfrequency) != ('%.2f'%vfd2.freqset):
  144. serialvfd2.write_register(0x2001,vfd2.freqset*100,0,6)
  145.  
  146.  
  147. #---------------HYDRAULICS VFD----------------
  148. vfd3.errorstatus = int(serialvfd3.read_register(0x2100, 0))
  149. vfd3.drivestatus = int(serialvfd3.read_register(0x2101, 0))
  150. vfd3.commfrequency = float(serialvfd3.read_register(0x2102, 0))/100
  151. vfd3.outfrequency = float(serialvfd3.read_register(0x2103, 0))/100
  152. vfd3.outcurrent = float(serialvfd3.read_register(0x2104, 0))/10
  153. vfd3.dcbusvoltage = float(serialvfd3.read_register(0x2105, 0))/10
  154. vfd3.outvoltage = float(serialvfd3.read_register(0x2106, 0))
  155.  
  156. #start/stop/cw/ccw
  157. if vfd3.run and vfd3.forward: #run CW
  158. cmd3 = 18
  159. elif vfd3.run and not vfd3.forward: #run CCW
  160. cmd3 = 34
  161. elif not vfd3.run and not vfd3.forward: #stop in CCW mode
  162. cmd3 = 33
  163. else: #stop in CW mode by default
  164. cmd3 = 17
  165.  
  166. serialvfd3.write_register(0x2000,cmd3,0,6)
  167.  
  168. #set the frequency
  169. if ('%.2f'%vfd3.commfrequency) != ('%.2f'%vfd3.freqset):
  170. serialvfd3.write_register(0x2001,vfd3.freqset*100,0,6)
  171.  
  172. except KeyboardInterrupt:
  173. raise SystemExit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement