第五部分 控制软件编写实例: Q V: U& W# s( ~
7 l9 X4 t: _# ~8 ~: V9 P! @ 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
- N" ~% a, n/ u9 ^( ~+ B 1、开发环境
/ G( V8 w$ t: a# ]/ P, ]7 V 编译软件:Microsoft Visual Studio 20104 t0 Z- F4 r+ A% B
基础框架:Microsoft .NetFramework 4.04 L! T6 o7 N* H& H; |0 O1 S
程序框架:Microsoft WPF
( V* Z" p z5 t& r 编程语言:C#2 o4 O- Y$ p' w8 l- |7 s
2、实例功能- L. w+ w/ ]$ Y8 G) W2 p7 [
——播放功能 I) y6 a+ ?- G/ v& n1 M$ r! F
——停止功能
# a: \0 I& l" {+ o ——快速前进功能$ ?- B0 E) |. F9 W/ n3 `
——快速倒退功能2 M8 B, Q) K$ h$ y
——录音功能) |) K' E* [+ K6 ?, _
——复位功能
2 v) B0 |/ t5 V4 R/ p" @ ——定位功能! Z% b; J& T* u! ?6 {6 V$ u
3、实例代码
$ r) b ^4 @$ D9 ?/ g" t3 @ ——在Visual Studio 2010中新建一个工程文件。
0 j$ f. b5 D0 p' n6 C/ D& F6 X ——在工程文件中的窗体代码文件中添加IO端口的引用。
" u' ~. [) P* K& m4 S% O/ u using System.IO.Ports;8 Y6 ~6 l0 G6 w+ H
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。9 T- h4 g3 n% m* d; ?- w
static SerialPort _serialPort;) g; v6 m7 G4 ]/ B! P$ m, D: |; N' x
——双击窗体增加窗体装入事件处理方法
a3 A# u) }: F# T private void Window_Loaded(object sender, RoutedEventArgs e)9 x* ~$ N" o& ?# K0 M& c3 |6 T; A4 q
{: ~/ S2 A8 L8 k/ B3 _
}
) }! {( t" {! s) g 在窗体装入事件处理方法中写入端口初始化的代码。! O0 t* a$ x% R" G) s( T
private void Window_Loaded(object sender, RoutedEventArgs e)/ b% ]& }6 i$ Q
{
( G( }2 f. T$ ^" c9 P. C3 A //创建一个新的串口对象实例
* @; D* x' F& D1 x2 B! M8 N9 U& F _serialPort = new SerialPort();
7 m7 v- u- o, p9 e; l4 V7 @ //枚举计算机中的串口
+ v0 Y# z5 T2 U& z string[] ports = SerialPort.GetPortNames();
3 ?- d8 _5 K7 V //如果系统没有串口装置则退出
7 N* Q/ V& e/ T6 q k* c if (ports == null)
6 g3 Y/ w* c7 N4 N2 W {$ \' k8 t) {2 M
this.close();
3 k: p9 O; p% l; ^! l' x }- @: {. o' h5 Z1 P9 X
try! ]) x3 V8 [- ^1 q& ]6 ?/ d h$ _# [
{. K. p2 H: x/ N4 S. V2 q# T
//使用系统的第一个串行端口
2 C+ d$ \6 j1 E& T9 j7 D _serialPort.PortName = ports[0];" m4 p' q9 v# G
//设置为9600的速率
$ G; E D/ v$ C8 A( t: f' F3 e _serialPort.BaudRate = 9600;$ H% m! C3 P4 p9 L$ H
//设置为无校验/ C9 w$ {4 |8 e7 X, s- |' s
_serialPort.Parity = Parity.None;% o% j/ |& s( E! d$ m
/ v3 E3 y* ?: e1 T* x/ j //设置为8位数据, y# A: A+ q) X
_serialPort.DataBits = 8;8 \" j: @3 R/ b: L2 C) @2 D, D/ `
//设置停止位为1/ K5 K w+ L% [8 ^& @
_serialPort.StopBits = StopBits.One;
" M/ [1 o0 n/ v //设置为无握手! _) n0 q5 ~' `2 E0 Y/ d2 X
_serialPort.Handshake = Handshake.None;
( M: _5 a6 b% W& @- }! t% e% A //设置读/写超时值
( `8 t4 r/ \. i& m @- B* V _serialPort.ReadTimeout = 500;
1 u% e2 [* \4 F _serialPort.WriteTimeout = 500;
" \7 s+ H: J" C$ z, h& P2 M' D5 _ //打开串行端口
6 c' I$ z+ N& _9 r6 i/ s( U _serialPort.Open();/ `. {0 `2 T. X- U
}
- x( p6 w; A% k catch (Exception ex)6 B7 F6 ^- W( B {$ ~
{
3 J1 x1 Z. b6 y9 t$ K: F Message.show(ex.Message);
/ F1 A0 F" A$ i: A$ y! q }; }; Y3 ~! m1 A- q$ ^8 ^; h
}
2 ]& P" b5 N6 H) E5 B ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
2 I# B8 c( a! |) I- b 按键命名 提示内容# \6 d/ W8 ~9 _4 V
button_PLY 播放( l& Z( ]$ L8 O+ [: }8 ]- S
button_STP 停止
3 I8 i2 S- d9 Q3 Y6 Y button_FWD 快进! i: [/ B }; }5 y" I2 U: ]9 s
button_RWD 快倒/ y' ?% s$ r! x' k7 i
button_RCE 播放6 j. P& v" x% D. \0 w
button_RTM 清零8 l4 K& a- i9 U) h! Y4 N5 m5 P- f4 a
button_ZLO 定位到零5 i$ [1 A( K$ [4 W
——双击按钮图标增加按钮处理方法(以录音为例)
# A1 @/ U/ K5 ~9 { u private void button_PLY_Click(object sender, RoutedEventArgs e)
$ z4 [1 N: z5 ~% C {0 I/ `, {, b3 Y0 I- n( g
try# n9 N2 v# G6 h% J
{8 R" h' I# V6 V9 B9 D! t
//发送从输入信号直接输出方式控制字符串
4 X, n5 A9 ~6 N* D _serialPort.WriteLine("INP F ");, }6 \$ z2 Y: Z; ~3 [; e6 \: n
8 G* L$ s5 a5 S9 W' Q
//休止100ms6 L$ u: g" R# X5 S8 J' {' U
Thread.Sleep(100);
. H; g. n a$ D: `2 y, s //发送所有通道Ready的控制字符串
- }6 V6 z! C4 }3 f* H _serialPort.WriteLine("REA F ");
6 M! E# E! m, x- J2 w Thread.Sleep(100);
% \9 @0 P! \6 @0 v6 } V //发送开始录音的控制字符串。 R. U' A, |& W3 C. h+ `+ m. ]8 e) i; G
_serialPort.WriteLine("REC ");$ z3 n- D5 p4 H2 m
}
& M& P" F% q: D4 I L catch (Exception ex)
7 m; k! G2 x/ r6 Q {0 V( O# i1 }7 o5 d" b" h; z0 e
Message.show(ex.Message);
2 J1 m, }6 }" A1 w% _0 \ }: A% F! l+ @+ e7 [) V/ Q$ `# `
}+ e* L+ J2 q( m" z8 h
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。6 H( ]' T( `2 t( Z4 h6 N
按以上方法增加相应按键的处理方法,并发送对应的指令即可。3 K- e. t: G1 @- B2 d/ u. o9 B
播放控制字符串:PLY+空格+回车& N7 @' b& _4 w5 R7 s! c' u1 x% Q
停止控制字符串:STP+空格+回车) p( e( P9 M7 l* y! d" E3 o4 U
快进控制字符串:FWD+空格+回车
1 Y) W* t& I, v8 v* V9 B 快倒控制字符串:RWD+空格+回车& C$ P& c9 c O% C" r
复位控制字符串:RTM+空格+回车( N+ e: E( m, F7 X
定位到零字符串:LZA+空格+回车
' L" ~; h" N0 x: g * Z& G" \- h3 L" z4 t* u5 ^/ p, ^( p. G, S
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}; S, |, k5 L) \0 T4 c c+ F5 ?
6 m7 [2 T( g. p( r$ J. \
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
O& ^/ |+ f' s3 Z* P |