Controlling the Velleman K8056 relay card?
Controlling the Velleman K8056 relay card?
Would it be possible to control this relay card using Housebot?
http://www.velleman.be/ot/en/product/view/?id=351282
It is controllable using the RS232 port on a PC...
http://www.velleman.be/ot/en/product/view/?id=351282
It is controllable using the RS232 port on a PC...
-
- HouseBot Guru Extraordinaire
- Posts: 1121
- Joined: Tue Sep 28, 2004 7:49 am
- Location: The Netherlands
Yes, very easy!
If you figure or find out the protocol to control this board, you can use the generic serial device and vbscript to control this. Velleman is also known for offering SDK's for their boards. This dll can possibly be used to control it using vbscript or C++. VBScript is already implemented in HB, using C++ would create the option to use it together with the HB SDK to create a HB plugin.
In other words.... yes, but you need some programming skills.
If you figure or find out the protocol to control this board, you can use the generic serial device and vbscript to control this. Velleman is also known for offering SDK's for their boards. This dll can possibly be used to control it using vbscript or C++. VBScript is already implemented in HB, using C++ would create the option to use it together with the HB SDK to create a HB plugin.
In other words.... yes, but you need some programming skills.
Ok, I bought the card and assembled it. It works great with the testing software that Velleman has made. But when I take a look at the the generic serial control from Housebot I am at a loss. Could someone please help me step by step along the way to get this card controlled through Housebot?
This is the part from the cards manual about controlling it through RS232
I have tried setting up the serial hardware interface in Housebot but I need help with the "Interface command configuration" and what exactly I should put in the "write data" input field.
Any help is really appreciated, thanks.
This is the part from the cards manual about controlling it through RS232
I have tried setting up the serial hardware interface in Housebot but I need help with the "Interface command configuration" and what exactly I should put in the "write data" input field.
Any help is really appreciated, thanks.
-
- HouseBot Guru Extraordinaire
- Posts: 1121
- Joined: Tue Sep 28, 2004 7:49 am
- Location: The Netherlands
-
- HouseBot Guru Extraordinaire
- Posts: 1121
- Joined: Tue Sep 28, 2004 7:49 am
- Location: The Netherlands
Wow, an example would have been nice here.
According to me if you want a two's complement checksum, the previous bytes should be hex like bytes. Since there can be instructions with S and T, you cannot set the Write Data to Hex. It needs to be Ascii. You also need to write a small program to calculate your checksums. Maybe using the wildcard "*" option and a vbscript which calculates your checksums on the fly is a good option.
Try this:
0D01S9A0
0D = Chr(13)
01 = Card Address
S9 = Set all relays
9F = Checksum
Checksum program should be something like this:
'-------------------------------
Data = "0D01S9"
Checksum = 0
For n = 1 to Len(Data)
Checksum = Checksum + Asc(Mid(Data, n, 1))
Next
MsgBox Right(Hex((Checksum Xor 255) + 1), 2)
'-------------------------------
You can use an InputBox to set your data without having to edit the script all the time.
Another example could be:
0DFFT27A
Toggle Relay 2 at address 255
I am really not sure if this helps any because I don't have the board. If this doesn't do anything, at least I am out of options and cannot help you anymore.
Good luck
According to me if you want a two's complement checksum, the previous bytes should be hex like bytes. Since there can be instructions with S and T, you cannot set the Write Data to Hex. It needs to be Ascii. You also need to write a small program to calculate your checksums. Maybe using the wildcard "*" option and a vbscript which calculates your checksums on the fly is a good option.
Try this:
0D01S9A0
0D = Chr(13)
01 = Card Address
S9 = Set all relays
9F = Checksum
Checksum program should be something like this:
'-------------------------------
Data = "0D01S9"
Checksum = 0
For n = 1 to Len(Data)
Checksum = Checksum + Asc(Mid(Data, n, 1))
Next
MsgBox Right(Hex((Checksum Xor 255) + 1), 2)
'-------------------------------
You can use an InputBox to set your data without having to edit the script all the time.
Another example could be:
0DFFT27A
Toggle Relay 2 at address 255
I am really not sure if this helps any because I don't have the board. If this doesn't do anything, at least I am out of options and cannot help you anymore.
Good luck
Last edited by Richard Naninck on Sun May 28, 2006 6:23 pm, edited 1 time in total.
Thanks so much for your reply, Richard. I understand much better now how the command sequence is built. I have run the small checksum program you wrote and it works great. But...
I can´t understand how the serial plugin is supposed to be setup in Housebot. How do I create a device whose property changes to a serial command sequence I send to it from a task?
I have the hardware interface and the hardware definition file, but what about the device definition file? I´m confused.
I can´t understand how the serial plugin is supposed to be setup in Housebot. How do I create a device whose property changes to a serial command sequence I send to it from a task?
I have the hardware interface and the hardware definition file, but what about the device definition file? I´m confused.
-
- HouseBot Guru Extraordinaire
- Posts: 1121
- Joined: Tue Sep 28, 2004 7:49 am
- Location: The Netherlands
Well, that should have been the easy part. I really can't explain it better than it is said in the help fileS. Capital S here since there are two help files on the subject. One for the hardware device and one for the Serial device that contains the properties or wildcard linked to the hardware device. That device is used in tasks etc.
maybe Scott can elaborate on that OR your questions need oto be somewhat more specific on where you hang.
Bed time, so this is my last one for the day.
maybe Scott can elaborate on that OR your questions need oto be somewhat more specific on where you hang.
Bed time, so this is my last one for the day.
-
- HouseBot Guru Extraordinaire
- Posts: 1121
- Joined: Tue Sep 28, 2004 7:49 am
- Location: The Netherlands
Something is wrong with the command sequence, Richard. The card doesn´t respond when I try it with girder.
I found this in the vb example program from Velleman:
Private Sub Command5_Click()
checksum = (255 - ((((13 + address + Asc("S") + Asc("9")) / 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
This code snippet seems to create the correct command sequence. But I can´t replicate it using VBscript
I found this in the vb example program from Velleman:
Private Sub Command5_Click()
checksum = (255 - ((((13 + address + Asc("S") + Asc("9")) / 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
This code snippet seems to create the correct command sequence. But I can´t replicate it using VBscript
-
- HouseBot Guru Extraordinaire
- Posts: 1121
- Joined: Tue Sep 28, 2004 7:49 am
- Location: The Netherlands
In your example the message gets sent about 4 times as advertised in the manual.
Can you tell me what the example vbscript outputs and what checksum is outputted. Just create some examples and post them here.
I am not sure how this can work at all. The checksum consists of S9 AND E1 which seems to me that these are two different command strings. SHouldn't it be:
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)
OR
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)
Can you tell me what the example vbscript outputs and what checksum is outputted. Just create some examples and post them here.
I am not sure how this can work at all. The checksum consists of S9 AND E1 which seems to me that these are two different command strings. SHouldn't it be:
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)
OR
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)
Yes, the example is wrong. I mistyped it, sorry.
But I think I have found the solution! If you use this formula to calculate the checksum:
checksum = 255-(13+1+83+57)+1
where
13 is the char$(13)
1 is the card address
83 is the "S" in dec
57 is the relay number in dec ie "9"
and then hex everything above except the address (!?) You get this command sequence:
0D01533966
If I send this to the card using a software called "RS232 Hex Com Tool"
http://tucows.com/start_dl/344067_128270_573
The card responds and sets all the relays. Success!
If only I could work out how to send this command through Housebot. The serial plugin is a bit confusing to say the least...
But I think I have found the solution! If you use this formula to calculate the checksum:
checksum = 255-(13+1+83+57)+1
where
13 is the char$(13)
1 is the card address
83 is the "S" in dec
57 is the relay number in dec ie "9"
and then hex everything above except the address (!?) You get this command sequence:
0D01533966
If I send this to the card using a software called "RS232 Hex Com Tool"
http://tucows.com/start_dl/344067_128270_573
The card responds and sets all the relays. Success!
If only I could work out how to send this command through Housebot. The serial plugin is a bit confusing to say the least...
-
- HouseBot Guru Extraordinaire
- Posts: 1121
- Joined: Tue Sep 28, 2004 7:49 am
- Location: The Netherlands
Glad you figured it out. It seems strange that the address is a plain number and the instruction (but also) the relay should be in ascii code.
What do you mean with 'except the address (!?)'. 01 Dec is also Hex 01.
Some example code always does the trick. The manual really falls short here I would say.
I am sure that if you dig a while, you will find the serial device easy to work with. Did you read BOTH help files on the subject, or just ONE?
What do you mean with 'except the address (!?)'. 01 Dec is also Hex 01.
Some example code always does the trick. The manual really falls short here I would say.
I am sure that if you dig a while, you will find the serial device easy to work with. Did you read BOTH help files on the subject, or just ONE?
Yes I have read both help files. When I use the "Configure generic serial port devices" tool from the settings menu and I create a "new device definition", what property should I choose? There is no property for sending hex codes, or can´t I see it?
What confuses me is that I have three things to configure,
The "hardware interface"
The "device definition"
The "device" which is somehow connected to the "device definition".
And how do I go about using this in a task?
All I want to do is send a hexcode through the com-port. Why isn´t there a device called "comport" which a dynamic property called "command"? Then it would be easy :)
What confuses me is that I have three things to configure,
The "hardware interface"
The "device definition"
The "device" which is somehow connected to the "device definition".
And how do I go about using this in a task?
All I want to do is send a hexcode through the com-port. Why isn´t there a device called "comport" which a dynamic property called "command"? Then it would be easy :)