Forum: PC-Programmierung mcscomm.ocx / mscomm.ocx - AktiveX - RS232


von werner (Gast)


Lesenswert?

Hi,

geht das MCSCOMM.OCX des BASCOM Herstellers MCS.

http://www.mcselec.com/index.php?option=com_docman&task=doc_details&gid=151&Itemid=54

Es soll lizensfrei sein?
Ich habe es runter geladen.
Was macht man, wie damt?
Dort gibt es keine oder "komische" Antworten.
Klar, sie geben keinen Support...
Nur ohne jede Anleitung; wie benutzt man es?

Habe ich da etwas nicht gefunden?

Ich will ein ACCESS Form mit einem AktiveX für RS232 verwenden.
Das MS MSCOMM.OCX möchte ich wegen der Lizensrechte vermeiden.

Alles was mit dem MSCOMM.OCX funktioniert geht mit dem MCSCOMM:OCX 
nicht.
Wieso?

Wo findet man Properties, EventProcedures, Events, usw.. des 
MCSCOMM.OCX?

Was ist mit den DEMOS?
NIX?
VB CODE, der eigentlich NIX is?
Weder frm noch prj enthalten irgendetwas sinnvolles, ausser header?

Werner Ratlos

von Wolfram (Gast)


Lesenswert?

Der Link den du angibst, führt zu einem Download, der ein komplettes 
Projekt enthält. Die Komponente kannst du dir in der Objektansicht 
anschauen. Das Projekt demonstriert wie man sie benutzt. Was brauchst du 
denn noch?

Zitat von der obigen Downloadseite:
---
Description:
The MCS COMM OCX is a free OCX control that can be used for serial 
communications.
There is a VB6 and VB NET example included.

Unlike the Microsoft OCX, the MCS COMM is royalty free and does work 
with events.

Update on 15 Dec. 2006. it now can open any available COM port.
See the included VB example.
---

Dateinamen aus dem Archiv:
MSSCCPRJ.SCC
mcscomm.ocx
MCSCOMDEMO.vbw
MCSCOMDEMO.vbp
frmCOM.frx
frmCOM.frm


Und nun noch zu deinen Fragen, falls du sie immer noch haben solltest:
>Es soll lizensfrei sein?
- Ja

>Ich habe es runter geladen.
- Toll

>Was macht man, wie damt?
- COM Schnittstellen benutzen, z.B. mit Access

>Dort gibt es keine oder "komische" Antworten.
- liegt es an den komischen Fragen?

>Klar, sie geben keinen Support...
- bei solchen Fragen verständlich

>Nur ohne jede Anleitung; wie benutzt man es?
- Kenntnis der jeweiligen Programmiersprache wird vorausgesetzt

>Habe ich da etwas nicht gefunden?
Das ist eine provokative Frage, oder?

>Alles was mit dem MSCOMM.OCX funktioniert geht mit dem MCSCOMM:OCX
>nicht. Wieso?
- Andere Schnittstellen?

>Wo findet man Properties, EventProcedures, Events, usw.. des
>MCSCOMM.OCX?
- Objektviewer

>Was ist mit den DEMOS?
>NIX?
>VB CODE, der eigentlich NIX is?
???

Probier es mal mit der Projektdatei, oder schau dir den VB-Code an.

von werner (Gast)


Lesenswert?

Hi,

nun ich habe nochmal etwas Zeit investiert.

Provozieren wollte ich sicher nicht.

VisualBasic habe ich bislang nur in ACCESS benutzt.
So fiehl es mir schwer mit meiner VisualBasic Express Edition das 
Projekt zu öffnen / einzusehen. Die Umgebung ist füe mich ungewohnt.
Nach einer "Konvertierung" (verstehe nicht genau was es da gemacht hat) 
:
Tatsächlich, da ist alles.

Nach Registrierung der AktiveX Komponente wird sie nun auch in ACCESS 
angeboten und funktioniert allem Anschein nach.
Die Registrierung funktionierte jedoch nicht sofort.
Ich habe es mehrmals wiederholt, irgendwann fand ich dann "CommX" unter 
den registrierten ActiveX Controls.
Vermutlich habe früher ich nach irgendwas wie "MCSCOMM" oder so gesucht.
Der nun erstellte Verweise nennt sich auch wiederrum "MCS/Communication 
Library" in den Verweisen.
Etwas verwirrend.

Danke, Wolfram sicheres Auftretten überzeugte mich das es wohl geht / 
gehen muss.

werner

von werner (Gast)


Lesenswert?

Hi, nochmals...

nach wieder etwas mehr Zeit.

Ich habe und will den extended USART des ATmega8 im 
MultiProcessorCommunicationMode MPCM nutzen.
5 Slaves an einer RS232.
Im 9 Bit Modus "hört" nur der adressierte Kandidat.

Mit MSCOMM.OCX kann man mit PARITY Mark or Space ein 9tes Datenbitbit 
generieren.

Bei MCSCOMM.OCX finde ich die Einstellung der Parität nicht.
Weiter weiss ich nicht wie man Framing-Parity Errors, Overflows, Brake 
etc. erkennen kann. Kurz irgendeine Info zum UART Status mit 
MCSCOMM.OCX?



mfg werner

von werner (Gast)


Lesenswert?

... und noch etwas später?

Mit MCSCOMM.OCX kann ich unter WINDOWS/XP beliebige Com:x öffnen.
Diese sind aber nicht existend.
Gesendet wird virtuell..ohne Fehlermeldung. Empfangen dann natürlich 
NIX.
Deren Status kann ich wie o.g. (noch) nicht abfragen.

Auf einem zweiten Kandidaten, ein PC mit WINDOWS 2000, lies sich 
MCSCOMM.OCX wie weiter oben geschildert registrieren.
Dennoch die gleiche ACCESS Anwendung wie auf dem XP Rechner will nicht:
"In diesem Steuerelement befindet sich kein Objekt"
Da das MCSCOMM das einzige Steuerelement im Formular ist, ist wohl 
dieses gemeint.
Das Element hat selbst in der Entwurfsansicht keine Eigenschaften welche 
die serielle Schnittstelle betreffen, seltsam.
Art,Name und OLE Anbindung vohanden und OK , Eigenschaften und 
Ereignisse der Com - NOP.

Mit einem MSCOMM.OCX gehen beide Rechner/Installationen in Ordnung.

mfg werner

von Wolfram (Gast)


Lesenswert?

Wie registrierst du die dll?
Funktioniert die Demo?

von werner (Gast)


Lesenswert?

Hi,

nun die Datei MCSCOMM.OCX kopierte ich in "C:\WINDOWS\SYSTEM32" bzw. 
"C:\WINNT\SYSTEM32" auf dem 2000er.

In ACCESS  findet man bei aktivem Datenbankfenster:

"Extras - ActiveX Steuerelemente"
Es öffnet ein Dialogfenster mit bereits regstrierten ActiveX Controlls.
Wird das gewünschte nicht gelistet gibt es die Option "Registrieren..."
Hier war der Stolperstein gestern, alias "CommX".
In einem FileSelector kann man nun auf den Pfad der gewünschten 
Komponente verweisen. Also "C:\WINDOWS\SYSTEM32\MCSCOMM.OCX"

Von nun an kann man es in der ToolBox wählen und in Formularen 
platzieren.

In der Entwurfsansicht von Modulen findet man nun ebenfalls einen 
Verweis auf "MCS Communication Library", gecheckt.

Die Vorgehensweise ist bei ACCESS'97 und ACCESS'2000 identisch.
So habe ich es bislang bei allen benutzten ActiveX Controls gemacht.

Die VB Demo läuft auf dem XP Rechner, auf dem 2000er ist kein VB 
installiert.

WINDOWS ME und 98 habe ich noch nicht getestet, bräuchte ich aber auch.

mfg werner

von werner (Gast)


Lesenswert?

... wennich so lese: vielleicht missverständlich...

Auf dem XP Rechner funktioniert die VB DEMO und das ACCESS Formular mit 
CommX.
Nur die Com (Port) kann in ACCESS beliebig benannt werden, wobei nur die 
vorhandene funktioniert.

von werner (Gast)


Lesenswert?

Konkret fehlt mir

MSCOMM.OCX                                            MCSCOMM.OCX


BREAK                                                 ???
Sets or clears the break signal state.

COMMEVENT
Returns the most recent communication event or error. ???

SETTINGS
Sets/returns the baud rate, parity,                   DATABITS
data bit, and stop bit parameters.                    STOPBITS
parity: Odd, Even, Mark, Space, None 
Parität ???

ONCOM                                                 ???
Occurs whenever the value of the
CommEvent property changes.

Ich kann das auch ohne BREAK und 9Bit Modus machen.
Ein nicht verfügbabes Port sollte aber erkannt werden können.
Sei es bereits geöffnet oder nicht existierend.
Geht das auch mit MCSCOMM.OCX

mfg werner

von Wolfram (Gast)


Lesenswert?

>Ich habe und will den extended USART des ATmega8 im
>MultiProcessorCommunicationMode MPCM nutzen.
>5 Slaves an einer RS232.
>Im 9 Bit Modus "hört" nur der adressierte Kandidat.

was du vorhast "geht" mit der seriellen Schnittstelle des PC. Die 
Betonung liegt auf geht nicht "läuft". Sowas mit einem OCX wie MSCOMM 
oder MCSwieauchimmer zu machen, solltest du vergessen. Da hast du 
zuwenig Kontrolle.
Prinzipiell kann man sowas in C mit mit WinAPI machen (Createfile) der 
DCB muß nur entsprechend eingestellt und umgestellt werden. Die Sache 
ist nur das es Probleme mit der Pufferung gibt. Ich kenne da auch 
Lösungen die noch aus DOS-Zeiten stammen und die serielle Schnittstelle 
direkt programmieren, die haben unter WIN9x sehr gut funktioniert unter 
WIN2000/XP haben sie aber eine derart hohe CPU Belastung, daß der Aufbau 
der Oberfläche nur Seeeeehhhhhr langsam vonstatten geht(bei 9600 Baud).
Das Problem läßt sich einfach umgehen. Ein z.B.ATMEGA162 kommuniziert 
mit dem Rest im 9bit Modus, zum PC kommuniziert er mit 8Bit und höherer 
Baudrate als Gateway.

Zu deinem Lizenzproblem:
MSCOMM.OCX ist Bestandteil der VBRuntime, die kann man offiziell beim 
Hersteller runterladen.
Wenn du trotzdem nicht ruhig schlafen kannst, besorg dir ein VB6. 
Findest du wahrscheinlich in der Mülltonne hinter irgendeiner 
Softwarebude weil die inzwischen VB.Net einsetzen.
Das du Win9x unterstützen willst ist sehr löblich, immerhin bietest du 
länger Support als der Hersteller des Betriebssystems. Solltest du dies 
irgendwann nicht mehr tun, kannst du dir auch eine Komponente in VB.Net 
schreiben die den Seriellen Port kapselt.

von werner (Gast)


Lesenswert?

Hi, danke für Deinen Beitrag.

Die CPU Belastung hält/hielte sich in Grenzen.
Die Slaves "reden" nur wenn sie gefragt werden, das geht auch im 9Bit 
Modus nicht anders. So weiss ich genau wann der PC "hören" muss.

Der Transfer beschränkt sich auf maximal 5 Bytes zum- und 5 Bytes vom 
Slave. Die Baudrate ist 38400Baud, alle Slaves müssen vom PC UND 
voneinander galvanisch getrennt sein.

Da die Slaves Spannungen regeln möchte ich die, die es nicht angeht 
möglichst wenig stören

Mit MSCOMM.OCX finde ich eine andere Merkwürdigkeit:
Die Migration von 2003 > 2000 > 97 geht nicht?
MSCOMM ist in der jeweils älteren Variante ein Object ohne Inhalt.
Anders herum geht das ? 97 > 2000 > 2003
Nur ACCESS'97 hat die unbequemste Entwicklungsumgebung.

Warum diese alten Kisten? Es sollen betagte und alte Rechner für mein 
Projekt einsetzbar sein, dafür reichen sie allemal

http://www.razyboard.com/system/morethread-wrdkasoftware-wiesollichnurheissen-1542505-3796612-0.html

mfg werner

P.S. Ich weiss nicht ob das neu ist, ich habe es so noch nie gesehen ...

'----------------------------------------------------------------------- 
---
'name                     : GetNBytes
'copyright                : (c) 2007, Werner Braun
'purpose                  : WRD (testing)
'micro                    : PC MS ACCESS / VB
'suited for demo          : yes , only
'commercial addon needed  : no
'version                  : ZERO , to be changed without notice
'----------------------------------------------------------------------- 
---

'Funktion zur Übernahme von N Zeichen vom MICRO8
'Typischer Aufruf: String = GetNBytes (4)

'Ausgabe: String N Bytes lang
'         Leerstring bei TimeOut

Option Compare Binary
Option Explicit

Public Function GetNBytes(n As Integer) As String
Dim strTemp As String
Dim intTemp As Integer

GetNBytes = ""
intTemp = 0

While Len(GetNBytes) < n And intTemp < 500
    strTemp = Forms!Hauptformular.ComPort.Input
    If strTemp <> "" Then
        GetNBytes = GetNBytes + strTemp
        intTemp = 0
    End If
    intTemp = intTemp + 1
Wend

If Len(GetNBytes) < n Then GetNBytes = ""
' TimeOut , ...

End Function

... funktioniert aber cool.

von Erwin (Gast)


Lesenswert?

Hallo,

ich habe ebenfalls versucht mcscomm in Einsatz zu bringen - allerdings 
ohne Erfolg.
Ich arbeite mit Access und habe VB nicht installiert, deshalb war es mir 
nur begrenzt möglich die Beispiele vom Hersteller anzuschauen. Andere 
Beispiele oder eine kurze Gebrauchsanleitung habe ich nicht gefunden.

Ich wollte mit mcscomm nur eine Ausgabe auf einen Etikettendrucker 
machen. Dies hat aber nicht funktioniert, nach einigen Etiketten kam es 
zum Datenüberlauf, ich habe alles versucht aber keine Lösung gefunden.
Der Drucker ist auf DTR eingestellt, ich habe es auch mit XON-XOFF 
versucht, aber ebenfalls ohne Erfolg.

Mir ist nicht klar wie ich bei mcscomm nach dem Senden der Daten 
abfragen kann ob es erfolgreich war und dies gegebenenfalls wieder holen 
kann.
Auch die Parameterübergabe konnte ich nur erahnen weil es keine 
Dokumentation gibt und die Beispiele die für mich sichtbar waren sehr 
dürftig sind.

Ich habe mcscomm entfernt und mache es wieder auf die unelegante Weise, 
aber diese funktioniert wenigstens.

Ich hatte es wie folgt programmiert:

 'Port.PORTNAME = "\\.\" & Mid(Druck, 1, 4)
 'Port.COMPORT = Mid(Druck, 4, 1)
 'Port.BaudRate = 9600
 'Port.DATABITS = 8
 'Port.StopBits = 1
 'Port.HWFLOW = 0
 'Port.SWFLOW = 0
 'Port.INPUTTIMEOUT = 200
 'Port.OUTPUTTIMEOUT = 500
 'Port.ENABLEDTRONOPEN = -1
 'Port.Open
 'Port.SEND (Ausgabe)
 'Port.Close

Dieser Routine habe ich aus dem Druckprogramm aufgerufen.

Ich habe bei den Parametern auch andere Varianten getestet - auch 
vergebens.
Weiß vielleicht jemand ob sowas mit mcscomm überhaupt funktioniert - 
oder habe ich nur einen wichtigen Parameter vergessen?

Ich gespannt welche Erfahrunge andere damit machen.

mfg
Erwin

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.