第五部分 控制软件编写实例! _$ ^0 v+ @6 K& k8 T, }
# q" r" f$ e/ a+ p 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
8 |& B0 h- \* ]% ~5 h, l& W& }3 ]* I 1、开发环境
4 I- I- _1 [! N4 n1 Y 编译软件:Microsoft Visual Studio 20103 m& q$ u6 k4 a: q) g1 j
基础框架:Microsoft .NetFramework 4.0" e+ p8 T) k" V4 v' G* N( h ]
程序框架:Microsoft WPF
" N8 U0 w6 H9 w+ y 编程语言:C#
8 Y4 g! F7 B: s% r5 f+ e/ D1 P 2、实例功能# J6 w/ {0 }0 p) N1 b
——播放功能9 P) W& d" T [% \6 o
——停止功能: {6 h0 O0 w7 f* X; d" w
——快速前进功能
# w) M2 J1 _/ f$ T" _ ——快速倒退功能
! Q) Z+ I$ o+ Y. {6 G! h4 a( ^ ——录音功能
- O/ T# j4 F5 N ——复位功能0 }4 L% K0 N! X
——定位功能
, b. A6 e% Y) l2 r$ O% f6 Y6 F 3、实例代码) K# y( |9 Y7 n$ J1 u1 C
——在Visual Studio 2010中新建一个工程文件。
, y4 M, ?- ~+ g ——在工程文件中的窗体代码文件中添加IO端口的引用。
; |8 I1 F- ]# L2 N6 l- A( o using System.IO.Ports;7 u' L; h5 h- Q/ J* K3 ^" S: J
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
& b% A# F1 S$ E& |6 E+ M static SerialPort _serialPort;
! V: H4 W) x3 B8 t+ l7 D1 a ——双击窗体增加窗体装入事件处理方法
; L% m9 R) r4 i' N4 I3 g2 d3 Q- ] private void Window_Loaded(object sender, RoutedEventArgs e)( V7 J. ]! q5 \$ G) K
{
( S2 d: N. o6 a }/ v) n" `- p% R2 ?! G$ m6 z
在窗体装入事件处理方法中写入端口初始化的代码。
7 A e; Z( k6 c( K2 m7 w$ m: B private void Window_Loaded(object sender, RoutedEventArgs e)9 I3 ~8 y8 D8 z9 }) E
{8 U; U1 X4 i; B. L; @* P
//创建一个新的串口对象实例; z5 l8 P; w/ n4 W
_serialPort = new SerialPort();' o" ?7 T5 L9 n; e
//枚举计算机中的串口) i, A8 S7 ~- J' j9 E
string[] ports = SerialPort.GetPortNames();; ^& I: U2 m$ Z7 Y0 Y) g% [7 f. M
//如果系统没有串口装置则退出+ h4 p# b( {$ y
if (ports == null)
3 U4 M" J. L3 E* C {7 Q( ?$ X: K3 v9 b: c0 A# Z# F
this.close();
' s+ m# }* s- y& F- n% c, w }5 ]2 ]1 O- N2 I% O
try+ J. D1 O4 c! _4 y; f. }/ H
{0 s5 j- a- i& N- U- s5 e& o( h. R# H- O
//使用系统的第一个串行端口& {# l: w2 m5 s6 X2 F! l
_serialPort.PortName = ports[0];
8 ~* G9 u* K' g. z" i //设置为9600的速率
' O: ]2 h& c. M' _ S3 w$ Q _serialPort.BaudRate = 9600;" A* g6 z3 U2 |$ `/ `# J( r" b" }
//设置为无校验
I# [* z+ c0 _, P9 c% N+ T# h _serialPort.Parity = Parity.None;2 x; M6 u; ]6 C6 J7 q1 M
0 L0 B G( p/ h' w
//设置为8位数据% B. o, M1 s( D& ]3 a5 {
_serialPort.DataBits = 8;( A4 Q# W j8 o M+ { A
//设置停止位为1
; z* K7 Q& Q9 X1 {, F _serialPort.StopBits = StopBits.One;# A \: S! r" @3 J
//设置为无握手) C) k5 Z8 K, [5 K( j
_serialPort.Handshake = Handshake.None;
/ O8 I9 P2 `8 {' G, l2 |1 f //设置读/写超时值7 A1 m1 s- A2 U" t1 S
_serialPort.ReadTimeout = 500;/ e: l' R, }0 B0 i
_serialPort.WriteTimeout = 500;
+ J& c2 n2 W e' d9 m5 V //打开串行端口
$ H6 \! V7 G; \( k _serialPort.Open();
$ B4 ^; g+ I( @, L$ J& ? }' y! b" Z' O1 |& N+ f0 ^$ Y
catch (Exception ex)
: G n& R* ~7 N: l9 C {
) n4 u7 z/ N D( p2 f2 P2 y! Y Message.show(ex.Message);' ^/ |3 L. N @. x
}
% I3 c1 k8 n" e% N9 J* Q, ^- M3 Q; ^ }
$ L, r' J3 X* s! o1 B6 C6 G ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
7 a4 Y$ K- @" v" v 按键命名 提示内容
; @+ @9 L' u% r button_PLY 播放* t5 w3 I, W S' g3 H# e5 F
button_STP 停止; {( V3 I2 C& l# b- Q6 D
button_FWD 快进/ H; s# c- y. ~4 G
button_RWD 快倒
, W% r+ z5 X0 x button_RCE 播放! n! t% ~. A. _& a4 A
button_RTM 清零
2 Y, ~: L$ i& b( d+ X button_ZLO 定位到零
6 o( K% b8 t& Y- S# ]5 s( e ——双击按钮图标增加按钮处理方法(以录音为例)3 Z7 b$ i8 M' j( E
private void button_PLY_Click(object sender, RoutedEventArgs e)
- z# v2 Y& k, N0 q) N3 y {
# y! a% ~! w+ Q% ~3 Z8 S% ? try
. W4 h" T. I6 m/ `! x {8 Y! m4 X1 D+ S% e/ {; Q# G
//发送从输入信号直接输出方式控制字符串$ ]) B5 d; J2 F/ a/ H- m$ x
_serialPort.WriteLine("INP F ");% }3 A7 Y/ k9 x9 X; U, f9 _
% l/ X, \& [ g* J
//休止100ms' Q J+ M. n# c3 B) w
Thread.Sleep(100);
' C; \4 k: E( A8 }: N //发送所有通道Ready的控制字符串
! ` E8 Z7 V# d( ], | _serialPort.WriteLine("REA F ");
* p% K8 h+ P) h1 P& L9 B3 { Thread.Sleep(100);5 x& X" Q" q& i
//发送开始录音的控制字符串。
- C4 u& c7 G% @) x5 L2 T5 o# C$ X _serialPort.WriteLine("REC ");
+ m$ W9 U# W# }/ S! h }9 Y4 P7 M8 y1 W. }0 e9 H
catch (Exception ex), j+ p7 X5 k8 J e
{1 V* p, A8 [: A1 J; W6 g
Message.show(ex.Message);) |5 N/ H; U/ X, P8 \. u6 v+ ]
}
3 ?/ A/ P: j0 u# y/ A }
: ^* p2 N3 C2 G) ^" ?% R9 f 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。, u& U) r# f! S
按以上方法增加相应按键的处理方法,并发送对应的指令即可。
( @% U* O5 D# ^% |% R5 N* v e4 _* _! U5 S 播放控制字符串:PLY+空格+回车
9 e$ y$ Q% N$ T' A, z$ W$ ? 停止控制字符串:STP+空格+回车4 q+ G; E1 e$ [3 p. N8 { W
快进控制字符串:FWD+空格+回车
: l/ s4 P5 b& n5 l9 Y8 ? 快倒控制字符串:RWD+空格+回车4 C% I3 L* I8 c$ J4 V1 S
复位控制字符串:RTM+空格+回车
2 K( h7 n9 ^$ p4 ~& Z% ^! A 定位到零字符串:LZA+空格+回车
7 D7 H! d0 _9 Y/ N8 m5 s- _, ] / S m/ |- _+ ^- Q' u
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}' E/ S# T$ [3 x0 j4 Y
1 g1 G- G, ?4 r/ g/ @& S 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
, z/ ]: ?# i4 s/ ^ |