Serial Port. Com1 communication

Deploying to Windows? Utilizing VB Script execution? This is the place to ask Windows-specific questions.

Moderators: FourthWorld, heatherlaine, Klaus, kevinmiller, robinmiller

CPSEric
Posts: 11
Joined: Tue Jun 30, 2015 4:23 pm

Re: Serial Port. Com1 communication

Post by CPSEric » Thu Jul 09, 2015 9:40 pm

FYI - To those that attempted to help and any other newbie needing to do this.
This is the code that made it work:

on mouseUp
set the serialControlString to BAUD=38400, PARITY=N, DATA=8, STOP=1
open driver COM1 for binary update
write numToChar(0xFE) to driver COM1
write numToChar(0x08) to driver COM1
end mouseUp

Had to do a lot of reading, but I found it. Hope it helps someone.

I now need to figure out how to send all the hex commands with one write command line.

:D

CPSEric
Posts: 11
Joined: Tue Jun 30, 2015 4:23 pm

Re: Serial Port. Com1 communication

Post by CPSEric » Thu Jul 09, 2015 9:59 pm

Figured that one out too.

write numToChar(0xFE) & numToChar(0x08) to driver COM1

By the way it works on version 6, 7 and 8.

You guys are great!

Thank you so much

melristau
Posts: 56
Joined: Tue Jul 14, 2015 5:15 pm
Location: Northern Colorado
Contact:

Re: Serial Port. Com1 communication

Post by melristau » Wed Jul 15, 2015 3:16 am

Just looking into LC. (Old Hypertalker)
Possible to build in LC an app like CoolTerm? Interested in building tools for talking to a TinyG stepper controller board.
rebuilding visual programming app originally created in 1993 as Hypercard stack

CPSEric
Posts: 11
Joined: Tue Jun 30, 2015 4:23 pm

Re: Serial Port. Com1 communication

Post by CPSEric » Tue Sep 01, 2015 9:50 pm

I would say it is possible to build anything using LiveCode, but I have had lots of trouble with the syntax. Manual is not clear and has errors.

MaxV
Posts: 1579
Joined: Tue May 28, 2013 2:20 pm
Location: Italy
Contact:

Re: Serial Port. Com1 communication

Post by MaxV » Wed Sep 02, 2015 10:52 am

0xFE = 254
so use numtochar(254)
In the end use this code:

Code: Select all

put numtoChar(254) into temp
put numtoChar(8) after temp
write temp to driver "COM1:"
Livecode Wiki: http://livecode.wikia.com
My blog: https://livecode-blogger.blogspot.com
To post code use this: http://tinyurl.com/ogp6d5w

sphere
Posts: 1145
Joined: Sat Sep 27, 2014 10:32 am
Location: Earth, Except when i Jump

Re: Serial Port. Com1 communication

Post by sphere » Sun Aug 28, 2016 9:11 pm

I'm playing with serial now too. (that is in Livecode, already played with it before)
I have to send 8 byte in hex, but it is nowhere very clear stated how to send the hex codes
should it be one string like "F7-10-A0- etcetera"
or "F7,10,A0- etcetera"

or enter a lot of text lines like:
write numToChar(0xFE) to driver COM1
write numToChar(0x08) to driver COM1

or a big line like:
write numToChar(0xFE) & numToChar(0x08) to driver COM1

or as Klaus said:
write "0xFE, 0x08" to driver "COM1:"

at least a little test i did is that:

Code: Select all

on mouseUp
   put numToChar(0xFE) into fld"Field"
end mouseUp
and

Code: Select all

on mouseUp
   put numtoChar(254) into fld"Field"
end mouseUp
both the exact same result

Could someone be exactly clear how to write hex code to the com port?

thanks a lot!

Best to you all,
Sphere

MaxV
Posts: 1579
Joined: Tue May 28, 2013 2:20 pm
Location: Italy
Contact:

Re: Serial Port. Com1 communication

Post by MaxV » Tue Aug 30, 2016 1:01 pm

You can't see not ASCII chars on a screen, so you should use this code:
########CODE#######
on mouseUp
put numtoChar(254) into temp
put numtoChar(8) after temp
put temp into URL "binfile:test.txt"
end mouseUp
#####END OF CODE#####

Now use an hex editor to open the file "test.txt" and you'll see "FE 08".
Livecode Wiki: http://livecode.wikia.com
My blog: https://livecode-blogger.blogspot.com
To post code use this: http://tinyurl.com/ogp6d5w

sphere
Posts: 1145
Joined: Sat Sep 27, 2014 10:32 am
Location: Earth, Except when i Jump

Re: Serial Port. Com1 communication

Post by sphere » Tue Aug 30, 2016 7:19 pm

Hi Maxv,

yes i understand.
It threw the same strange character in lc.

that's why i said it has the same result.

SPhere

MaxV
Posts: 1579
Joined: Tue May 28, 2013 2:20 pm
Location: Italy
Contact:

Re: Serial Port. Com1 communication

Post by MaxV » Wed Aug 31, 2016 10:01 am

Livecode interprets hexadecimals numbers as numbers so:

Code: Select all

put 0x01 + 0x01
is the same of

Code: Select all

put 1 + 1
Livecode automatically transforms an hexadecimal number (that starts with 0x) with its correspondent decimal number.
On the contrary a string remain a string, so "0x01" isn't 1, but 0x01 is 1.
For example:
0x02 = 2
0x0E = 14
0x0F = 15
0x10 = 16
0xFE = 254
Livecode Wiki: http://livecode.wikia.com
My blog: https://livecode-blogger.blogspot.com
To post code use this: http://tinyurl.com/ogp6d5w

sphere
Posts: 1145
Joined: Sat Sep 27, 2014 10:32 am
Location: Earth, Except when i Jump

Re: Serial Port. Com1 communication

Post by sphere » Thu Sep 01, 2016 8:35 pm

BUon Giorno MaxV,

ok so have to write decimals to get Livecode to send hex.
As the device which i want to control only accept HEX

But i guess it's also possible to send hex straight to it?

then i have to rewrite my code because now i have lines like this:

Code: Select all

write numToChar(0x43) to file tCom
  write numToChar(0x55) to file tCom
  write numToChar(0x01) to file tCom
But these are Hex, not decimals

So how do i write it when i want livecode to send plain Hex code?

Also when testing with Virtual Com ports Livecode totally locks up.
I even am trying a virtual nulmodem, which causes the send data to be read again directly

So i have to test it yet with the real device.

MaxV
Posts: 1579
Joined: Tue May 28, 2013 2:20 pm
Location: Italy
Contact:

Re: Serial Port. Com1 communication

Post by MaxV » Fri Sep 02, 2016 9:27 am

Hi Sphere,
sorry but you misunderstood me. I meant that for livecode it's the same if you write 67 or 0x43.
So you can write

Code: Select all

write numToChar(0x43) to file tCom
or

Code: Select all

write numToChar(67) to file tCom
but you'll obtain the same result.
A char for a computer is just a series of bit, so byte 67 is "C" is you want to interpret as a char, it is 67 is you want to read a bit value in decimal base, is 0x43 is you want to read as bit value as hexadecimal value, but in the end is always just this series of bit: 01000011
A text editor just separates bit at piece of 8 bit each, so he shows the "01000011" sequence as "C". All serial port values are from 0 to 255, but these value are not all associated to visible char on screen, so if you try to see all chars from 0 to 255 you'll get this list:
0=
1=
2=
3=
4=
5=
6=
7=
8=
9=
10=
11=
12=
13=
14=
15=
16=
17=
18=
19=
20=
21=
22=
23=
24=
25=
26=
27=
28=
29=
30=
31=
32=
33=!
34="
35=#
36=$
37=%
38=&
39='
40=(
41=)
42=*
43=+
44=,
45=-
46=.
47=/
48=0
49=1
50=2
51=3
52=4
53=5
54=6
55=7
56=8
57=9
58=:
59=;
60=<
61==
62=>
63=?
64=@
65=A
66=B
67=C
68=D
69=E
70=F
71=G
72=H
73=I
74=J
75=K
76=L
77=M
78=N
79=O
80=P
81=Q
82=R
83=S
84=T
85=U
86=V
87=W
88=X
89=Y
90=Z
91=[
92=\
93=]
94=^
95=_
96=`
97=a
98=b
99=c
100=d
101=e
102=f
103=g
104=h
105=i
106=j
107=k
108=l
109=m
110=n
111=o
112=p
113=q
114=r
115=s
116=t
117=u
118=v
119=w
120=x
121=y
122=z
123={
124=|
125=}
126=~
127=
128=�
129=�
130=�
131=�
132=�
133=�
134=�
135=�
136=�
137=�
138=�
139=�
140=�
141=�
142=
143=
144=�
145=�
146=�
147=�
148=�
149=�
150=�
151=�
152=�
153=�
154=�
155=�
156=�
157=�
158=�
159=�
160=�
161=�
162=�
163=�
164=�
165=�
166=�
167=�
168=�
169=�
170=�
171=�
172=�
173=�
174=�
175=�
176=�
177=�
178=�
179=�
180=�
181=�
182=�
183=�
184=�
185=�
186=�
187=�
188=�
189=�
190=�
191=�
192=
193=
194=
195=
196=
197=
198=
199=
200=
201=
202=
203=
204=
205=
206=
207=
208=
209=
210=
211=
212=
213=
214=
215=
216=
217=
218=
219=
220=
221=
222=
223=
224=
225=
226=
227=
228=
229=
230=
231=
232=
233=
234=
235=
236=
237=
238=
239=
240=
241=
242=
243=
244=
245=
246=
247=
248=
249=
250=
251=
252=
253=
254=�
255=�

as you can see, many chars are not for screen.

An hex editor separate bit as a text editor, but show you just byte value.
For example the string "Hello world" is shown as "0x68 0x65 0x6C 0x6C 0x6F 0x20 0x77 0x6F 0x72 0x6C 0x64".
For example the string "67" is shown as "0x36 0x37". (two values, char "6" and char "7")

The function numToChar() assure you that you are sending correcting the bit to the serial port. Unfortunately human can't use the keyboard, because as you saw many chars are not on a human keyboard.
Just to show you better this idea, you wrote this code:

Code: Select all

write numToChar(0x43) to file tCom
write numToChar(0x55) to file tCom
write numToChar(0x01) to file tCom
but you could do the same task with:

Code: Select all

write "C" to file tCom
write "U" to file tCom
write numToChar(0x01) to file tCom
only the last char is not on a human keyboard, so you have to use numToChar() function.
Last edited by MaxV on Fri Sep 02, 2016 3:28 pm, edited 1 time in total.
Livecode Wiki: http://livecode.wikia.com
My blog: https://livecode-blogger.blogspot.com
To post code use this: http://tinyurl.com/ogp6d5w

sphere
Posts: 1145
Joined: Sat Sep 27, 2014 10:32 am
Location: Earth, Except when i Jump

Re: Serial Port. Com1 communication

Post by sphere » Fri Sep 02, 2016 10:44 am

Hi MaxV,

thanks for this.
***edit***
Great!
Got it working.
Device responds OK!
And LC7.1.4 does not lock up. :)

Thanks!
Ciao!

Sphere.

Post Reply

Return to “Windows”