Aktuelle Zeit: 26.09.2020 08:45

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: MVCom / PB Serial welche pro-contras ?
BeitragVerfasst: 09.07.2009 20:49 
Offline

Registriert: 30.08.2004 08:34
Wohnort: Thailand
Jetzt habe ich auch mal wieder ein paar Fragen:


1.
Welchen Vorteil / Nachteil hat MV Com zur PB eigenen seriellen Ansteuerung

2.
wie realisiere ich eine permanente Überwachung ob Daten ankommen, ohne PB darauf warten zu lassen ob sich was am ser. Port tut,
z.B. ein Programm wird ausgeführt kann ein Player oder sonstiges sein,
dann wird von einem Microcontroller 100 100 100 an den ser.Port gesendet, bedeutet eine xy Procedure soll ausgeführt werden.
dazu brauche ich AvailableSerialPortInput() in der Hauptschleife - richtig ?

3.
in einer Prüfung sende ich Daten an die Schnittstelle und vom Atmel soll eine Rückmeldung kommen, in einem x Zeitpunkt (For-To Schleife bei mir)
das funktioniert auch soweit super, nur ist es die eleganteste Lösung die ich verwende ?


Code:
Dim Bufferx.c(1)
  Dim Buffer.c(7)
  Buffer(0) = 25
  Buffer(1) = 55
  Buffer(2) = wert1     ; Adresse MSB   z.B. 256 = 1
  Buffer(3) = wert2     ; Adresse LSB   bis 255
  Buffer(4) = daten     ; gespeicherter Bildwert ,   INFO: ein Bild hat 14 Bytes
  Buffer(5) = 0
  Buffer(6) = wert4     ; berechnetes letztes LSB
  Buffer(7) = 0
   
  WriteSerialPortData(#serport, @Buffer(0), 8)
For i = 1 To 100
 
  ReadSerialPortData(#serport, @Bufferx.c(0), 2)

  If Bufferx.c(0) = 26 And Bufferx.c(1) = 0
  Break 
EndIf


gruß Gerhard


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 11.07.2009 02:07 
Offline
Admin
Benutzeravatar

Registriert: 29.08.2004 11:27
Punkt 1
Was soll man da vergleichen? Es sind in der MVCOM gegenüber
PB mehr Funktionen enthalten. Aber PB hat das Wichtigste, das
man braucht.

Punkt 2
Ich würde das mit einem Thread versuchen, der z.B. in einer kurzen Zeit unabhängig vom Hauptprogramm den Input überprüft und puffert.
Das Hauptprogramm würde dann in größeren Abständen prüfen, wieviel Bytes im Puffer sind und diese dann auslesen.
Ich habe mal probiert, wie man es machen könnte. Evtl. müsste man den Thread nach dem Auslesen des Puffers beenden und dann wieder neu starten usw. .

Code:
Procedure Timer(*MemoryID); Kein Delay verwendet, was den Thread anhalten würde!
  Protected Time.l=1000
  Protected bytes.b=0
  Protected Text.s
  start=ElapsedMilliseconds()
  Repeat
  Anzahl=ElapsedMilliseconds()-start-14
  If Anzahl >=1000
  ;Debug Anzahl
  Text+Str(Random(100))
  PokeS(*MemoryID,Text)
  bytes+1
  start=ElapsedMilliseconds()
  EndIf
  ForEver
EndProcedure

*MemoryID=AllocateMemory(5000)
CreateThread(@Timer(),*MemoryID)

Repeat
  Debug PeekS(*MemoryID)
  Delay(5000)
ForEver


Ich hoffe es ist so korrekt mit dem gemeinsamen Speicher.

Gruß Falko

_________________
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 24.07.2009 00:55 
Offline

Registriert: 30.08.2004 08:34
Wohnort: Thailand
Hallo Falko (irgendwie habe ich gewußt das du dich meldest :-)

erstmal danke für deine Antwort, aber ich muß erstmal am Wochenende
einen Atmel proggen das ichs testen kann

kann ich eigentlich nicht in die Hauptschleife z.B. diesen Code ausführen,
denn im Normalfall wird ja nach dem auslesen der serielle Puffer auf null gesetzt von Windows
oder irre ich mich da


Code:
if AvailableSerialPortInput(#SerialPort) > 0
proze_serial_auslesen()
endif


gruß Gerhard


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 24.07.2009 13:05 
Offline
Admin
Benutzeravatar

Registriert: 29.08.2004 11:27
>>>kann ich eigentlich nicht in die Hauptschleife z.B. diesen Code ausführen, denn im Normalfall wird ja nach dem auslesen der serielle Puffer auf null gesetzt von Windows oder irre ich mich da

Hallo Gerhard,

Die Lösung mit der der IF-Abfrage in der Hauptschleife nutze ich bei der elektronischen Waage. Das geht prima. Wie das mit Windows funktioniert, kann ich leider nicht beantworten.

Diese PDF beschreibt die serielle Schnittstelle sehr gut.

http://www.designin.de/Artikel/PC-Schni ... C-MT04.PDF


Gruß Falko

_________________
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 24.07.2009 13:42 
Offline

Registriert: 30.08.2004 08:34
Wohnort: Thailand
Danke Falko

sobald ich getestet habe melde ich mich wieder

gruß Gerhard


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 28.07.2009 14:44 
Offline

Registriert: 29.11.2005 15:05
Du kannst doch mit Purebasic abfragen ob etwas im Buffer ist.
Die For-Schleife ist total ungünstig, zumal der Atmega keine Kontrollbytes über 2 zusätzlichen Leitungen rauschickt, bzw auf Empfang kontrolliert.
Oder muss diese zusätzlichen Leitungen vom Atmega an den Max anschliessen auf der Platine, die dann von Pure abgefragt werden.

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 28.07.2009 15:48 
Offline

Registriert: 30.08.2004 08:34
Wohnort: Thailand
@super-castle

ich frage doch mit PB ab

Beispiel:
ich sende Daten an einen Controller, dieser gibt an PB eine OK Meldung zurück
danach sende ich die nächsten Daten warte auf die Antwort, danach weiter weiter weiter
es muß nach jedem gesendeten Datensatz eine OK-Meldung zurückkommen, ob die Daten korrekt im Controller gelandet sind

sollte der Port nicht funktionieren oder keine Meldung ankommen, wartet PB doch sonst ewig drauf und ich hänge in einer Endlosschleife.

mit der For-Next schleife gebe ich dem Controller die Möglichkeit in dem X-Zeitraum zu antworten,
kommt keine Antwort ... Abbruch
kommt eine Antwort springt er sofort aus der Schleife

ohne die For-Next habe ich schon erlebt das die Daten etwas zu spät kommen und dann hängts,
erfahrungsgemäß kommen korrekte Daten zwischen dem 1. und 10. Durchlauf der Schleife zurück

gruß Gerhard


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 28.07.2009 21:47 
Offline
Admin
Benutzeravatar

Registriert: 29.08.2004 11:27
Leider kann ich das selbst nicht testen. Dazu müsste ich mir selbst was mit Atmel zurecht machen. Aber man kann auch prüfen, ob noch Daten vorhanden sind, die gelesen werden müssten. Die Abbruchbedingung habe ich so gelassen.

Hier dein Beispiel etwas abgeändert. Ist aber ungeprüft.



Code:
Dim Bufferx.c(1)
  Dim Buffer.c(7)
  Buffer(0) = 25
  Buffer(1) = 55
  Buffer(2) = wert1     ; Adresse MSB   z.B. 256 = 1
  Buffer(3) = wert2     ; Adresse LSB   bis 255
  Buffer(4) = daten     ; gespeicherter Bildwert ,   INFO: ein Bild hat 14 Bytes
  Buffer(5) = 0
  Buffer(6) = wert4     ; berechnetes letztes LSB
  Buffer(7) = 0
   
  WriteSerialPortData(#serport, @Buffer(0), 8)
;For i = 1 To 100
 While AvailableSerialPortInput(#serport); oder While AvailableSerialPortInput(#serport) > 0
  ReadSerialPortData(#serport, @Bufferx.c(0), 2)

  If Bufferx.c(0) = 26 And Bufferx.c(1) = 0
  Break
  ;EndIf
 Wend


Gruß Falko

_________________
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 29.07.2009 09:11 
Offline

Registriert: 30.08.2004 08:34
Wohnort: Thailand
Hi Falko

in meinem Fall kann ich mir das While AvailableSerialPortInput(#serport) schenken,
sollte nämlich die Schleife bis 100 durchgelaufen sein
und die zwei Buffer keinen oder einen falschen Wert haben,
kommt danach sowieso eine Fehlermeldung


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye