第五部分 控制软件编写实例6 d! T( t* Y; K# F5 D4 ~4 W
# y1 b# t, Z& C3 x& o 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。2 n$ \$ D! ^2 W6 F# e+ |. x
1、开发环境
+ Q. Z: l; v' h: ` 编译软件:Microsoft Visual Studio 2010
, Z1 O) i6 g% v$ X8 [& ] 基础框架:Microsoft .NetFramework 4.0
$ {" E# A& Q0 i/ u* R4 x+ a 程序框架:Microsoft WPF
6 t; i: t" ~0 J- J" e 编程语言:C#& t/ h, x8 e3 S' V1 E' W
2、实例功能
# ?/ v/ A1 K) N% V. o2 M ——播放功能0 B. [! b* m: e
——停止功能" e s; H4 U" o5 u4 V
——快速前进功能, U0 U8 X3 D4 {/ |
——快速倒退功能
0 Z/ t6 }2 E. h5 u1 B ——录音功能
, O8 `3 a. T( M; y; o ——复位功能' G! G$ Q: D0 @( D$ I$ X% |/ O
——定位功能2 H1 E% R5 Y: B/ b
3、实例代码2 c! y7 d( b5 A7 A( q$ p& `3 x( K
——在Visual Studio 2010中新建一个工程文件。
. i# z5 z. W6 G ——在工程文件中的窗体代码文件中添加IO端口的引用。
* h$ t+ U% @/ Y; G using System.IO.Ports;& t d- n) g- d7 h. J
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
; D* h2 _5 z, h/ |. @ static SerialPort _serialPort;
. v% Z8 j0 N! D0 d5 U ——双击窗体增加窗体装入事件处理方法/ y: A4 L3 T/ F: r
private void Window_Loaded(object sender, RoutedEventArgs e)
( _; o6 P6 v$ Z5 e0 _ {: B) Z1 b& ?1 J' T' Z6 {! w
}# O) v8 I9 d0 `7 x% R6 k% `8 Q3 R
在窗体装入事件处理方法中写入端口初始化的代码。
( p$ r K' k4 r: A3 k- P! D private void Window_Loaded(object sender, RoutedEventArgs e)
5 \2 W+ E, @5 S( W- k; B: O7 x {
- B s+ l2 f7 V5 q //创建一个新的串口对象实例
1 b3 _5 O0 \# Q _serialPort = new SerialPort();
s( w) {: g" N# p //枚举计算机中的串口 J5 G5 S8 k8 f% T
string[] ports = SerialPort.GetPortNames();
+ F6 ^4 b1 \. N& z //如果系统没有串口装置则退出
4 ?' ~- A! U! I6 p" h6 w+ L if (ports == null)8 z' U; t, f4 O- c
{
$ c! S G' Q+ L+ ]- z* W this.close();4 E1 x+ E7 c& c% Q) q* `) }
}6 f) a- N$ b! f4 l1 p3 O6 v
try$ o. m. g( o* y7 u1 A& H
{
& S7 c/ O, t5 b7 z# E //使用系统的第一个串行端口9 l0 Q; e: O& R1 z
_serialPort.PortName = ports[0];. x, h O$ _8 `
//设置为9600的速率
) a: d3 |# B7 ?! F _serialPort.BaudRate = 9600;
0 a6 L8 @, b- b. ~% R5 B //设置为无校验/ ~% V5 p) g. |, r2 N6 i0 V
_serialPort.Parity = Parity.None;0 j e& C2 q9 w7 m
: E. b6 ?- j7 c: s: T6 K
//设置为8位数据
/ X; u2 N j# Z, N3 Z- e ] _serialPort.DataBits = 8;* N& O0 v4 n- K
//设置停止位为1
; }7 W$ ~4 y1 a$ _ r _serialPort.StopBits = StopBits.One;: i9 n+ r( W% a! I2 B- m" U
//设置为无握手4 ^! Z$ r7 F/ w- j: E; z/ w# ]- q
_serialPort.Handshake = Handshake.None;8 i/ ^& \5 O4 v' p3 B
//设置读/写超时值
) E* i$ v; p$ [. g/ @ _serialPort.ReadTimeout = 500;
' L0 f5 j0 c1 [* u$ y& Z( h! o _serialPort.WriteTimeout = 500;& o/ D2 i5 s4 J0 r
//打开串行端口
* U5 d- v( M6 U3 _5 F$ W _serialPort.Open();
5 {) Y6 {+ e8 J3 t# L }
; E) I a) _, w% o catch (Exception ex)
' Q% G# V( E$ n: [ {
0 w* P4 V; x$ v! @) L9 F Message.show(ex.Message);. p! {- }0 d# _, L- W
}
, `/ x* S5 x2 i }# O& d! m& v# F5 V6 N t1 L- O" i
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
, M/ l8 D! ]* P# W4 Q' j 按键命名 提示内容
l% r- e9 {. l) E) C: S button_PLY 播放* ^# b1 s7 K4 K$ ?$ \5 Q, L1 a
button_STP 停止. ]) h# V9 o& Y& Z3 x
button_FWD 快进: R1 g* m5 f& i' U+ _
button_RWD 快倒
! c* C/ [* h% o3 q+ M button_RCE 播放; n; P" t' C3 n- J1 b
button_RTM 清零 t+ _0 K5 \) b( h/ v- V
button_ZLO 定位到零
( j' ]( n7 k+ r$ \2 z8 v ——双击按钮图标增加按钮处理方法(以录音为例)
' n% o+ E7 _& ~% J7 c private void button_PLY_Click(object sender, RoutedEventArgs e)
( D" Y* S/ ^8 O {4 [( N$ G; U6 o, n0 X6 R, V
try
9 F+ h4 B. p/ G6 L {# }- W" W5 M- W$ Z! K4 g& @
//发送从输入信号直接输出方式控制字符串3 y, R5 B2 f3 c3 j" X0 n J- z0 X
_serialPort.WriteLine("INP F ");
, H m: W% q4 ~8 [$ U
2 P2 E( x# t0 X" Y2 K //休止100ms1 a5 u( q" P) F, B3 }
Thread.Sleep(100);
4 b y0 z& E+ b) ` //发送所有通道Ready的控制字符串
! |4 R- J5 \ p" j1 |! o: A _serialPort.WriteLine("REA F ");
0 M" @& p2 D6 n- n) R! }- I. ^ Thread.Sleep(100);' ~) Z5 U/ m8 \) s
//发送开始录音的控制字符串。 y$ s" X+ X' @8 S2 _
_serialPort.WriteLine("REC ");9 u/ e$ S5 ~" `+ H ?" D6 s
}
( O8 y) a. l6 N+ s, d$ R catch (Exception ex)
2 f5 Q2 }5 y. |2 t+ G9 X; m; A {- b2 D+ V, A6 H/ J H# t/ f
Message.show(ex.Message);
! R" p& o; X% a: {7 }8 e }6 d! y5 @+ | A( l7 ?, J2 X4 r
}
* C* ^1 U" J) ?- I 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。6 G6 `) |* C6 S5 W0 o
按以上方法增加相应按键的处理方法,并发送对应的指令即可。& v+ r' L9 Z9 z; M
播放控制字符串:PLY+空格+回车" m0 l4 ]4 j: y0 N/ z3 C
停止控制字符串:STP+空格+回车: \; s- h) c* R: g. }
快进控制字符串:FWD+空格+回车
. b3 X$ n: l- W( t9 K- t N 快倒控制字符串:RWD+空格+回车( C3 M! r8 n2 R2 L, n0 H. U8 q
复位控制字符串:RTM+空格+回车
8 o0 y- q7 r3 W4 l7 G 定位到零字符串:LZA+空格+回车 t6 E3 r. _- Q/ C$ C
: `' h, I. k, s" x8 z 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}" O$ [" g$ d5 c$ [! ^+ ^( p" O. X
+ p; n; g" F# @9 ^& f0 `
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
2 O( _8 J; t9 f" O! I# _ |