第五部分 控制软件编写实例
9 p7 Y) X s7 ]3 K' d! J- W, h( Y& l$ n6 j3 ^/ [3 E4 y, ~- I, J! D/ {8 T
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
+ t4 J1 z$ u/ K# R+ J4 l 1、开发环境
: }. n& v4 k( _) a* m8 F: m& M* X3 P 编译软件:Microsoft Visual Studio 2010
, l4 x2 @2 ?! w' N% ] 基础框架:Microsoft .NetFramework 4.0
/ p! w8 Q& V0 h8 ~1 o# F 程序框架:Microsoft WPF
: G% D# A' W; K9 L% \5 R; o 编程语言:C#1 W& i+ o6 ^7 U
2、实例功能
3 [+ H4 J! e" T0 }( M ——播放功能
3 ^& @% h+ f5 w+ I2 A8 d ——停止功能
1 a: L1 S/ v8 u& _ ——快速前进功能
) N, m& f! A. d8 t9 K3 a ——快速倒退功能1 G) L8 C3 K1 B3 u! _; {
——录音功能
, ~. [# B6 @2 K- Y3 E ——复位功能# e0 o" _; z5 {6 m7 C5 |
——定位功能9 d" O4 w# ?3 [! M* F0 W
3、实例代码
$ w0 t- I( c2 D1 i0 u ——在Visual Studio 2010中新建一个工程文件。
* e8 h5 s; |7 H2 x3 P) e' n, f: n ——在工程文件中的窗体代码文件中添加IO端口的引用。
+ }5 ~: A$ h, x+ o using System.IO.Ports;
& R( ]# r+ W i# W ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
% y* y% j& y3 D% d8 c static SerialPort _serialPort;+ Q- @0 U, |7 w" l. {, {, C( |
——双击窗体增加窗体装入事件处理方法! O0 a( ?) b( K! L" [5 T
private void Window_Loaded(object sender, RoutedEventArgs e)' s k, Z2 |8 P4 |' J6 y
{7 i2 S! o; U* q' Y! G
}
* y) R ^( m. l 在窗体装入事件处理方法中写入端口初始化的代码。
" }4 ?1 \* M* ?5 Y private void Window_Loaded(object sender, RoutedEventArgs e)5 Y3 k0 S% N% X) U4 _/ `' e
{; Z) b" Y/ }4 S D9 u, o( q: R
//创建一个新的串口对象实例
- ^% y/ z+ |$ E/ Z# P, \ _serialPort = new SerialPort();
4 T! Z; o% v% w4 l) |- k9 R. N/ S //枚举计算机中的串口
. X, s) H8 L# G. ?, I string[] ports = SerialPort.GetPortNames();
$ _- W9 i' q5 S" l3 l% Y, v //如果系统没有串口装置则退出! y- Z" u* G3 }, c& Q& T8 l4 p+ n% k' F
if (ports == null)4 c7 G; O$ e1 C; j5 Y
{! X; N: h8 n; J- f& ^" X) |1 j
this.close();- l6 a2 Y3 U) p/ h
}
* p _2 c3 a, H- |- C9 { try8 L, i% p6 I- f; _' Y
{: k1 @9 G3 Q1 e- J% T6 s3 E: Z
//使用系统的第一个串行端口
: B( n) z* c, n% o _serialPort.PortName = ports[0];8 I' F6 f3 J) F. T6 e4 L0 Y8 W
//设置为9600的速率8 X$ z `9 l% r+ I" O2 f
_serialPort.BaudRate = 9600;
2 M4 |; V4 a6 Y1 \2 `5 ~ //设置为无校验. a) s& Y1 |3 A- V" C2 D( z1 H
_serialPort.Parity = Parity.None;
- @1 Q- K u/ q3 }1 h! s) X
- j7 M; C3 K. g& \( l: E //设置为8位数据
1 P$ n* @8 e% \/ X; F2 p _serialPort.DataBits = 8;! m( a+ X( G+ c5 T+ V) i
//设置停止位为1+ e7 n# @, l0 ^# D
_serialPort.StopBits = StopBits.One;
/ l# S8 G6 Y+ k$ G8 x, K# n% W //设置为无握手
' o+ Y! `7 v" v* [! ~; S _serialPort.Handshake = Handshake.None;
/ v, w0 ?. x- ^( X1 o5 ^ //设置读/写超时值
# ]# E) r/ Y* v9 u v) L! d h _serialPort.ReadTimeout = 500;' R. E0 \3 n* F" I/ U: [
_serialPort.WriteTimeout = 500;
+ P- n& f; n' r% P% r8 s( }0 S //打开串行端口
0 n0 J/ w- i2 q& h _serialPort.Open();: G; z! o9 w. J S0 f
}
$ A8 f$ ~) `, a; F& m& {& h catch (Exception ex)
8 P& v# p% N2 A- J# e$ T {
3 m( P3 ]1 m, i$ v# b Message.show(ex.Message);
4 G7 P- E, \5 i+ A& F } v s+ o9 T* y3 w! H$ h- x6 n
} m/ R/ D% q! ~( D* a
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。2 K: e1 V* p6 N$ [* y) u; y4 J
按键命名 提示内容
7 N P' B) t! [6 |: y; j button_PLY 播放' ?* b: F8 u% P) o
button_STP 停止& _/ y, g& H9 x2 b h* T
button_FWD 快进9 t6 i3 f/ h6 M( i- \% P3 Y5 C
button_RWD 快倒
! e4 \' v' P) Y: m3 {) m* Q button_RCE 播放
" F6 M" V8 t3 k5 B+ } button_RTM 清零3 t8 t9 l( h1 u. }$ H1 B8 L
button_ZLO 定位到零
* o% S5 S# P3 c, g1 Z: l) ~ ——双击按钮图标增加按钮处理方法(以录音为例)
0 d$ h8 J% N f7 m private void button_PLY_Click(object sender, RoutedEventArgs e)# {/ H: `8 ?- C2 j5 `% _' e6 b1 }
{, n$ C$ [) ], i
try1 c8 y+ A7 y" m
{
6 j F- Z0 e) D# } //发送从输入信号直接输出方式控制字符串$ M" v* I1 r+ }9 p4 w4 g d4 j/ p
_serialPort.WriteLine("INP F ");: {" V& ]8 m( A" O3 r- g: D* v' G
- i; J: N0 i0 v
//休止100ms: h( P3 `' u5 r# n: i* P2 r% P
Thread.Sleep(100);- K! x* r2 Z3 y, U0 C" Y J
//发送所有通道Ready的控制字符串
" \4 i8 \ a4 P& _7 V _serialPort.WriteLine("REA F ");
; u; d% R% L# e2 ` Thread.Sleep(100);
) @$ G, ~, Q( ?; @& v //发送开始录音的控制字符串。
0 I [9 h0 [1 W! v( p, v1 I _serialPort.WriteLine("REC ");
! V! `8 ~9 t% e& ]7 N) B7 v! o" H- ?, e }$ ^8 r: ]4 v( X" ~
catch (Exception ex)0 J+ d" e/ Z5 ^0 n; m8 k) ~
{
* d8 @' g1 V- S Message.show(ex.Message);
% U, d q: D6 _% \% p# W }3 c7 n7 E0 D" l2 q/ @5 ~
}) x/ y6 S5 w+ P; s+ r1 j0 ]
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
7 I) q9 P" n: c4 H" L& A 按以上方法增加相应按键的处理方法,并发送对应的指令即可。4 z' _) v' C% C$ W/ Y/ s. O& F
播放控制字符串:PLY+空格+回车
# m# ~' E$ R0 W, r 停止控制字符串:STP+空格+回车0 W( \9 r! ?# |7 W, |
快进控制字符串:FWD+空格+回车
) \9 p& @( h, v1 s! A# E9 u 快倒控制字符串:RWD+空格+回车8 H. _: p# Y E4 P" Q
复位控制字符串:RTM+空格+回车+ c* E! c. U8 @/ T: i
定位到零字符串:LZA+空格+回车
3 J! B4 S0 Z7 u4 k# q; Z' f1 f3 a * ?* }: i. a( w9 {0 E& |
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
3 p. I' O+ @0 o1 b' N
6 l+ M. ~9 A3 T( h) K: \ 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。& }( U# i: E6 @5 s) |1 e
|