Files
appRobotDriver/test/GCode.receiveGCode.test.js
2026-06-26 15:53:50 +02:00

139 lines
3.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const GCode = require('../robot/GCode')
const createDummyRobot = require('./helpers/createDummyRobot')
describe('GCode.receiveGCode', () => {
test('G90 setzt Absolutmodus', () => {
const robot = createDummyRobot()
robot.moveRelative = true
GCode.receiveGCode(robot, 'G90')
expect(robot.moveRelative).toBe(false)
expect(robot.calculateAngles3D).not.toHaveBeenCalled()
expect(robot.sendCommand).not.toHaveBeenCalled()
})
test('G91 setzt Relativmodus', () => {
const robot = createDummyRobot()
GCode.receiveGCode(robot, 'G91')
expect(robot.moveRelative).toBe(true)
})
test('G1 absolut setzt Koordinaten', () => {
const robot = createDummyRobot()
GCode.receiveGCode(robot, 'G90 G1 X10 Y20 Z30')
expect(robot.x).toBe(10)
expect(robot.y).toBe(20)
expect(robot.z).toBe(30)
expect(robot.calculateAngles3D).toHaveBeenCalledTimes(1)
expect(robot.sendCommand).toHaveBeenCalledTimes(1)
})
test('G1 relativ addiert Koordinaten', () => {
const robot = createDummyRobot()
robot.moveRelative = true
robot.x = 5
robot.y = 5
GCode.receiveGCode(robot, 'G1 X2 Y3')
expect(robot.x).toBe(7)
expect(robot.y).toBe(8)
})
test('G1 ignore Jogg', () => {
const robot = createDummyRobot()
robot.moveRelative = true
robot.x = 5
robot.y = 5
GCode.receiveGCode(robot, '$J=G91 G1 X2 Y3')
expect(robot.x).toBe(7)
expect(robot.y).toBe(8)
})
test('G1 ignore Jogg absolute, G21 = mm ist OK', () => {
const robot = createDummyRobot()
robot.moveRelative = true
robot.x = 5
robot.y = 5
GCode.receiveGCode(robot, '$J=G90 G21 G1 X20 Y30')
expect(robot.x).toBe(20)
expect(robot.y).toBe(30)
})
test('M1 relativ verändert Motorwerte', () => {
const robot = createDummyRobot()
robot.moveRelative = true
GCode.receiveGCode(robot, 'M1 X10 Y20 Z30 A1 B2 C3')
expect(robot.xMotor).toBe(10)
expect(robot.alpha).toBe(20)
expect(robot.beta).toBe(30)
expect(robot.a).toBe(1)
expect(robot.b).toBe(2)
expect(robot.c).toBe(3)
expect(robot.calculatePositionFromMotorAngles).toHaveBeenCalled()
expect(robot.sendCommand).toHaveBeenCalled()
})
test('G28 setzt Home-Motorwerte direkt (Singularität), lässt aber den Greifer unangetastet', () => {
const robot = createDummyRobot()
robot.e = 7 // vorher gesetzte Greifer-Öffnung ...
robot.eMotor = 3 // ... darf von G28 NICHT bewegt werden (sonst ebc-Slam bei b=π)
GCode.receiveGCode(robot, 'G28')
// Voll ausgestreckt = Handgelenk-Singularität -> Arm-Motorwerte DIREKT, dann FK (nicht IK).
expect(robot.xMotor).toBe(0)
expect(robot.alpha).toBe(0)
expect(robot.beta).toBe(0)
expect(robot.a).toBe(0)
expect(robot.b).toBe(0) // gerade Hand (Phase-2-Konvention: b=0)
expect(robot.c).toBe(0)
// Greifer unverändert -> kein Finger-Slam am Anschlag
expect(robot.e).toBe(7)
expect(robot.eMotor).toBe(3)
expect(robot.calculateAngles3D).not.toHaveBeenCalled()
expect(robot.calculatePositionFromMotorAngles).toHaveBeenCalledTimes(1)
expect(robot.sendCommand).toHaveBeenCalledTimes(1)
})
test('Sende falsches Format', () =>{
const robot = createDummyRobot();
GCode.receiveGCode(robot, 'X324');
})
test('receiveGCode verarbeitet Buffer korrekt (UTF-8)', () => {
const robot = createDummyRobot()
const buffer = Buffer.from('G90 G1 X12 Y34 Z56', 'utf8')
GCode.receiveGCode(robot, buffer)
expect(robot.moveRelative).toBe(false)
expect(robot.x).toBe(12)
expect(robot.y).toBe(34)
expect(robot.z).toBe(56)
expect(robot.calculateAngles3D).toHaveBeenCalledTimes(1)
expect(robot.sendCommand).toHaveBeenCalledTimes(1)
})
})