第五部分 控制软件编写实例
. J. t5 h; Y! I3 ]' v- Q! o+ M) l/ R6 b1 [3 ~) ~1 ~ r
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。' s. Y j& s8 a* g" Q: s, }3 g
1、开发环境- @* w9 j0 l7 S: Y! _
编译软件:Microsoft Visual Studio 2010, c; d% X/ H( W' |
基础框架:Microsoft .NetFramework 4.05 q+ h. t/ _$ j
程序框架:Microsoft WPF
& R# ^& O' G2 e4 I! V 编程语言:C#) N7 e$ G+ q/ `* ~" P; N7 e
2、实例功能
- M/ f; S7 V1 a ——播放功能" S+ s8 j4 m& d
——停止功能
" n4 j$ q6 o9 S2 n$ O8 X4 @! { ——快速前进功能
) j' o! A" H, E5 _8 G: @6 k0 m ~ ——快速倒退功能: q3 X/ ]4 k5 F1 D& ]
——录音功能# P: ?8 B7 [! n# I3 I. ]% j6 z0 q: D
——复位功能
/ b7 _4 o2 z' Y: C0 F- P ——定位功能( P& U6 K6 I2 Q0 o. v
3、实例代码
/ E- s. @4 s- X- h( [. t! Y- B ——在Visual Studio 2010中新建一个工程文件。) ~* r0 ]/ x# z# `# h. _8 N/ n5 R
——在工程文件中的窗体代码文件中添加IO端口的引用。7 Y, N# v& U2 b3 C) n6 B
using System.IO.Ports;
! T! }! J1 W/ i ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
7 j% s: ^# x+ k$ N2 r static SerialPort _serialPort;
! @: J, e3 C3 y ——双击窗体增加窗体装入事件处理方法1 Z5 }2 r( l/ n U
private void Window_Loaded(object sender, RoutedEventArgs e)
}* D N+ r1 w- [3 G* ~ {
6 E; c5 }* v" h: {' G$ p; o } @3 P( V' @1 ~# b# L
在窗体装入事件处理方法中写入端口初始化的代码。
7 D* T- `" B, P" r& M3 D3 h private void Window_Loaded(object sender, RoutedEventArgs e)0 n7 [: S6 t' J* i: i
{2 X. O* I1 z3 k1 N5 j4 |1 R8 b( N# A& l
//创建一个新的串口对象实例$ C$ r! K4 `3 `; n
_serialPort = new SerialPort();
: |9 M9 m5 d! h0 Z% [( d, Z //枚举计算机中的串口7 r4 j0 r/ J4 K% |
string[] ports = SerialPort.GetPortNames();3 u* y: l- B* W' U. o8 L v: L6 S
//如果系统没有串口装置则退出( a. Q- e0 V0 g1 y# d$ L
if (ports == null)
( t0 y) R3 P0 o4 A1 h# V6 E) b {' {+ [0 @0 X; K l2 l
this.close();4 b( P9 I5 R3 d! h) {7 F
}# N) F: B l& [5 I$ V3 q2 Y
try, P9 I% j* _3 }6 S5 q: S- N) s
{! z" M1 D# ]+ w5 _* `: \
//使用系统的第一个串行端口( W6 p' w) L) \ t( G; H C
_serialPort.PortName = ports[0];9 S5 @( f4 `) s8 b! ?
//设置为9600的速率
% a" N: g" V: H' H0 T$ j+ l _serialPort.BaudRate = 9600;6 b3 q! p1 f; K; `. I1 Z
//设置为无校验* D* r, {! `6 |2 D$ j
_serialPort.Parity = Parity.None;8 S( f3 ?6 @7 Q! }7 i6 p
( y& y$ P! E3 f9 r; P( F+ m$ ~2 M7 t& |0 F
//设置为8位数据5 R* _% C# ~7 X
_serialPort.DataBits = 8;
! H# f& x; M- a0 Z& C) k* l* {- X //设置停止位为1
$ N6 R, g, i0 N8 |2 @, X0 o _serialPort.StopBits = StopBits.One;
' b) i! {9 x5 \. M0 e9 K1 K8 ~ //设置为无握手
) V& n- F3 E, @ _serialPort.Handshake = Handshake.None;9 m3 S: z- u4 G) ^$ G) }$ u
//设置读/写超时值( x3 ]6 S$ G8 ?' F
_serialPort.ReadTimeout = 500;
: e* x% C$ @$ x+ J _serialPort.WriteTimeout = 500;; j/ C* q9 }0 N; P' f
//打开串行端口5 b' r5 @" w0 k8 ^9 r; j! B
_serialPort.Open();8 k1 ^8 l& I" ~( h2 O
}7 ?* d* x5 B) d8 l2 u
catch (Exception ex)
2 y/ w3 }' h1 b0 Q {
) A5 h6 Z Q* B; i; p" z Message.show(ex.Message);
$ o/ a! a( C! J9 p }/ T$ u8 y' s9 T; A3 H
}, U9 U, Q) S3 \# C
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
% X# h. W/ p! H) y% e+ X 按键命名 提示内容
- V) M: s; S( `) o) _! [ button_PLY 播放, C- k4 Q6 Y' ^7 m+ `3 ~/ X4 ~
button_STP 停止
K! b0 O: o& T& \& q# D4 G, P button_FWD 快进
8 ^& n$ ]4 U; H: s2 s button_RWD 快倒- C/ M8 m4 {7 |" K
button_RCE 播放
0 n$ g& s& h$ q, D8 V& q4 u. U4 J button_RTM 清零
( S0 N* q4 A, Z* v K d7 z button_ZLO 定位到零% J W- ~$ I. c5 e1 q) ?7 X
——双击按钮图标增加按钮处理方法(以录音为例)$ u+ E# t7 c4 @" c3 p/ u
private void button_PLY_Click(object sender, RoutedEventArgs e)
6 \; m z/ R2 C& Q D {6 k, M: d t8 D7 C& y; K
try
. U, A! ^' v7 ` {
6 y1 g9 H y9 q- ~9 u- q# R //发送从输入信号直接输出方式控制字符串: ~3 C7 X9 V% m7 H6 k& q$ Q
_serialPort.WriteLine("INP F ");
: q5 u7 X; A/ `% w " u" b. t0 m& ^: k
//休止100ms& ]3 [! b' S$ c0 g, V. t
Thread.Sleep(100);4 P* f6 s+ } p7 @1 {
//发送所有通道Ready的控制字符串3 K4 G" r5 E, Q6 v+ U( g
_serialPort.WriteLine("REA F ");
7 U: R7 f, q6 E4 I% E) @ Thread.Sleep(100);
" g3 u9 j0 t6 z% j/ W! \ //发送开始录音的控制字符串。
( n @8 A5 E1 w& B5 O& |; P2 z1 J _serialPort.WriteLine("REC ");7 F- f& v5 H' o. z0 X& V
}& ^8 [2 K9 M4 l# `; a% H
catch (Exception ex)
' p2 u( N" G: R# u+ U N8 h( A7 f {* k+ o) |$ {; T7 ~
Message.show(ex.Message);7 |8 M0 I# |+ o
}
, C6 L) U. l* u2 P$ W8 Q9 C* K& e }/ r) Y- `" D0 k) F9 ]' T$ Q$ _
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
0 g c5 P5 E" V5 B$ x4 O% ` 按以上方法增加相应按键的处理方法,并发送对应的指令即可。
. Y! `' r- c+ a 播放控制字符串:PLY+空格+回车; h: X0 f. L2 K m( u
停止控制字符串:STP+空格+回车
" h) O! Z5 \/ l! z( r( W 快进控制字符串:FWD+空格+回车. c8 F7 o: D! Y5 D
快倒控制字符串:RWD+空格+回车
" }& ^' j' E4 s7 V9 Y1 x 复位控制字符串:RTM+空格+回车
* c6 K! m/ P5 o3 N2 c 定位到零字符串:LZA+空格+回车
% ~$ J* X0 }2 g& o' V
* O: T% X$ ~1 m6 {' e 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}6 z! v% {+ x, E4 q
7 X( y" {6 O( B( ?7 z 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
/ y4 q' Z" C% ]; |' n+ p. u) }7 { |