第五部分 控制软件编写实例, }" N) u! h' s) e9 }8 N6 C
7 G7 L+ R ]4 r9 K: t' _( F
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。0 Z( l( D; a* Q$ `9 |: _
1、开发环境
3 o5 W: b2 r; U* b4 K7 ~ 编译软件:Microsoft Visual Studio 20106 v/ L- p/ p" t+ e% e% O
基础框架:Microsoft .NetFramework 4.07 Y2 |8 L1 F4 p1 M' w
程序框架:Microsoft WPF$ U' i' n' W- u" R v9 P+ N
编程语言:C#
) K) D% L( b) B- M( o1 P- o' Z7 A' b+ O 2、实例功能
1 v5 C w5 B5 R7 N4 ~- z/ x$ o ——播放功能
. J& H6 Q; \6 |3 s. ~" y1 ` ——停止功能
, d6 I4 x4 I0 q) O7 I+ U ——快速前进功能
1 U D( P: n0 d ——快速倒退功能; @) `9 ~% D3 B3 E
——录音功能* j( J" X4 ~! @6 W3 o# g" w
——复位功能
i+ t+ J: w- O# `0 t$ S5 V ——定位功能
4 A, B* r! w6 A" v! `3 D3 I 3、实例代码+ J! `$ m0 V2 z* P
——在Visual Studio 2010中新建一个工程文件。
% D+ ^/ s, G) g: L2 o% {! l% m F0 j ——在工程文件中的窗体代码文件中添加IO端口的引用。
6 g5 J" p9 _# q; Z" x+ C9 S; P using System.IO.Ports;
1 s* {9 i! N1 A) ?( i/ j ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。4 z! V' i2 x* I# K/ F2 X
static SerialPort _serialPort;
# Q4 Q! O( L8 v7 e' Q9 H! D. x ——双击窗体增加窗体装入事件处理方法) z& I* T" b& B0 @
private void Window_Loaded(object sender, RoutedEventArgs e)9 L2 m3 Q% j5 a2 S& }! y
{
2 E3 E2 j5 |4 ~6 x0 [9 p4 q# h }; B. ^0 N! B7 a! B
在窗体装入事件处理方法中写入端口初始化的代码。/ }* [" H2 G5 E, Q
private void Window_Loaded(object sender, RoutedEventArgs e)2 E- f* c4 J$ S6 M7 V* Z2 i( w% ^
{3 c/ a9 P, a0 i/ s4 Y& l0 [
//创建一个新的串口对象实例$ F) c6 Z. ]3 p+ |+ i! W* E7 n
_serialPort = new SerialPort();
: N& `) S" _6 l+ ~ //枚举计算机中的串口9 I/ O0 U: Q) M1 t& @
string[] ports = SerialPort.GetPortNames();
! i. j0 q' U9 h2 ^% R, }0 x$ m% b- N //如果系统没有串口装置则退出
, L+ @# ?% W& I% V( w0 ? if (ports == null), {$ a. y; Z; y! K
{2 h- h+ z5 p: Z
this.close();
2 n$ \+ Q* N4 l1 m- f- N8 N }
. x: ]' Z9 \) v+ M$ D5 A try
% y0 b: X3 p0 j; k; c! W {
4 m( i# K& ]. \+ z) M, ]* T; n z //使用系统的第一个串行端口
y) y: @+ K8 r) y3 \: c8 M/ p5 ~7 [ K _serialPort.PortName = ports[0];
7 ^( c) F& e w //设置为9600的速率
; K- a6 S6 |! Y7 x, F/ @9 j _serialPort.BaudRate = 9600;& u$ H/ _* _' t
//设置为无校验) N) x' H$ C2 H/ L7 H0 D
_serialPort.Parity = Parity.None;' i4 x( ~$ J* o, ^; G
8 x. x0 S9 c. O Z1 [
//设置为8位数据
1 n& ^ w. N' {) B: d. h _serialPort.DataBits = 8;. F- T c' K* ^- g4 U4 N8 F$ e
//设置停止位为1
6 D$ z0 H$ ^1 y( [; ?9 y5 q' \ _serialPort.StopBits = StopBits.One;
+ A) K" M4 N9 f5 t( n: `" o //设置为无握手& |( @, R+ O( \8 k$ W- }
_serialPort.Handshake = Handshake.None;
& A. p" E3 d' e! m8 A: T //设置读/写超时值
+ k+ X$ J2 z" X, _' r5 ]4 V( b) n _serialPort.ReadTimeout = 500;
0 k6 M# a& | s, y. D% X$ O _serialPort.WriteTimeout = 500;* L a+ x$ O5 u5 o/ `
//打开串行端口
, |. d* q* C% N* k/ t. L _serialPort.Open();
# l6 E0 ]8 ]9 }" ]5 R- r: r" s {* j+ w }
$ s. `7 t: r& Z, ~; X catch (Exception ex)
% u3 o+ a; D" o5 q/ k {" i5 L0 W T) F
Message.show(ex.Message); A9 u/ i/ l5 `. ~ Z5 E
}6 I l% B1 v, F; @% B0 v
}% A+ \' J# L. }# r# {, S
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
: Q. m" ~; Y0 [ 按键命名 提示内容/ D, H/ k. D/ ^* f2 o4 o) m/ L
button_PLY 播放
1 A4 N& u; w1 `* \& B button_STP 停止
6 Y. O w4 ] ?( d. L& h- v- A button_FWD 快进
8 V1 J7 @( B% W button_RWD 快倒
- r0 v* ]3 e& G; j9 K& F7 e button_RCE 播放& [) {! A* d& g* Y
button_RTM 清零
' S! P, u b) d% r& N button_ZLO 定位到零
4 D7 m: C* q D) ]* O$ J ——双击按钮图标增加按钮处理方法(以录音为例)) y' u6 A2 |( l$ t. `$ q9 i! ~3 d
private void button_PLY_Click(object sender, RoutedEventArgs e)
' S& a, l" j8 `6 ^2 K# V; f {0 n/ v5 c1 n# V
try
; f1 r9 E; }4 { e4 N' [( P* ^- \; ` {
, q3 ?* E% Z" U; T //发送从输入信号直接输出方式控制字符串. q+ F* B' M1 j' h T
_serialPort.WriteLine("INP F ");1 I, q- m9 v: C; {% B f
3 E& g" @2 F2 t; A/ E //休止100ms7 @1 P% B/ i/ U* v/ \0 {$ ?; F
Thread.Sleep(100);
% x8 z# c% b8 H //发送所有通道Ready的控制字符串
3 M' e1 ~* x! j% p& c _serialPort.WriteLine("REA F "); 6 v4 \, k% N- X
Thread.Sleep(100);+ j- k' i5 x C* e p
//发送开始录音的控制字符串。& X3 j" q% @' M1 A4 a+ a
_serialPort.WriteLine("REC ");
) j( @& S- z3 d& q }1 j2 F B0 P4 L. I, f& T
catch (Exception ex)
$ s# f2 U4 H4 w3 d7 o4 @, x. b {9 U2 f) T2 ^. ~1 ]9 V* A
Message.show(ex.Message);
4 J0 y* _5 x8 e: h5 n# u& a. y }
* ]8 u/ h. F4 ]: }% h* p }
$ Y0 U$ Z* t' u, V6 s# z; m0 _ 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。( y P6 E' ~$ T% V2 K
按以上方法增加相应按键的处理方法,并发送对应的指令即可。2 n' Q5 Z1 Q/ ~7 ^6 d/ G) ~, U. X
播放控制字符串:PLY+空格+回车+ o; A Y/ t9 |9 N: W
停止控制字符串:STP+空格+回车: g. z3 i. F- ^, c
快进控制字符串:FWD+空格+回车
0 A% F. l2 l0 z" d( F/ Q' E5 i 快倒控制字符串:RWD+空格+回车
% @! q+ D! n+ b8 w- w4 F; U* w 复位控制字符串:RTM+空格+回车7 N& b* m7 P8 u5 D* M# u
定位到零字符串:LZA+空格+回车7 _% c- s+ u, I) ?2 p; H
8 ~3 }# x5 X% e. D 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
$ [3 k; W! t- P5 P9 q7 i; { q 6 y: S" t2 P6 `. W
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
" W0 [! l; x$ t% G2 n6 c8 t |