第五部分 控制软件编写实例
7 B% |# O* a1 _
. s5 C# ?* x. O3 E9 B+ X1 A. O 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。: @: ^$ T) k: E
1、开发环境
0 L+ t- o2 N1 n- @# J 编译软件:Microsoft Visual Studio 2010
. D; Y; n" G, w9 ^& w4 d( |; Q" q 基础框架:Microsoft .NetFramework 4.0
! U3 W+ T% v6 e- [# g$ u 程序框架:Microsoft WPF1 S+ [" [ \2 j
编程语言:C#
/ X( F5 A: I1 y3 E/ r, X9 U& m( Z 2、实例功能
- L+ r: r2 S, L1 P ——播放功能6 H1 d# N8 h+ b) D
——停止功能
7 Y, e& k# F1 x ——快速前进功能" |: C- o5 R! i: C1 `6 L" @- r
——快速倒退功能6 I% p/ q( q* u* N, J: @4 N, }1 t
——录音功能
( k) E6 S" v; e! ^ ——复位功能5 X$ V6 C2 i4 z! x
——定位功能# K N$ d. O9 \% m2 Y9 p
3、实例代码
+ i* a( b& u1 y- c# D# ^ ——在Visual Studio 2010中新建一个工程文件。
& i) ^8 `4 t/ Y o2 F4 Y( \2 R4 q ——在工程文件中的窗体代码文件中添加IO端口的引用。* q5 y3 C2 m" S7 s4 x
using System.IO.Ports; {+ {' f7 C; G+ e% C* b# N$ W
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
' ^0 a! Q; }- Q4 O# h1 l* j static SerialPort _serialPort;
* T1 a7 G* [6 I- t5 [. \ ——双击窗体增加窗体装入事件处理方法+ v( m8 `0 b) W3 F+ |% q
private void Window_Loaded(object sender, RoutedEventArgs e)& n4 R+ K4 g# R5 E/ R- r1 j& A
{. a% ^) [; o' H% y
}
5 t: T, j. o( B4 E% P/ Q' o 在窗体装入事件处理方法中写入端口初始化的代码。- l1 m4 z" S; X* l! ]
private void Window_Loaded(object sender, RoutedEventArgs e)
6 i7 }5 D+ I8 ] {& i: a* a; u2 r. j4 j. [
//创建一个新的串口对象实例
4 @ B5 ]% @+ z2 d) S" [ _serialPort = new SerialPort();
d$ X" h9 r* w3 q( s7 V5 { //枚举计算机中的串口; D2 H9 |' B+ n) K. k& S: I
string[] ports = SerialPort.GetPortNames();+ [; ?9 [8 z+ k) m; G
//如果系统没有串口装置则退出0 [/ u6 ?1 S7 u- o) L0 m7 m- Y. X
if (ports == null)7 E; W0 ~: t N' i9 W/ ?
{3 V' |5 z) m# q
this.close();. {6 e; A' \4 V" o. }
}
6 N) V) y, @( S! @ try' `, l7 R+ [; R8 Q* B' m
{
o( N$ Z2 r5 B) A- d7 n6 f //使用系统的第一个串行端口+ l2 A( B8 A" c, q/ `& C; L
_serialPort.PortName = ports[0];* a0 k% w8 k: h! g
//设置为9600的速率
# W7 {) ?" J0 S0 I* {" c8 f _serialPort.BaudRate = 9600;
* J' h3 q1 |: p; S" K //设置为无校验0 r$ d; W+ s& V/ w& p3 S
_serialPort.Parity = Parity.None;7 j: l/ P+ [/ \ k
3 V) r( @- |* |$ j
//设置为8位数据. \% K/ [& A2 W2 s x( i
_serialPort.DataBits = 8;
2 d4 U) X* @7 _/ g5 O) ^ E //设置停止位为1
* g& p' r5 t7 ~ _serialPort.StopBits = StopBits.One;' z+ n- [$ a2 b! ]" p$ M
//设置为无握手2 }4 S/ c( c! V5 ~2 X; w
_serialPort.Handshake = Handshake.None;5 c/ x. a, n' P; \5 Y
//设置读/写超时值
- Z* u. h& N3 A" |6 P+ }- o _serialPort.ReadTimeout = 500;' j9 `# W3 d7 e* q
_serialPort.WriteTimeout = 500;. p9 u6 e: e' A
//打开串行端口
2 \" N$ w7 i, K M _serialPort.Open();: g8 N, N# x/ T2 e4 A( T
}
1 b, p& m; Y& m- L8 A! h catch (Exception ex)% |7 m3 ~. ]; G5 g/ T8 J
{. d$ j1 v0 B( ], b! v+ E" u
Message.show(ex.Message);
7 L) G' i" z3 Q- q5 l4 N4 F9 Y }2 P" M0 t* `: G+ r4 l
}
* r) u. i6 V' j! H; { ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
1 w0 i3 F& h8 V# j& l 按键命名 提示内容# i6 t' i6 ~- A8 L; N' V& \
button_PLY 播放
! r, o) m! G) n( }+ E button_STP 停止+ }3 O. ?3 O, ~
button_FWD 快进# U" q; z, \: }* r
button_RWD 快倒8 h3 _8 n# t0 b6 R
button_RCE 播放
# p9 s! M( w0 Z0 Y. Y button_RTM 清零
# m" s+ @6 K9 U1 H( t+ z% B( B button_ZLO 定位到零
3 G! a+ P1 w7 ~5 Q5 R7 l5 ? ——双击按钮图标增加按钮处理方法(以录音为例)* O! j$ j2 v+ ~1 n& x% B
private void button_PLY_Click(object sender, RoutedEventArgs e)
+ N$ p; \8 u: t6 y6 B { p; w R& W/ z- f
try
; F) D: f- |) i( _/ n' b% g {
8 X+ [" _* q/ z8 L //发送从输入信号直接输出方式控制字符串# R) N& ]# V' H m) X9 r6 _
_serialPort.WriteLine("INP F ");8 l" ^6 ^* l/ _ f* p E# o! \
5 S, v, ?4 W2 H //休止100ms* Z" X ^2 z" Q! J+ d# f
Thread.Sleep(100);& M$ g; S0 ~8 a
//发送所有通道Ready的控制字符串5 y7 Y1 M# c) }& a! {- Y) z. e
_serialPort.WriteLine("REA F "); 1 v& b% H! w7 \9 ]' j
Thread.Sleep(100);
- u8 D4 j5 D# Q& a5 X //发送开始录音的控制字符串。0 T0 q6 y3 V. k& V
_serialPort.WriteLine("REC ");
0 i$ u5 n$ m1 A" n, D# C' E' N }
3 {; C4 T5 d2 i3 M0 w catch (Exception ex)$ s, m# D" L* n+ k" q
{
% L9 A; `# h: n4 M Message.show(ex.Message); ^, o% u4 B7 w: u- O, p3 e
}" |4 m8 o5 ?! J3 I: u) A: f4 i
}1 o* e* b" R2 _+ f0 j/ l3 _0 a: U
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。9 q4 ~3 @2 A7 ~) `* [9 q1 D8 ~0 w
按以上方法增加相应按键的处理方法,并发送对应的指令即可。; h( `0 |8 N* f( A
播放控制字符串:PLY+空格+回车
+ C5 v; c( H/ v( m 停止控制字符串:STP+空格+回车
0 h( z3 O) [# @0 c1 H 快进控制字符串:FWD+空格+回车
8 V; Q5 q/ c7 f 快倒控制字符串:RWD+空格+回车
- K# N1 S* S3 P. ~ 复位控制字符串:RTM+空格+回车* x6 [8 B3 @* ]
定位到零字符串:LZA+空格+回车& u# w' {; r/ u5 [
8 N% y1 p6 Q. _1 D b% t- }* D2 d* ] 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
) a% F% p1 d6 s" z! l0 B 9 E0 e+ E: \0 v4 h X9 }/ c0 d& e
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。 R9 c5 g, {' P
|