Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
Bura.Tino
Beiträge: 38 Registriert: 08.12.2005 05:52
Beitrag
von Bura.Tino » 11.08.2006 02:58
Servus.
Ich habe mir einen Bausatz einer K8056-Relaiskarte von Velleman zugelegt und mit dem Testprogramm vom Hersteller auch ausprobiert. Funktioniert wunderbar.
Nun wollte ich mir ein Programm schreiben mit dem ich die Relais steuern kann. Aber leider funktioniert es nicht, weil ich nicht weiß was ich an die Karte senden muss.
In der dazugehörigen
Bedienungsanleitung (Seite 34 in der PDF) steht das man folgende Befehlsfolge senden muss:
1. Chr(13)
2. Kartenadresse
3. Befehl
4. Adresse oder Relaisnummer
5. Checksum Summe
Als Checksumerklärung steht noch folgendes da:
2-Komplement der Summe der 4 vorigen Bytes+1
Was meinen die damit ? :-O
An der Karte ist unter anderem auch eine LED, die anzeigt ob Daten empfangen werden (Sie leuchtet auf, wenn sie was empfängt).
Nur bei meinem Programm bleibt sie aus. Müsste sie nicht eigentlich schon angehen, wenn ich nur chr(13) sende ?
msh
Beiträge: 8 Registriert: 28.06.2005 10:17
Beitrag
von msh » 11.08.2006 08:45
@Bura.Tino
Zum
Zweierkomplement -
hier klicken. (Google hätte Dir da auch geholfen).
Bitte beim nächsten mal die Anleitung ein wenig genauer lesen, da gibt es einen Link zum Hersteller u. es ist irgendwo eine Bsp.-Anwendung erwähnt.
In dieser findest Du in fast jeder Sub die komplette Prüfsummenberechnung (zweite Hälfte / hinter dem Form-Teil).
Hier mal der Inhalt der k8056.frm: (sorry an alle, das wird etwas länger - dahinter gibt es keinen Text mehr
)
Edit: beachte - checksum als Gleitkomma deklarieren, sonst funktioniert die im Code verwendete Formel nicht
o. einen Ausdruck in der Form
(VB)checksum = 255 - (13 + address + Asc("C") + Asc("2")) Mod 256 + 1
(PB)checksum = 255 - (13 + address + Asc("C") + Asc("2")) % 256 + 1
verwenden.
MfG Mike
VERSION 5.00
Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
Begin VB.Form form1
BorderStyle = 1 'Fixed Single
Caption = "8 Channel relay board"
ClientHeight = 5025
ClientLeft = 45
ClientTop = 330
ClientWidth = 6195
Icon = "K8056.frx":0000
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 5025
ScaleWidth = 6195
StartUpPosition = 3 'Windows Default
Begin VB.Timer Timer2
Enabled = 0 'False
Interval = 80
Left = 240
Top = 720
End
Begin VB.CommandButton Command24
Caption = "8"
Height = 375
Index = 7
Left = 3840
TabIndex = 53
Top = 4200
Width = 375
End
Begin VB.CommandButton Command24
Caption = "7"
Height = 375
Index = 6
Left = 3360
TabIndex = 52
Top = 4200
Width = 375
End
Begin VB.CommandButton Command24
Caption = "6"
Height = 375
Index = 5
Left = 2880
TabIndex = 51
Top = 4200
Width = 375
End
Begin VB.CommandButton Command24
Caption = "5"
Height = 375
Index = 4
Left = 2400
TabIndex = 50
Top = 4200
Width = 375
End
Begin VB.CommandButton Command24
Caption = "4"
Height = 375
Index = 3
Left = 1920
TabIndex = 49
Top = 4200
Width = 375
End
Begin VB.CommandButton Command24
Caption = "3"
Height = 375
Index = 2
Left = 1440
TabIndex = 48
Top = 4200
Width = 375
End
Begin VB.CommandButton Command24
Caption = "2"
Height = 375
Index = 1
Left = 960
TabIndex = 47
Top = 4200
Width = 375
End
Begin VB.CommandButton Command24
Caption = "1"
Height = 375
Index = 0
Left = 480
TabIndex = 46
Top = 4200
Width = 375
End
Begin VB.CommandButton Command22
Caption = "8"
Height = 375
Index = 7
Left = 3840
TabIndex = 44
Top = 3360
Width = 375
End
Begin VB.CommandButton Command22
Caption = "7"
Height = 375
Index = 6
Left = 3360
TabIndex = 43
Top = 3360
Width = 375
End
Begin VB.CommandButton Command22
Caption = "6"
Height = 375
Index = 5
Left = 2880
TabIndex = 42
Top = 3360
Width = 375
End
Begin VB.CommandButton Command22
Caption = "5"
Height = 375
Index = 4
Left = 2400
TabIndex = 41
Top = 3360
Width = 375
End
Begin VB.CommandButton Command22
Caption = "4"
Height = 375
Index = 3
Left = 1920
TabIndex = 40
Top = 3360
Width = 375
End
Begin VB.CommandButton Command22
Caption = "3"
Height = 375
Index = 2
Left = 1440
TabIndex = 39
Top = 3360
Width = 375
End
Begin VB.CommandButton Command22
Caption = "2"
Height = 375
Index = 1
Left = 960
TabIndex = 38
Top = 3360
Width = 375
End
Begin VB.CommandButton Command22
Caption = "1"
Height = 375
Index = 0
Left = 480
TabIndex = 37
Top = 3360
Width = 375
End
Begin VB.ComboBox Combo3
Height = 315
Left = 4680
TabIndex = 35
Text = "49"
Top = 360
Width = 1095
End
Begin VB.ComboBox Combo2
Height = 315
Left = 3360
TabIndex = 34
Text = "49"
Top = 360
Width = 1095
End
Begin VB.CommandButton Command21
Caption = "O"
Height = 375
Left = 3840
TabIndex = 33
Top = 2160
Width = 375
End
Begin VB.CommandButton Command20
Caption = "1"
Height = 375
Left = 3840
TabIndex = 32
Top = 1800
Width = 375
End
Begin VB.CommandButton Command19
Caption = "O"
Height = 375
Left = 3360
TabIndex = 31
Top = 2160
Width = 375
End
Begin VB.CommandButton Command18
Caption = "1"
Height = 375
Left = 3360
TabIndex = 30
Top = 1800
Width = 375
End
Begin VB.CommandButton Command17
Caption = "O"
Height = 375
Left = 2880
TabIndex = 29
Top = 2160
Width = 375
End
Begin VB.CommandButton Command16
Caption = "1"
Height = 375
Left = 2880
TabIndex = 28
Top = 1800
Width = 375
End
Begin VB.CommandButton Command15
Caption = "O"
Height = 375
Left = 2400
TabIndex = 27
Top = 2160
Width = 375
End
Begin VB.CommandButton Command14
Caption = "1"
Height = 375
Left = 2400
TabIndex = 26
Top = 1800
Width = 375
End
Begin VB.CommandButton Command13
Caption = "O"
Height = 375
Left = 1920
TabIndex = 25
Top = 2160
Width = 375
End
Begin VB.CommandButton Command12
Caption = "1"
Height = 375
Left = 1920
TabIndex = 24
Top = 1800
Width = 375
End
Begin VB.CommandButton Command11
Caption = "O"
Height = 375
Left = 1440
TabIndex = 23
Top = 2160
Width = 375
End
Begin VB.CommandButton Command10
Caption = "1"
Height = 375
Left = 1440
TabIndex = 22
Top = 1800
Width = 375
End
Begin VB.CommandButton Command9
Caption = "O"
Height = 375
Left = 960
TabIndex = 21
Top = 2160
Width = 375
End
Begin VB.CommandButton Command8
Caption = "1"
Height = 375
Left = 960
TabIndex = 20
Top = 1800
Width = 375
End
Begin VB.CommandButton Command2
Caption = "O"
Height = 375
Left = 480
TabIndex = 19
Top = 2160
Width = 375
End
Begin VB.CommandButton Command1
Caption = "1"
Height = 375
Left = 480
TabIndex = 18
Top = 1800
Width = 375
End
Begin VB.CommandButton Command7
Caption = "change addr."
Height = 375
Left = 4680
TabIndex = 6
Top = 720
Width = 1095
End
Begin VB.CommandButton Command6
Caption = "show addr."
Height = 375
Left = 3360
TabIndex = 5
Top = 720
Width = 1095
End
Begin VB.CommandButton Command5
Caption = "Emergency S T O P"
Height = 1935
Left = 4800
TabIndex = 4
Top = 2760
Width = 975
End
Begin VB.CommandButton Command4
Caption = "CLEAR ALL"
Height = 375
Left = 4680
TabIndex = 3
Top = 2160
Width = 1095
End
Begin VB.CommandButton Command3
Caption = "SET ALL"
Height = 375
Left = 4680
TabIndex = 2
Top = 1800
Width = 1095
End
Begin VB.ComboBox Combo1
Height = 315
Left = 1800
TabIndex = 0
ToolTipText = "Select the serial port"
Top = 240
Width = 615
End
Begin VB.Timer Timer1
Enabled = 0 'False
Interval = 20
Left = 0
Top = 2880
End
Begin MSCommLib.MSComm comm
Left = -120
Top = 2280
_ExtentX = 1005
_ExtentY = 1005
_Version = 393216
CommPort = 2
DTREnable = -1 'True
RTSEnable = -1 'True
BaudRate = 2400
End
Begin VB.Frame Frame1
Caption = "Address"
Height = 1215
Left = 3120
TabIndex = 36
Top = 120
Width = 2775
End
Begin VB.Frame Frame2
Caption = "Toggle buttons"
Height = 735
Left = 360
TabIndex = 45
Top = 3120
Width = 4095
End
Begin VB.Frame Frame3
Caption = "Momentary buttons"
Height = 735
Left = 360
TabIndex = 54
Top = 3960
Width = 4095
End
Begin VB.Frame Frame4
Caption = "ON/OFF"
Height = 1095
Left = 360
TabIndex = 55
Top = 1560
Width = 5535
End
Begin VB.Label Label9
Caption = "8"
Height = 255
Left = 3960
TabIndex = 17
Top = 2760
Width = 135
End
Begin VB.Label Label8
Caption = "7"
Height = 255
Left = 3480
TabIndex = 16
Top = 2760
Width = 135
End
Begin VB.Label Label7
Caption = "6"
Height = 255
Left = 3000
TabIndex = 15
Top = 2760
Width = 255
End
Begin VB.Label Label6
Caption = "5"
Height = 255
Left = 2520
TabIndex = 14
Top = 2760
Width = 255
End
Begin VB.Label Label5
Caption = "4"
Height = 255
Left = 2040
TabIndex = 13
Top = 2760
Width = 255
End
Begin VB.Label Label4
Caption = "3"
Height = 255
Left = 1560
TabIndex = 12
Top = 2760
Width = 255
End
Begin VB.Label Label3
Caption = "Label3"
Height = 15
Index = 3
Left = 0
TabIndex = 11
Top = 0
Width = 135
End
Begin VB.Label Label3
Caption = "2"
Height = 255
Index = 2
Left = 1080
TabIndex = 10
Top = 2760
Width = 135
End
Begin VB.Label Label3
Caption = "Label3"
Height = 15
Index = 1
Left = 0
TabIndex = 9
Top = 0
Width = 135
End
Begin VB.Label Label3
Caption = "Label3"
Height = 15
Index = 0
Left = 360
TabIndex = 8
Top = 1680
Width = 135
End
Begin VB.Label Label2
Caption = "1"
Height = 255
Left = 600
TabIndex = 7
Top = 2760
Width = 255
End
Begin VB.Label Label1
Caption = "Choose serial port"
Height = 255
Left = 360
TabIndex = 1
Top = 240
Width = 1335
End
End
Attribute VB_Name = "form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim messagestring As String 'will contain all messages to transmit
Dim charcounter As Integer 'will keep track of the position in messagestring
Dim address As Integer
Dim factor As Integer
Dim port As String 'keeps serial port #
Private Sub Combo1_Change()
If comm.PortOpen = True Then comm.PortOpen = False
port = Combo1.Text
comm.CommPort = Val(Combo1)
comm.Handshaking = None
comm.Settings = "2400,N,8,1"
comm.OutBufferSize = 4096
comm.InputLen = 0
comm.RThreshold = 1
comm.SThreshold = 1
comm.DTREnable = True
comm.PortOpen = True
End Sub
Private Sub Combo1_Click()
If comm.PortOpen = True Then comm.PortOpen = False
port = Combo1.Text
comm.CommPort = Val(Combo1)
comm.Handshaking = None
comm.Settings = "2400,N,8,1"
comm.OutBufferSize = 4096
comm.InputLen = 0
comm.RThreshold = 1
comm.SThreshold = 1
comm.DTREnable = True
comm.PortOpen = True
End Sub
Private Sub Combo2_Change()
address = Val(Combo2.Text)
End Sub
Private Sub Combo2_Click()
address = Val(Combo2.Text)
End Sub
Private Sub Command1_Click()
checksum = (255 - ((((13 + address + Asc("S") + Asc("1")) / 256) - Int((13 + address + Asc("S") + Asc("1")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "S1" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command10_Click()
checksum = (255 - ((((13 + address + Asc("S") + Asc("3")) / 256) - Int((13 + address + Asc("S") + Asc("3")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "S3" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command11_Click()
checksum = (255 - ((((13 + address + Asc("C") + Asc("3")) / 256) - Int((13 + address + Asc("C") + Asc("3")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "C3" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command12_Click()
checksum = (255 - ((((13 + address + Asc("S") + Asc("4")) / 256) - Int((13 + address + Asc("S") + Asc("4")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "S4" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command13_Click()
checksum = (255 - ((((13 + address + Asc("C") + Asc("4")) / 256) - Int((13 + address + Asc("C") + Asc("4")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "C4" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command14_Click()
checksum = (255 - ((((13 + address + Asc("S") + Asc("5")) / 256) - Int((13 + address + Asc("S") + Asc("5")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "S5" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command15_Click()
checksum = (255 - ((((13 + address + Asc("C") + Asc("5")) / 256) - Int((13 + address + Asc("C") + Asc("5")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "C5" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command16_Click()
checksum = (255 - ((((13 + address + Asc("S") + Asc("6")) / 256) - Int((13 + address + Asc("S") + Asc("6")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "S6" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command17_Click()
checksum = (255 - ((((13 + address + Asc("C") + Asc("6")) / 256) - Int((13 + address + Asc("C") + Asc("6")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "C6" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command18_Click()
checksum = (255 - ((((13 + address + Asc("S") + Asc("7")) / 256) - Int((13 + address + Asc("S") + Asc("7")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "S7" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command19_Click()
checksum = (255 - ((((13 + address + Asc("C") + Asc("7")) / 256) - Int((13 + address + Asc("C") + Asc("7")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "C7" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command2_Click()
checksum = (255 - ((((13 + address + Asc("C") + Asc("1")) / 256) - Int((13 + address + Asc("C") + Asc("1")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "C1" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command20_Click()
checksum = (255 - ((((13 + address + Asc("S") + Asc("8")) / 256) - Int((13 + address + Asc("S") + Asc("8")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "S8" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command21_Click()
checksum = (255 - ((((13 + address + Asc("C") + Asc("8")) / 256) - Int((13 + address + Asc("C") + Asc("8")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "C8" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command22_Click(Index As Integer)
factor = Str$(Command22(Index).Index + 1)
checksum = (255 - ((((13 + address + Asc("T") + Asc(factor)) / 256) - Int((13 + address + Asc("T") + Asc(factor)) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "T" & factor & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command24_Click(Index As Integer)
Command5.SetFocus
Timer2.Enabled = False
End Sub
Private Sub Command24_GotFocus(Index As Integer)
factor = Str$(Command22(Index).Index + 1)
checksum = (255 - ((((13 + address + Asc("P") + Asc(factor)) / 256) - Int((13 + address + Asc("P") + Asc(factor)) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "P" & factor & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
Timer2.Enabled = True
End Sub
Private Sub Command3_Click()
checksum = (255 - ((((13 + address + Asc("S") + Asc("9")) / 256) - Int((13 + address + Asc("S") + Asc("9")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "S9" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command4_Click()
checksum = (255 - ((((13 + address + Asc("C") + Asc("9")) / 256) - Int((13 + address + Asc("C") + Asc("9")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "C9" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command5_Click()
checksum = (255 - ((((13 + address + Asc("E") + Asc("1")) / 256) - Int((13 + address + Asc("E") + Asc("1")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "E1" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command6_Click()
checksum = (255 - ((((13 + address + Asc("D") + Asc("1")) / 256) - Int((13 + address + Asc("D") + Asc("1")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "D1" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command7_Click()
checksum = (255 - ((((13 + address + Asc("A") + Val(Combo3.Text)) / 256) - Int((13 + address + Asc("A") + Val(Combo3.Text)) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "A" & Chr$(Val(Combo3.Text)) & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
Combo2.Text = Combo3.Text
End Sub
Private Sub Command8_Click()
checksum = (255 - ((((13 + address + Asc("S") + Asc("2")) / 256) - Int((13 + address + Asc("S") + Asc("2")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "S2" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Command9_Click()
checksum = (255 - ((((13 + address + Asc("C") + Asc("2")) / 256) - Int((13 + address + Asc("C") + Asc("2")) / 256)) * 256)) + 1
messagestring = Chr$(13) & Chr$(address) & "C2" & Chr$(checksum)
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
comm.Output = messagestring
End Sub
Private Sub Form_Load()
address = 1
For t = 1 To 255
Combo2.AddItem (Str$(t))
Combo3.AddItem (Str$(t))
Next t
Combo2.Text = "1"
Timer1.Enabled = False
On Error GoTo no_port
flag = True
comm.CommPort = "1"
comm.PortOpen = True
Combo1.AddItem ("1")
comm.PortOpen = False
retry_port:
flag = False
comm.CommPort = "2"
comm.PortOpen = True
Combo1.AddItem ("2")
comm.PortOpen = False
Combo1.Text = Combo1.List(0)
Exit Sub
no_port:
If flag = True Then GoTo retry_port
Combo1.Text = Combo1.List(0)
End Sub
Private Sub Form_Terminate()
comm.DTREnable = False
If comm.PortOpen = True Then comm.PortOpen = False
End Sub
Private Sub Timer1_Timer()
tekst = Mid$(messagestring, charcounter, 1)
If tekst = "$" Then tekst = Chr$(11)
comm.Output = tekst
charcounter = charcounter + 1
If charcounter = Len(messagestring) + 1 Then Timer1.Enabled = False
End Sub
Private Sub Timer2_Timer()
comm.Output = messagestring
End Sub
Bura.Tino
Beiträge: 38 Registriert: 08.12.2005 05:52
Beitrag
von Bura.Tino » 11.08.2006 13:42
Ja den Quelltext hab ich auch, aber das ist VB. Und das kann ich nicht.
Ich hab schon viel ausprobiert, aber es funktioniert einfach nicht.
Nach Deiner Schreibweise der Checksum sieht das bei mir so aus:
msg1.s=Chr(13)
address=1
msg2.s="S"
msg3.s=Chr(49)
checksum = 255 - (13 + address + Asc("C") + Asc("2")) % 256 + 1
Message.s=msg1+Chr(address)+msg3+msg4+Chr(checksum)
Um nochmal auf meine Frage zurückzukommen: Müsste die LED nicht auch aufleuchten, wenn ich nur Chr(13) sende ?
msh
Beiträge: 8 Registriert: 28.06.2005 10:17
Beitrag
von msh » 11.08.2006 15:34
@Bura.Tino
Um nochmal auf meine Frage zurückzukommen: Müsste die LED nicht auch aufleuchten, wenn ich nur Chr(13) sende ?
Nicht zwangsweise. Es währe durchaus denkbar, das die LED als eine Art opt. Empfangskontrolle fungiert und erst auf einen vollständig empfangenen Datensatz reagiert.
Der String selbst sollte erst mal i.O. sein, aber vergiss nicht diesen Teil aus dem Quellcode
Code: Alles auswählen
messagestring = messagestring & messagestring
messagestring = messagestring & messagestring
Der String wird vervierfacht (irgendwo in der Anleitung stand etwas - wenn ich mich richtig erinnere - , das er mindestens zwei mal im Stück gesendet werden soll und anschließend eine min. Pause von x ms eingehalten werden soll.
Weiterhin ist es wichtig, das Du die COM-Schnittstelle richtig einstellst/ansprichst. Geb doch einfach mal ein wenig mehr Deines Progs raus, der String allein ist noch nicht mal die halbe Miete.
MfG Mike
Bura.Tino
Beiträge: 38 Registriert: 08.12.2005 05:52
Beitrag
von Bura.Tino » 11.08.2006 20:13
Ok. Hier das was ich bis jetzt geschrieben habe:
Code: Alles auswählen
OpenConsole()
MyCom.s = "Com1: baud=2400 parity=N data=8 stop=1"
Hcom.l
Hcom = ComOpen(MyCom,0,0,4096)
If Hcom=0
PrintN("ComPort konnte nicht initialisiert werden.")
Delay(2000)
End
Else
PrintN("ComPort wurde initialisiert.")
EndIf
msg1.s=Chr(13)
address=1
msg3.s="S"
msg4.s=Chr(49)
checksum = 255 - (13 + address + Asc("C") + Asc("2")) % 256 + 1
MyBuffer1.s=msg1+Chr(address)+msg3+msg4+Chr(checksum)
For i=1 To 10
If ComWrite(Hcom,@MyBuffer1,Len(MyBuffer1))
Delay(500)
Else
End
EndIf
Next
ComClose(Hcom)
CloseConsole()
End
Wie Du siehst sende ich sogar 10x den Befehl und mache jeweils eine 500ms Pause. In der Anleitung steht das man mindestens 300ms machen soll.
Daher sollte es funktionieren. Das tut es aber eben nicht.
Falko
Admin
Beiträge: 3535 Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit), Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1 HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:
Beitrag
von Falko » 12.08.2006 14:43
Hier ist ein C-Source, das funktionieren soll. Leider weiss ich nicht, wie man folgendes in PB schreibt:
ucMsg[4] = ucMsg[0] ^ ucMsg[1] ^ ucMsg[2] ^ ucMsg[3];
Aber hierzu mal der complette Source auf dieser Seite unten:
http://www.tutorials.de/forum/c-c/19987 ... karte.html
Gruß Falko
Win11 Pro 64-Bit, PB_6.11b1
#NULL
Beiträge: 2238 Registriert: 20.04.2006 09:50
Beitrag
von #NULL » 12.08.2006 14:52
ucMsg(4) = ucMsg(0) ! ucMsg(1) ! ucMsg(2) ! ucMsg(3)
?
Falko
Admin
Beiträge: 3535 Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit), Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1 HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:
Beitrag
von Falko » 12.08.2006 17:43
Achso, dann müßte man es, damit es in PB auch funktioniert,
etwa so anstellen. Ich hoffe das entspricht dem C-Source:
Code: Alles auswählen
Dim ucMsg.s(4)
ucMsg(0) = Chr(13)
ucMsg(1) = Chr(1)
ucMsg(2) = "S"
ucMsg(3) = Chr(49 + i)
ucMsg(4) = Str(Asc(ucMsg(0)) ! Asc(ucMsg(1)) ! Asc(ucMsg(2)) ! Asc(ucMsg(3)))
Debug ucMsg(4); Ergebnis der Checksumme
Zuletzt geändert von
Falko am 12.08.2006 21:18, insgesamt 1-mal geändert.
Win11 Pro 64-Bit, PB_6.11b1
#NULL
Beiträge: 2238 Registriert: 20.04.2006 09:50
Beitrag
von #NULL » 12.08.2006 18:43
ein
array[5];
entspricht in PB eigentlich einem
Dim array(4)
..auch wenn es in dem beispiel keine rolle spielt (die c arrays werden wie die arrays in PB structures deklariert - besser gesagt andersherum)
und der c type
unsigned char
entspricht doch genau dem PB type
.c
(in ascii)
also..
Code: Alles auswählen
Dim ucMsg.c(4)
ucMsg(0) = 13
ucMsg(1) = 1
ucMsg(2) = asc("S")
ucMsg(3) = 49 + i
ucMsg(4) = ucMsg(0) ! ucMsg(1) ! ucMsg(2) ! ucMsg(3)
aber weder weiß ich worum es bei euch geht, noch versteh ich den rest des codes