Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- import linuxcnc, hal, time, comms
- vfd1 = hal.component("spdvfd")
- vfd1.newpin("drivestatus", hal.HAL_U32, hal.HAL_OUT)
- vfd1.newpin("commfrequency", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd1.newpin("outtorque", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd1.newpin("outfrequency", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd1.newpin("outcurrent", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd1.newpin("outvoltage", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd1.newpin("power", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd1.newpin("runtime", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd1.newpin("powerontime", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd1.newpin("run", hal.HAL_BIT, hal.HAL_IN)
- vfd1.newpin("forward", hal.HAL_BIT, hal.HAL_IN)
- vfd1.newpin("freqset", hal.HAL_FLOAT, hal.HAL_IN)
- vfd1.ready()
- vfd2 = hal.component("cltvfd")
- vfd2.newpin("drivestatus", hal.HAL_U32, hal.HAL_OUT)
- vfd2.newpin("errorstatus", hal.HAL_U32, hal.HAL_OUT)
- vfd2.newpin("commfrequency", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd2.newpin("outfrequency", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd2.newpin("outcurrent", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd2.newpin("outvoltage", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd2.newpin("dcbusvoltage", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd2.newpin("run", hal.HAL_BIT, hal.HAL_IN)
- vfd2.newpin("forward", hal.HAL_BIT, hal.HAL_IN)
- vfd2.newpin("freqset", hal.HAL_FLOAT, hal.HAL_IN)
- vfd2.ready()
- vfd3 = hal.component("hydvfd")
- vfd3.newpin("drivestatus", hal.HAL_U32, hal.HAL_OUT)
- vfd3.newpin("errorstatus", hal.HAL_U32, hal.HAL_OUT)
- vfd3.newpin("commfrequency", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd3.newpin("outfrequency", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd3.newpin("outcurrent", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd3.newpin("outvoltage", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd3.newpin("dcbusvoltage", hal.HAL_FLOAT, hal.HAL_OUT)
- vfd3.newpin("run", hal.HAL_BIT, hal.HAL_IN)
- vfd3.newpin("forward", hal.HAL_BIT, hal.HAL_IN)
- vfd3.newpin("freqset", hal.HAL_FLOAT, hal.HAL_IN)
- vfd3.ready()
- #baudate 9600bps, byte size 8, parity none, stop bits 2, timeout 0.2s
- baudrate = 9600
- bytesize = 8
- parity = comms.serial.PARITY_NONE
- stopbits = 2
- timeout = 0.2
- port = '/dev/ttyS0'
- #spindle vfd has slave id 1
- serialvfd1 = comms.Instrument(port, 1)
- serialvfd1.serial.baudrate = baudrate
- serialvfd1.serial.bytesize = bytesize
- serialvfd1.serial.parity = parity
- serialvfd1.serial.stopbits = stopbits
- serialvfd1.serial.timeout = timeout
- serialvfd1.mode = comms.MODE_CUSTOM
- #coolant vfd has slave id 2
- serialvfd2 = comms.Instrument(port, 2)
- serialvfd2.serial.baudrate = baudrate
- serialvfd2.serial.bytesize = bytesize
- serialvfd2.serial.parity = parity
- serialvfd2.serial.stopbits = stopbits
- serialvfd2.serial.timeout = timeout
- serialvfd2.mode = comms.MODE_ASCII
- #hydraulic vfd has slave id 3
- serialvfd3 = comms.Instrument(port, 3)
- serialvfd3.serial.baudrate = baudrate
- serialvfd3.serial.bytesize = bytesize
- serialvfd3.serial.parity = parity
- serialvfd3.serial.stopbits = stopbits
- serialvfd3.serial.timeout = timeout
- serialvfd3.mode = comms.MODE_ASCII
- #initialize variables to safe settings
- vfd1.run, vfd2.run, vfd3.run = 0, 0, 0
- vfd1.forward, vfd2.forward, vfd3.forward = 1, 1, 1
- vfd1.freqset, vfd2.freqset, vfd3.freqset = 7.49, 60, 60
- cmd2, cmd3 = 17, 17
- try:
- while 1:
- time.sleep(0.01)
- #-----------------SPINDLE VFD--------------------
- readparamA = []
- responseA=serialvfd1._performCommand(3, "none")
- for i in xrange(0,len(responseA)/8):
- readparamA.append(responseA[i*8+2:8*i+8+2])
- vfd1.outfrequency = float(readparamA[0])/10000
- vfd1.outcurrent = float(readparamA[1])/1000
- vfd1.drivestatus = int(readparamA[2])
- vfd1.outtorque = int(readparamA[7])/100
- vfd1.outvoltage = float(readparamA[8])/1000
- vfd1.power = float(readparamA[9])/1000
- vfd1.runtime = int(readparamA[11])
- vfd1.powerontime = int(readparamA[12])
- vfd1.commfrequency = float(serialvfd1._performCommand(6, "F001"))/100
- #start/stop/cw/ccw
- if vfd1.run and vfd1.forward: #run CW
- serialvfd1._performCommand(0, "1")
- elif vfd1.run and not vfd1.forward: #run CCW
- serialvfd1._performCommand(0, "2")
- else: #do not run. keep resending this for safety.
- serialvfd1._performCommand(0, "0")
- #set the frequency
- if ('%.2f'%vfd1.commfrequency) != ('%.2f'%vfd1.freqset):
- print "spdle vfd freq set"
- print vfd1.commfrequency
- print vfd1.freqset
- serialvfd1._performCommand(1, '%06d' % (vfd1.freqset*100))
- #---------------COOLANT VFD-------------------
- vfd2.errorstatus = int(serialvfd2.read_register(0x2100, 0))
- vfd2.drivestatus = int(serialvfd2.read_register(0x2101, 0))
- vfd2.commfrequency = float(serialvfd2.read_register(0x2102, 0))/100
- vfd2.outfrequency = float(serialvfd2.read_register(0x2103, 0))/100
- vfd2.outcurrent = float(serialvfd2.read_register(0x2104, 0))/10
- vfd2.dcbusvoltage = float(serialvfd2.read_register(0x2105, 0))/10
- vfd2.outvoltage = float(serialvfd2.read_register(0x2106, 0))
- #start/stop/cw/ccw
- if vfd2.run and vfd2.forward: #run CW
- cmd2 = 18
- elif vfd2.run and not vfd2.forward: #run CCW
- cmd2 = 34
- elif not vfd2.run and not vfd2.forward: #stop in CCW mode
- cmd2 = 33
- else: #stop in CW mode by default
- cmd2 = 17
- serialvfd2.write_register(0x2000,cmd2,0,6)
- #set the frequency
- if ('%.2f'%vfd2.commfrequency) != ('%.2f'%vfd2.freqset):
- serialvfd2.write_register(0x2001,vfd2.freqset*100,0,6)
- #---------------HYDRAULICS VFD----------------
- vfd3.errorstatus = int(serialvfd3.read_register(0x2100, 0))
- vfd3.drivestatus = int(serialvfd3.read_register(0x2101, 0))
- vfd3.commfrequency = float(serialvfd3.read_register(0x2102, 0))/100
- vfd3.outfrequency = float(serialvfd3.read_register(0x2103, 0))/100
- vfd3.outcurrent = float(serialvfd3.read_register(0x2104, 0))/10
- vfd3.dcbusvoltage = float(serialvfd3.read_register(0x2105, 0))/10
- vfd3.outvoltage = float(serialvfd3.read_register(0x2106, 0))
- #start/stop/cw/ccw
- if vfd3.run and vfd3.forward: #run CW
- cmd3 = 18
- elif vfd3.run and not vfd3.forward: #run CCW
- cmd3 = 34
- elif not vfd3.run and not vfd3.forward: #stop in CCW mode
- cmd3 = 33
- else: #stop in CW mode by default
- cmd3 = 17
- serialvfd3.write_register(0x2000,cmd3,0,6)
- #set the frequency
- if ('%.2f'%vfd3.commfrequency) != ('%.2f'%vfd3.freqset):
- serialvfd3.write_register(0x2001,vfd3.freqset*100,0,6)
- except KeyboardInterrupt:
- raise SystemExit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement