第五部分 控制软件编写实例
! j. ~. |3 q9 e. {
2 U! O+ U' E5 e, p7 L0 T5 p 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。8 M) B5 w, e. Q$ N
1、开发环境
7 g( b* }# ~, i9 V' f: L 编译软件:Microsoft Visual Studio 2010
( m+ `6 ` z/ h8 C l 基础框架:Microsoft .NetFramework 4.0; R# c e+ `& ], e
程序框架:Microsoft WPF
% \- I( \' J- c% `9 b 编程语言:C#
0 S, B! |' @% N) w3 y: t 2、实例功能2 C. z1 T2 h- G
——播放功能
) C0 r& j: p4 _. v7 n4 s+ X ——停止功能
* I' a1 e) q c3 H0 T7 q ——快速前进功能
' r \ J; t3 |( n3 I+ K7 t ——快速倒退功能' T" e2 U# m4 n+ V( W% |4 X
——录音功能
. @5 ?1 h [( h' W) ?) P( L8 ~ ——复位功能7 O+ X: g" }" d+ X
——定位功能
) Q* C2 g, J2 d* a* p+ u# }7 F 3、实例代码
- k) I9 w$ Q* n! r0 I5 M ——在Visual Studio 2010中新建一个工程文件。
( G( C& X0 j, P ——在工程文件中的窗体代码文件中添加IO端口的引用。9 M9 [! \2 z$ T3 Z$ X5 D9 }5 a
using System.IO.Ports;, h- a) ^+ ~' V' z% I, ~
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。 m& r# X! \8 @1 X! B
static SerialPort _serialPort;
! w: ~- U, \' J( p$ F" n8 @) c ——双击窗体增加窗体装入事件处理方法/ T; p/ e( o- a$ b" A1 J5 b, A# m- {# Z
private void Window_Loaded(object sender, RoutedEventArgs e)8 j$ x+ l& ~' H
{: _% x$ X/ h- J6 Z8 H5 b8 A
}
/ d3 ?9 z7 L u6 ?) z7 e, H- f 在窗体装入事件处理方法中写入端口初始化的代码。; {6 @( H {* J6 g* W
private void Window_Loaded(object sender, RoutedEventArgs e)
% L' R* g6 x! Z: U) \; A0 P {
* \) g8 a7 R3 `& H, P& m" N //创建一个新的串口对象实例5 @( N- C8 X; O9 p% k# \
_serialPort = new SerialPort();! b9 ~* `0 D" D. a7 b& R, }* t) h; N
//枚举计算机中的串口
4 @3 G0 P- x# H" |$ a* b string[] ports = SerialPort.GetPortNames();
. h, a2 D- X' V8 @1 M! k& ?& k* S, e //如果系统没有串口装置则退出
# [1 b5 D5 v8 P; F3 o/ \8 n if (ports == null)
8 E# C$ q3 w- T: I1 `, \ {
1 p4 q- M/ k9 D' X/ ^ this.close();$ P4 o: S9 n$ x3 e0 Q1 P& B* ^
}5 K) X0 B8 n' F# U: A% C$ B
try
) H* ~0 Q9 _0 F; U( H8 {. @ {6 A1 R( H: }6 H; I! m
//使用系统的第一个串行端口
" i$ o4 d' K F( B3 J* i( L _serialPort.PortName = ports[0];2 v( q; Q% N: F
//设置为9600的速率: u$ j! [" l$ ~0 Z* o2 W7 B8 c1 ]. I
_serialPort.BaudRate = 9600;
* ~2 b- ^( d0 h //设置为无校验5 q" P' a4 f$ q$ ^1 {; U
_serialPort.Parity = Parity.None;
* C: F# e" u8 D
. R! f+ L3 r( o( i. z+ | //设置为8位数据
& R9 M' f J: P _serialPort.DataBits = 8;/ _0 `9 O! M, F4 ^
//设置停止位为1
% i( C6 P7 Z4 M+ J/ g3 k' ~, W: o4 { _serialPort.StopBits = StopBits.One;
4 M" U9 x; P! w) z1 v, s //设置为无握手
0 u4 s& ]9 j- w5 @; U5 q8 B: F _serialPort.Handshake = Handshake.None;
3 y9 g1 h% i* h //设置读/写超时值9 Q9 _+ ^% ?0 S# N2 {
_serialPort.ReadTimeout = 500;
, m' B; A3 L' p6 W0 R l _serialPort.WriteTimeout = 500;
# @. H3 i3 \( F# `5 {4 |2 B //打开串行端口$ r7 w, s2 B: K0 M, t7 Q" A# p
_serialPort.Open();1 \5 a$ Y2 }" T7 n4 V) s5 W6 z# t
}( A( Q" f/ t7 b' D7 m3 H% I
catch (Exception ex)
4 z7 F# f0 O6 [; D- ?" w2 T {
2 ]2 r- t" k6 e) z$ p3 o Message.show(ex.Message); ?- j9 {3 {# S* S5 O. G' L1 O
}3 V7 t' a' L; @- c( S- |5 }- ^
}! E7 s3 ]: Z* o% b8 l
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
/ X) m4 A; M& ]6 E1 d! ` 按键命名 提示内容
9 l" t' B9 f5 y R G3 r! [ button_PLY 播放5 x$ N( ]5 \* E8 G$ O. d( j
button_STP 停止) q0 }" q# L# n3 \7 M
button_FWD 快进
- E9 F$ c) y; T4 Z button_RWD 快倒
2 @" F; w2 Y$ c$ z- H button_RCE 播放0 m1 j2 Y9 a! L: e4 E! R
button_RTM 清零 j, Q5 X9 y4 b
button_ZLO 定位到零+ j0 I, }- t" v
——双击按钮图标增加按钮处理方法(以录音为例)* G3 ^! v6 z" `+ C: w s
private void button_PLY_Click(object sender, RoutedEventArgs e); L9 n7 j& | g
{0 F; g$ g+ e/ w% ]$ ]
try
! F6 D# s6 {% g; J" ? { f. e8 h$ P) p7 q" d
//发送从输入信号直接输出方式控制字符串
7 m! @( g/ A0 |9 B3 L _serialPort.WriteLine("INP F ");( F0 P. b, }% P7 p C3 F
: s* b: Q/ [4 ? //休止100ms, X; C: y- p2 |( w/ z( E
Thread.Sleep(100);
* H- k/ I! E5 A5 t1 e: K //发送所有通道Ready的控制字符串4 s( _8 N0 \: I
_serialPort.WriteLine("REA F "); & d' G, P( Z" Q- G2 z S
Thread.Sleep(100);
; ]6 F, P! t K7 H3 F //发送开始录音的控制字符串。
3 M" L+ s) h. C2 f7 P _serialPort.WriteLine("REC ");
: N6 C5 N* p0 T4 N4 `# g `' E+ B+ P }
2 }5 S, Y& m2 q [3 V* u* H catch (Exception ex)- e# k/ V& z. w, n) `5 g o N
{
: |- D* P1 C* o, U Message.show(ex.Message);
- [ ?7 b: j' e7 N5 T }
( x; ]: {3 @- n, _# G' O7 R7 r }
* Z9 \) |, |+ h- T, E% e 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
- r6 c) A" U# G) y, j; i! I. t. A2 I 按以上方法增加相应按键的处理方法,并发送对应的指令即可。% V. r/ I {( w7 v3 y
播放控制字符串:PLY+空格+回车9 J% r6 R2 M) Y
停止控制字符串:STP+空格+回车' m- ^" E9 ^; g
快进控制字符串:FWD+空格+回车
9 G% u i0 B" {! \8 _+ ]9 K6 _ 快倒控制字符串:RWD+空格+回车
$ t, ?6 o9 A5 w3 F, u 复位控制字符串:RTM+空格+回车
: l' k& D2 R f% Z 定位到零字符串:LZA+空格+回车$ A3 y' [) w7 J' O! y
2 j. @# J! q6 d/ w1 K
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}3 _- D0 Q+ |' H
2 U2 ~' \3 y5 [: @- Q 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。0 l7 |2 c) D+ h! M, f. a
|