Autosampler - Leben nach Leben

Er lebte glücklich bis ans Ende seiner Tage ... und brach dann zusammen.

Prolog


Für ein Jahr, so scheint es, wurde 2009 ein Wasseranalysator für ein Projekt gekauft. Aufgrund der Tatsache, dass damit der Betrieb der technologischen Ausrüstung sichergestellt werden sollte, wurde das Gerät komplett mit einem Autosampler gekauft.



Dies ist im Wesentlichen ein CNC-Manipulator mit vier Bewegungsfreiheitsgraden zum automatischen Zuführen von Proben zum Analysegerät.

Er arbeitete etwa zehn Jahre und reichte mehr als dreißigtausend Proben mit einigen geringfügigen Problemen ein, die jedoch mit "wenig Blut" überwunden wurden.

Zu Beginn dieses Jahres war er müde - die Z-Achse versagte, vertikale Bewegung.

Das heißt, der Manipulator hat einfach aufgehört, es zu „sehen“. In Anbetracht einer Reihe von Umständen der offiziellen Wartung hatte der Messkomplex nie kleinere Probleme (Netzteilreparatur, Blinken nach einem FLASH-Fehler), die unabhängig voneinander gelöst wurden. Hier musste ich schon nach Beamten suchen, von denen es sich herausstellte ... Einige Features:

  • Es stellte sich heraus, dass der Manipulator nicht nur alt, sondern auch katastrophal alt ist
  • Er war alt und wurde beim Kauf eingestellt
  • keine dokumentation dafür
  • Die gesamte Elektronik muss ausgetauscht werden
  • Teile sind verfügbar, kosten aber mehr als neu
  • Es gibt keine hundertprozentige Garantie dafür, dass ein Ersatz funktioniert

Einige Funktionen, die mir bekannt waren:

  • Die Firmware des Herstellers funktioniert nicht mit dem Analysegerät (es ist gut, dass ein Backup erstellt wurde).
  • Der Bootloader wird anscheinend ebenfalls geändert, da die werkseitige Firmware "wie sie ist" nicht akzeptiert wird
  • Es gibt keine Möglichkeit, den Bootloader erneut zu "flashen", daher ist der Kauf von Elektronik für 6.000 US-Dollar nutzlos
  • Die Mechaniker sind in exzellentem Zustand, da ich sie regelmäßig gewartet habe
  • Null (Hall) Sensoren sind am Leben

Somit stellten sich zwei Möglichkeiten heraus:

  • Kauf eines neuen Analysegeräts vom Hersteller für 17.000 USD und eine unverständliche Lieferzeit
  • Neuentwicklung aller Elektronik- und Schreibprogramme

Teil Eins, Hardware


Zunächst habe ich mich dafür entschieden, dass die Mechanik bei einer Spannung von 12 V (gegenüber 37 im Original) arbeitet. Beschlossen zu senken aufgrund der Tatsache, dass die Leistungshalbregelung der Vorschaltgetriebe anständig aufgewärmt ist. Daher wurden die Fahrer A4988, CNC-Typenschild und Arduino NANO aus dem Nachttisch gezogen. all dies wurde angedockt, vom berühmten grbl-projekt geflasht und mit vorurteilen befragt. Die maximale Schrittfrequenz wurde für jeden Antrieb erhalten, die Schrittteilungskoeffizienten und die Treiberströme wurden eingestellt.

Es stellte sich heraus, dass sich XY überhaupt nicht erwärmt und sie eine ziemlich geeignete Geschwindigkeit abgeben. Der Strom für Laufwerk Z - musste aufgrund der Division durch 8 und des angemessenen Verbrauchs zu Beginn der Aufwärtsbewegung maximal geschraubt werden, da er eine schwere Masse aus zwei SDs und Eingeweiden zieht, während der Treiberchip selbst mit einem Kühler auf 50 Grad erhitzt wurde. Ich musste dem Gebläse vor diesem Antrieb im endgültigen Design einen Kühler hinzufügen.

Am Ende stattdessen



es stellte sich heraus



Das Arduino Pro Micro wird ein separates Lied sein. Im Hintergrund befindet sich ein Bedienfeld mit Kippschaltern zur Auswahl der Betriebsarten-, Start- und Reset-Tasten.

Nun zum Kutteln. Wie gesagt, alle Hallsensoren haben überlebt. Von diesen sind XYs nur für die unterschiedliche Auslöselogik interessant. Wenn sich bei Y der Sensor bei Annäherung an den Magneten in Ordnung öffnet, befindet sich der Magnet bei X ständig gegenüber dem Sensor, und bei Null-X und weiter dazwischen befindet sich ein magnetisch weicher Verschluss, der den Sensor vor dem Magneten schützt, während er sich in Ordnung schließt. Angesichts dieser Heterogenität muss verstanden werden, wohin bei der Suche nach Nullen zu gehen ist. Zu diesem Zweck bietet das ursprüngliche Design eine Parkposition am Ende der Arbeiten. Es wurde jedoch überhaupt nicht implementiert: Als die Stromversorgung ausgeschaltet wurde, musste ich meinen Kopf mit der Hand auf der Z-Achse fangen und ihn manuell in die Parkposition weiterleiten.

Über Z ist die Hauptgeschichte. Dort lebt im Fall Z der Spritzenkolbenantrieb noch, ohne Nullsensor, aber mit Doppelrotationssensor - fast ein Encoder. Außerdem gibt es einen Sensor zum Drücken der Durchstechflasche mit einer Panne, der durch ein Schrägverzahnungsgetriebe und einen Hallsensor implementiert wird. Diese beiden Rotationssensoren sind Messingräder, die mit Zähnen magnetisch an den Hallsensoren vorbeiführen.

Warum ich einen Magnetcodierer brauchte (als Teil meiner privaten Aufgabe), verstand ich nicht und ersetzte ihn daher durch einen Nullsensor für den Kolbenantrieb, da die Hallen dort im Nachttisch waren, sowie den winzigen Neodym-Magneten vom DVD-Objektivantrieb.

Stattdessen



Es wurde



Das Hauptproblem beim Formen von Eisen bestand darin, sich zu stopfen. Ich wollte wirklich nichts in einer separaten Schachtel aufbewahren, daher passte alles an die dafür vorgesehenen Stellen, aber jetzt würde ich es etwas anders machen.

Teil zwei, Software

Tests auf dem CNC-Typenschild zeigten eine anständige Geschwindigkeit. ABER! Wenn Sie versuchen, dem SD sofort die dieser Geschwindigkeit entsprechende STEP-Frequenz anzubieten, erhalten Sie nur ein Knurren. Um angemessene Bewegungsgeschwindigkeiten zu erreichen, muss der Schrittmotor beschleunigt werden, so als ob Sie die Zahnräder und Antriebsschienen (auch oder Kugelumlaufspindeln oder Riemen) schätzen und dann sanft verlangsamen. Weil der Trivialcode etwas gewachsen ist.

Da es fast unanständig ist, mit einem Artikel ohne Code in den Bereich "Robotik" zu gelangen, z. B. Laufwerk-Z-Steuerung (für Schuld). Wenn Sie eine Frequenz an STEP ausgeben, hat digitalWrite keine Zeit, Sie müssen den Port direkt abziehen. Es wurde wahrscheinlich verzögert und verzögert, aber der Code stammte von der XY-Steuerung, und dort ist Gleichzeitigkeit erforderlich.

//*****************  Z ************************* void movement_z (unsigned int tz, int spd) { long interval_z; long spd_z = 2000; unsigned long cur_micros; unsigned long prev_micros_z =0; int half_z; byte full_mask = mask_z; int dz = tz - z; z=z+dz; if (dz <0) digitalWrite(pin_dir_z, HIGH); else digitalWrite(pin_dir_z, LOW); dz = abs(dz); half_z = int(dz/2); interval_z = spd; do { if (dz>0){ cur_micros = micros(); if(cur_micros - prev_micros_z > spd_z) { if ( dz>half_z ) {if (spd_z > interval_z) {spd_z = spd_z - 5;} else spd_z = interval_z;} if ( dz<300 ) {if (spd_z < 1000) spd_z = spd_z + 2; else spd_z = 3000;} prev_micros_z = cur_micros; if (dz>0) {PORTB = PORTB | mask_z; dz--;} }} delayMicroseconds(5); PORTB = PORTB & B11110000; } while( dz != 0); } //************************************************************* 

In der Reihe der Funktionsebenen:

  • niedrig - geh hin und her, finde etwas - weiß nicht was
  • mittel - auf Null kalibrieren, Spritze ziehen, Probe entnehmen
  • Hochzyklusdiagramm des Bypasses der n-ten Anzahl von Fläschchen auf einer Palette

Das Programm beginnt mit der Initialisierung der Ports, dem Ablesen der angegebenen Konfiguration über die Schalter auf der Rückseite und dem Ausarbeiten des Sequenzdiagramms nach dem Drücken von START, bis eine Position auf der Palette gefunden wird, in der sich kein Fläschchen mit der Probe befindet.

Das Hauptsequenzdiagramm sieht folgendermaßen aus:

 inline void frame_1(){ for (unsigned int i=0; i<6; i++){ // 6 for (unsigned int j=0; j<9; j++){ // 9 for (unsigned int k=1; k < probe+1; k++){ for (unsigned int l=1; l < inj+1; l++){ sound1(); delay(1000); if (inj == 2) {tone(tone_p,5000);delay(200);noTone(tone_p);delay(200);tone(tone_p,5000);delay(200);noTone(tone_p);} if (inj == 1) {tone(tone_p,5000);delay(200);noTone(tone_p);} Serial.print("going to x = ");Serial.print(j+1);Serial.print(" y = ");Serial.print(i+1); Serial.print(" probe = ");Serial.print(k); Serial.print(" inj = ");Serial.println(l); show_xyzp(); movement_z (0,450); movement_xy (prime_x-j*272, prime_y+i*372,500); movement_z(1800,300); if (z>2500) ost(); fill(); while(sensor()); if (inj == 1) {click_mouse(); Serial.println("mouse CLICKED for FLUSH and inj=1");} if (inj == 2 && l==1) {click_mouse(); Serial.println("mouse CLICKED for FLUSH and inj=2");} septa_pos(); while(sensor()); sound2(); inject(); } delay(3000); click_mouse(); Serial.println("mouse CLICKED for INJECT"); find_zero_xy(); movement_xy (3257, 1247,500); movement_z (6000,100); movement_z (0,100); } } } } 

Atavismen in Form der Ausgabe von Debugging-Informationen an Serial blieben im Code - für zukünftige Verbesserungen vorbehalten. Wenn einer fast ausgereift ist und viermal so viele Analysespritzen hat, müssen Sie zu Beginn eine weitere Auswahl hinzufügen.



Das Hauptproblem beim Kompilieren des Programms bestand darin, dass der Analysator im Original dem Autosampler angibt, wohin und was zu tun ist. All dies geschieht über den COM-Port und das Protokoll, das nirgendwo zu finden ist. Weil ich raus musste.

Der Analysator verfügt über einen manuellen Modus für diejenigen, die keinen Autosampler für Eichhörnchen gekauft haben. Gleichzeitig erscheint auf dem Analysatorbildschirm eine dunkle Schaltfläche „Probe bereit“. Wenn der Bediener erstochen wird, muss er sie mit der Maus (Tracker auf dem Analysatorfeld) drücken. Wenn die Messung abgeschlossen ist, wird eine dunkle Schaltfläche „Spülen starten“ angezeigt. Wenn der Bediener eine andere Probe hat, drückt er diese mit der Maus, um den Analysator für die nächste Messung vorzubereiten. Nach einem Mausklick verschwindet die Schaltfläche und es verbleibt ein weißes (helles) Feld. Ich habe mich entschlossen, diesen Helligkeitsunterschied mit einem Fotosensor zu erfassen. Ich überprüfe das Aussehen des dunklen Knopfes mit einem in den Saugnapf eingeklebten Fotowiderstand. Ich habe keinen schwarzen Saugnapf gefunden, und wenn die Sonne aus dem Fenster scheint, muss ich den Knopfsensor mit etwas abdecken.



Aber musst du etwas anklicken? Glücklicherweise verfügte der Analysator ab Anfang 2000 über einen USB-Anschluss und genügend unbeschnittene RedHat-Flaschen, um automatisch an diesen Anschluss angeschlossen zu werden. Der Arduino Pro Micro dient zur Emulation der Maus auf der neuen Hauptplatine des Autosamplers. Es erhält eine PIN von NANO in dem Moment, in dem auf den Analysator geklickt werden muss. Es war zu faul, um Bewegungen zu schreiben, da die Maus vor Arbeitsbeginn auf den Knopf gesetzt werden musste.

O GLÜCK, das mit der Erfahrung belastet ist, ich habe den Mäuseteil von dem anderen leitenden galvanischen, billigen Penny-Optron losgelassen. WEIL am Ende des zweiten Tages des Debuggens von Sachleistungen, als bereits alles funktionierte und ich den Piepser so einrichtete, dass er ähnliche Klänge wie die Originalen lieferte, setzte einer der Fahrer magischen Rauch frei und verband das 12-V-Netzteil mit dem 5-V-Netzteil. Naja, nichts, ein halber Tag, an dem man ihn durch einen aus einem bodenlosen Nachttisch entnommenen ersetzt, ist keine 100.000-Dollar-Reparatur für einen Analysator. Später stellte sich heraus, dass das neue REXANT-Netzteil, das anstelle eines vergessenen Hauses gekauft wurde, zu einem bestimmten Zeitpunkt fast 50 statt 12 V produzierte, was zu einer unglücklichen Verzögerung führte.

Dritter Teil, Kalibrierungs- und Zuverlässigkeitstest

Nach dem Zusammenbau und dem anfänglichen Debuggen trat das Problem der Positionszählung nach dem tatsächlichen Ort der Ampulle auf. Ich musste eine Tastatur erstellen und eine einfache Schnittstelle dazu in der Serie schreiben. Es waren keine Ports mehr vorhanden, aber im Extremfall wurden die für i2c verantwortlichen Pins gespeichert. Sie werden an den PCF8574-Folk-Extender mit bis zum Plus hochziehbaren Mikrotasten aufgehängt, mit denen das XY bewegt, ein Schrittmultiplikator ausgewählt, um den Vorgang zu beschleunigen, und XY in ZP geändert werden kann. Nach jedem Klick in der Reihe wird eine neue Position angezeigt. Dank dieser einfachen Technik konnten alle aktuellen Koordinaten und Inkremente schnell und genau ermittelt werden. Außerhalb des Kalibrierungsvorgangs sind die Moduswahlschalter und die Taste zum Auslösen des Zyklogramms mit den Eingängen des Expanders verbunden. Im Video sind ungefähr in der Mitte sowohl Tasten als auch Kippschalter sichtbar.

Spritzen zum Füttern einer Probe sind nicht billig - 100 US-Dollar pro Stück. Ein Positionierungsfehler kostet eine verbogene Nadel und eine unwiderruflich verschraubte Spritze. Daher wurde eine kaputte Spritze mit einer aufgeklebten Nähnadel eingeführt und die Vorrichtung fast einen halben Tag lang an vier Stellen auf einem Blatt Papier gedroschen, um mutmaßliche Positionierungsfehler zu identifizieren. Aber sie waren nicht da, ich war sogar überrascht. Da jedoch genügend Zeit zwischen Stichprobe und Rekrutierung einer neuen Probe verbleibt, habe ich sie für alle Fälle zur Suche nach Nullen verwendet. Im Video ist dieser Moment näher am Ende des Videos zu sehen.

Nachwort


Im Allgemeinen war es eher erfolgreich. Zwei Wochen vergingen vom Verständnis der Hoffnungslosigkeit bis zur Übertragung auf die Produktion. Betrieb seit Ende Mai, produziert bis zu 200 Messungen pro Tag. Der für die Probenahme und Messung zuständige Kollege beschwert sich nicht.

Kirschen für den Kuchen waren neue Funktionen, die nicht im Original waren. Die Fähigkeit, sich gleichzeitig auf XY zu bewegen. Die Fähigkeit, die Probe doppelt zu fixieren, was die Empfindlichkeit des Analysators bei extrem niedrigen Konzentrationen der gemessenen Substanz in der Probe erhöhte. Automatisches Parken nach der Messung.

PostScriptum


Auf Wunsch der Interessenten ein Video.

Source: https://habr.com/ru/post/de474564/


All Articles