第五部分 控制软件编写实例5 {- J9 q8 p+ J! k C1 F
' Z- }4 B! K R* l) G8 M
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。- i9 I4 W) [- E. }& q# Y3 G
1、开发环境4 D2 {1 J& \ R! ]; g' j2 Q ^2 j
编译软件:Microsoft Visual Studio 2010
# {; G# D" I- F0 l: s- R 基础框架:Microsoft .NetFramework 4.0
, \& g8 h5 I: \ l 程序框架:Microsoft WPF
, x% L$ O6 O C 编程语言:C#9 ^* f( W4 P6 H7 J5 Z
2、实例功能
L q& {- [8 y# G ——播放功能8 h6 R) H; B/ R( T- a7 u+ h
——停止功能) V% F7 P- Y, f* ?
——快速前进功能" b0 d0 @4 \) q( W' O- D
——快速倒退功能
& s, v) d3 u" E) R3 ] ——录音功能1 i9 S6 r% Y$ f+ P8 u; t
——复位功能6 T+ v. v+ b' I
——定位功能+ ]% l3 @7 g- J; Z8 I
3、实例代码
7 S6 z6 T, `8 C# N' e2 j4 F ——在Visual Studio 2010中新建一个工程文件。
* B5 Y/ `* O. N& E; E* H2 Q ——在工程文件中的窗体代码文件中添加IO端口的引用。% H2 r" [# }1 U: }
using System.IO.Ports;
% U* F0 u7 q, R ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。! o) E3 y4 f9 }
static SerialPort _serialPort;- y+ V, B* ]" }$ L
——双击窗体增加窗体装入事件处理方法
0 @9 z6 S4 t' K9 A* O3 @ private void Window_Loaded(object sender, RoutedEventArgs e)8 }* D; [7 h$ M% F4 I
{+ _+ ?3 X4 u$ t u5 L2 t$ w
}' f% u& [0 c* i' H7 _ x3 M
在窗体装入事件处理方法中写入端口初始化的代码。
/ i) U* [" D. F/ ^! H private void Window_Loaded(object sender, RoutedEventArgs e)3 c+ _7 v& Q& `9 N Y+ W* B- T
{. \) P8 {. c z- h
//创建一个新的串口对象实例
# F& I) B( s- N v/ i _serialPort = new SerialPort();
* R/ M4 q% }% s1 G. l2 r //枚举计算机中的串口
3 u; O' H1 Q9 R) J string[] ports = SerialPort.GetPortNames();
; J8 K' K, C5 d# @9 Y //如果系统没有串口装置则退出5 C4 ~* v. |0 B( ~8 t
if (ports == null)
5 s7 W% r/ A3 I5 I5 ^: L0 b7 | {
5 @( y3 e) r0 Y) A6 D& Q! z this.close();' B. z j# C1 W' D, R/ O
}
e% n- d( w0 a# L: w. F try
/ I V$ H. B+ c {3 i; Q* m3 f- `( V8 K
//使用系统的第一个串行端口2 W4 y& }$ g6 E; t
_serialPort.PortName = ports[0];' E/ F; Q' G4 I( F, S6 a4 j" z8 Q
//设置为9600的速率: R8 l9 m$ Q! u$ S( S
_serialPort.BaudRate = 9600;3 u8 _- q/ P' _7 G
//设置为无校验2 I4 X/ [7 N6 }& V, _( r5 S8 D9 D
_serialPort.Parity = Parity.None;
8 h8 y2 i* E/ ]5 b/ V6 U
- v N" f6 s9 Q //设置为8位数据; w4 {, `& _4 t: n: k* z2 ~4 X t
_serialPort.DataBits = 8;
3 X) q: U; B0 o2 m //设置停止位为1
! k3 s* H/ }- U; ]6 {6 y9 c0 u4 H8 j _serialPort.StopBits = StopBits.One;
' i0 f, K7 q( a0 Z5 W j //设置为无握手
5 e3 Q; e6 ~$ t _serialPort.Handshake = Handshake.None;
/ v/ H" ?+ Y- g& g, i5 w& f //设置读/写超时值" A, o- R S5 m/ M
_serialPort.ReadTimeout = 500;
- P( K% G7 O( o7 h. b. l _serialPort.WriteTimeout = 500;/ k# Q" i1 {9 p% P1 \. ~& r
//打开串行端口- t ?% k' M6 O6 {5 W# F: F3 K4 D
_serialPort.Open();
8 F$ f: d6 l# m V! ` }
% I* n% {9 q! X% H* ^ catch (Exception ex)* X/ k7 F% C1 ^* y( s9 E2 L' I6 A- V
{( }7 b6 J1 i# V! [& z& ^, o
Message.show(ex.Message);
+ K4 o5 Y3 Y& i* e4 Z! |$ h( l }0 O; q; v0 Y# q" P4 E
}
& h2 s7 q$ T+ l8 _5 e: X ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
4 r& V+ T+ [8 N! j4 w 按键命名 提示内容: o% a' Y# c' c% a0 X* F9 V/ _
button_PLY 播放
# _! C& x8 n5 H% p, Y button_STP 停止& t* O2 g: x- i1 H! z$ @
button_FWD 快进; g( o7 y& T/ m0 Y
button_RWD 快倒3 g/ y! q8 ?: T8 ~4 X5 d ], S( O8 s
button_RCE 播放: j! R4 R: q# K0 f: J, S
button_RTM 清零- b2 z3 N( J; H6 y8 a
button_ZLO 定位到零4 D$ _) i. Q$ v" W
——双击按钮图标增加按钮处理方法(以录音为例)8 G% a7 ]% {( B# @: A
private void button_PLY_Click(object sender, RoutedEventArgs e)
4 F ^' ~. z% ^, f$ B# m% ~ {5 Q5 h9 V$ N5 Z3 w# ~
try
( _5 h7 M, J6 R {* M9 Q- J8 t) C9 v, d) X
//发送从输入信号直接输出方式控制字符串
1 w) U% D! K( r8 |8 v; w _serialPort.WriteLine("INP F ");
' i' [% b5 |0 Q6 Y% r* c) V$ s9 c
/ F; ]; D3 Q8 B# X //休止100ms5 S) P( h' u* A# U" x* q6 ^0 S; m$ m
Thread.Sleep(100);7 P" E- x9 y) z- ~8 C/ G
//发送所有通道Ready的控制字符串: u" y, L" {3 n( p/ `0 |
_serialPort.WriteLine("REA F "); : g. ^' z' m! {) a* k" G
Thread.Sleep(100);* _# P9 L" [4 F2 @- B: c1 Q
//发送开始录音的控制字符串。
+ x: l: \9 i5 [% |, v% }& f _serialPort.WriteLine("REC ");7 r7 d4 p1 I) E( ]. `* s0 b
}
4 `# j7 S) f, L6 L( z catch (Exception ex)
# b* P# Y2 M, G {. v, U, e: M7 V4 w
Message.show(ex.Message);* t" x! ^7 F7 A5 i0 n1 g
}
+ R; ? ?! D/ H% V }
X% m2 Z! R& D 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
3 i% d6 n$ K3 a# x/ U" e4 } 按以上方法增加相应按键的处理方法,并发送对应的指令即可。, r. W! s4 P5 P0 K
播放控制字符串:PLY+空格+回车
6 E' T `4 q- U, a0 l! X 停止控制字符串:STP+空格+回车, Y0 \8 Q; `" q2 Y5 r
快进控制字符串:FWD+空格+回车
* W. b4 \; w2 X, l8 Z2 i 快倒控制字符串:RWD+空格+回车) ]9 I( Z! h$ R- i, E
复位控制字符串:RTM+空格+回车
3 [3 l3 |; R# Y1 [7 q; x 定位到零字符串:LZA+空格+回车
) k) V- H! M% F
2 I6 U6 f! U% z, p 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}6 w8 y o( ?6 R. m
. N7 z" B7 P f ]3 `- d 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
O( Q( U; C) @: o4 m: X |