第五部分 控制软件编写实例5 }; I+ p4 k+ h) H g
! h+ A9 c$ {% h/ \ 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
0 y) \) c. f5 o' Q8 V2 u8 d7 W 1、开发环境
! B: N+ R! h3 P/ K, q9 O% V* U 编译软件:Microsoft Visual Studio 2010 n- y0 W. [% U$ |4 w+ X, B7 e
基础框架:Microsoft .NetFramework 4.05 A5 I" W8 L6 H$ _9 Q. `0 y
程序框架:Microsoft WPF
! v! Y; p0 O' f# b" ~) M& ~ @) n 编程语言:C#) U4 ?7 O# m) ~+ U, ?) r
2、实例功能9 J, q) Q( e, ]
——播放功能6 U9 {: S# d2 B- k
——停止功能
# D/ V. M2 C! S; Y+ v9 o* q! k! ` ——快速前进功能! u; C1 c4 R8 @7 z& P7 [
——快速倒退功能! A0 j$ Q- D% g! }+ e7 y V
——录音功能
1 }7 ?: g+ ^* n9 A7 H ——复位功能, t0 I" h% e! j$ \- E4 F3 F5 U
——定位功能9 g2 s! B9 x& ]# B
3、实例代码
1 K1 \ x2 h, M0 a; f1 ^ ——在Visual Studio 2010中新建一个工程文件。
' O3 k* ^) o8 g! n ——在工程文件中的窗体代码文件中添加IO端口的引用。1 m& r* j0 I! S! i' X1 U
using System.IO.Ports;
: X( ?8 m3 G% z: v0 o5 S. Q ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
J$ ]6 t) {/ L2 m static SerialPort _serialPort;
& C( H) e4 P3 C) ~9 [ ——双击窗体增加窗体装入事件处理方法( x: ~" N* H/ o2 s7 h1 B2 W* p0 l
private void Window_Loaded(object sender, RoutedEventArgs e)7 R0 v+ w0 I# V+ }! ]& A
{( I: v/ l3 d7 n" z; Z9 Q3 G
}9 i% P& X% }) @! \
在窗体装入事件处理方法中写入端口初始化的代码。% y& z, f& t/ m; H: O2 H6 t* T# i
private void Window_Loaded(object sender, RoutedEventArgs e)
1 H8 T% u [: r, b4 l+ U; ` {
% y. k/ s \$ Z. f2 L //创建一个新的串口对象实例
1 y% m& k* p/ i/ e" t) j3 | _serialPort = new SerialPort();
0 ~8 B+ z' u, X0 D+ d //枚举计算机中的串口
. `# y- R5 J3 c3 r$ o8 J string[] ports = SerialPort.GetPortNames();) P6 O7 N$ N* `. R1 p- d% K* Q
//如果系统没有串口装置则退出: N7 X! v$ E% k# K. b
if (ports == null)
8 z' R8 E9 `& T$ @* b" }4 R- k {& _/ c% R( @" e4 Q: z1 `- H
this.close();5 t3 k2 y4 i" Y- R; u
}; h: \, n& D1 l3 ~- P" }; G
try7 p5 H; \( Q5 G5 t6 X7 [2 d3 l
{
3 X; w; h1 @6 }0 R. j0 D2 t' [4 t //使用系统的第一个串行端口
5 t7 m9 i' V: E5 A5 n! K _serialPort.PortName = ports[0];
[( O* F4 \+ V) ]( y: c& b' x //设置为9600的速率4 Y) H* L" N" j9 ^' j* K, Q
_serialPort.BaudRate = 9600;
1 _2 S8 d+ `: j" p; ~ //设置为无校验3 b' Y2 _- w% K( e
_serialPort.Parity = Parity.None;/ g( ]- d% N; E# Z- E% V
- j; e# f; s. Y! F( B //设置为8位数据
" ?3 E4 ~9 q' h0 Z _serialPort.DataBits = 8;
# T) J( }- f E, J0 b) }% v; m- d/ A //设置停止位为1. Q# N& T7 S7 @9 t3 ]0 [/ Y$ V
_serialPort.StopBits = StopBits.One;6 ]* c: j0 w, [9 [1 f9 F/ J! w
//设置为无握手
3 g1 e, t% l+ @2 v7 v _serialPort.Handshake = Handshake.None;
& A. K; v4 K- _2 x //设置读/写超时值
& |7 X* c$ Q0 v- z: `# K. J+ ^ _serialPort.ReadTimeout = 500;! c6 F3 b* W" f" Y" {, z
_serialPort.WriteTimeout = 500;$ o: j. _. I" g4 G0 h( z5 |
//打开串行端口
; c6 h) y1 v' B6 C2 R* ~. d- I _serialPort.Open();
, o D V7 R& u; R5 S }" g7 S3 M4 K$ D
catch (Exception ex)! y8 U3 _0 n) x" r1 R. d. k) `
{: Y r8 g( Z+ j' \: `$ L/ \0 f7 K
Message.show(ex.Message);6 H3 v X$ C* ?: D0 c! w! |
}; @, N* i0 M. }& Q( e& w$ z) }
} z4 n* Z4 R" _
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
; z8 {, l5 t+ [5 k9 O 按键命名 提示内容
. _! v* q" T7 u1 p4 m; f: ~ button_PLY 播放. T* r& M! w/ R3 L9 L
button_STP 停止
$ j, v9 G# v' Q& S- U button_FWD 快进
8 @8 v# B7 o# d4 l' C button_RWD 快倒) n0 {2 Y# Z, I3 @, G& r& a+ k4 ?- `
button_RCE 播放
- D+ p' m2 W; y, ]5 x2 |7 }; S button_RTM 清零
, R( k' R- ^0 T1 ?& d: i button_ZLO 定位到零
( N3 G- c+ }/ J, o2 S# x! n ——双击按钮图标增加按钮处理方法(以录音为例) H& N0 i4 {5 ?' N9 I C+ Q* g
private void button_PLY_Click(object sender, RoutedEventArgs e)
6 Y J% {5 A# A+ K. o$ W {% T! c9 T" v! p( G7 H
try
) y; M% d4 T7 t7 l- ] {
) g' P/ z3 [& U5 v: j0 `$ d0 q( | //发送从输入信号直接输出方式控制字符串# l0 [% p+ i# p# ?; P
_serialPort.WriteLine("INP F ");! s' u% h' m4 _1 p
' k( n! E8 h8 T //休止100ms
* h2 v$ z3 s# H3 `% Q& P Thread.Sleep(100);
/ z; t+ N* _5 p) Y //发送所有通道Ready的控制字符串
8 [6 D& {3 _2 |6 d _serialPort.WriteLine("REA F ");
/ W+ o- a( j S; Y+ d y; ?/ H6 D) E Thread.Sleep(100);% j- D5 Q) P4 |( `0 m% C0 M
//发送开始录音的控制字符串。
* Q( @9 W: E, B _serialPort.WriteLine("REC ");" A& A0 G0 d/ J
}, [1 }/ V1 |( L" z/ `% u
catch (Exception ex)
U2 A% s4 w1 I- d- g3 E* \4 l {# n1 d9 Y7 k; X# S
Message.show(ex.Message);
: M% U& C+ A4 n- S( w+ p }
3 e' w4 y* j8 a, c& I- } }2 ?5 T- j: E. W: O/ ~! S" [- s# y
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
/ F9 z7 Q" R8 g! u& k: O5 t2 o 按以上方法增加相应按键的处理方法,并发送对应的指令即可。
. T# o' z: j9 d 播放控制字符串:PLY+空格+回车3 T; [5 B* k0 h# ~& v9 u/ e
停止控制字符串:STP+空格+回车
& |& M& @) Q- i 快进控制字符串:FWD+空格+回车
& W' u& Z- t$ { 快倒控制字符串:RWD+空格+回车
7 z& I) O( k1 _0 B8 J/ c. a5 p 复位控制字符串:RTM+空格+回车) M1 j0 H: u' P6 z5 a
定位到零字符串:LZA+空格+回车
: _* o2 G$ X) K ! g; t3 y2 L/ S
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}0 L9 _5 ~% F1 U& r" ?. W
* s- `1 E- c( Y2 B& B
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
7 _2 q0 f ^- n% I- d( A5 l6 k- i |