第五部分 控制软件编写实例
" R, I( d) ]$ s
. J6 L" n n: M 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。8 S c% Y, i" C- a: I2 t
1、开发环境- E* Q% l7 w' Y9 b+ e3 q
编译软件:Microsoft Visual Studio 2010$ F3 z6 G: `5 L7 p! T- W J% O! z4 t
基础框架:Microsoft .NetFramework 4.0
0 u4 n2 B; e% |& Q+ r 程序框架:Microsoft WPF
6 P' e& t; k) |, P: H 编程语言:C#, |1 |% s$ M6 L L8 N6 c# e$ b, G# \
2、实例功能
" v3 r. ~! |1 i# x8 W6 ^ ——播放功能+ l6 N1 {4 R. d/ S: b" z2 {
——停止功能- s% i' n4 i! H
——快速前进功能5 i+ p1 ]: e+ G4 ~4 H1 E' T
——快速倒退功能
A# O, ^& Q$ x! t5 E& w& K ——录音功能9 `$ p' Q0 v6 m9 Z l
——复位功能
- E% n' o1 t& I. G4 E ——定位功能
. Y: Y" {1 i* t I. p% y 3、实例代码
8 B5 m7 ~, I& G4 {* I( h! e/ V ——在Visual Studio 2010中新建一个工程文件。
, D7 [" n ~4 a; j* c$ } ——在工程文件中的窗体代码文件中添加IO端口的引用。1 H& M. J U# H1 z
using System.IO.Ports; C+ }0 @/ d; c6 S
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
$ N7 \- c8 Z! Z& i7 }+ ~! [ static SerialPort _serialPort;
+ ^: R0 W# V- J ——双击窗体增加窗体装入事件处理方法
) r. ]6 W4 H% r1 B. H private void Window_Loaded(object sender, RoutedEventArgs e)
. U4 Z# ?1 f$ z/ M' H {8 D4 e0 v% S d G) l& P0 ?
}: e5 X2 P+ Z \( K0 f9 p6 f9 H
在窗体装入事件处理方法中写入端口初始化的代码。8 x6 m2 r% O- m3 l
private void Window_Loaded(object sender, RoutedEventArgs e)
/ a# K$ n5 ]$ F {
1 q3 N" P) [+ a" S* S# H" T //创建一个新的串口对象实例+ t" k$ Q* f2 w% W" O; c
_serialPort = new SerialPort();
]& W, z5 i+ V- ^ //枚举计算机中的串口5 `( ^7 }% H+ }$ W, g5 P
string[] ports = SerialPort.GetPortNames();: z9 e' f$ W; K; [( `9 z$ B: C
//如果系统没有串口装置则退出9 i& ?* q4 G p9 {/ w; G
if (ports == null)
4 o _( B1 B* ]9 p$ ]$ J {
6 Q' K( y+ V* w5 o( H. { M0 V this.close();
4 N- h. J1 ^) b }
5 V. w4 g& s3 d1 X. \1 p+ P try, S! j. |# s* n7 I1 ~0 z; A) B
{
: S) ^" U* q. e# J5 D, H1 r& Z/ U //使用系统的第一个串行端口
$ ?! q! S# E8 L/ Y9 M2 e7 G0 s& H5 ~ _serialPort.PortName = ports[0];* ^0 t( ]# R" ?2 _* h9 g
//设置为9600的速率$ v/ N u7 ]& }. n9 A
_serialPort.BaudRate = 9600; w# ]2 [1 ]) H1 [
//设置为无校验
! F' C+ I% T& d, p- e9 j) z1 R _serialPort.Parity = Parity.None;
, |5 k/ _, X$ k8 e" V* E
; m( B5 W1 F* W //设置为8位数据* o! m# A9 Q# O% J
_serialPort.DataBits = 8;* Y2 `* `8 ~8 ?9 x
//设置停止位为15 z6 C( B5 P, @3 u6 ^! r7 i% H
_serialPort.StopBits = StopBits.One;
6 w; ?7 h0 U+ {8 G5 f- r' u$ K //设置为无握手
) t: W& U1 I9 ?7 ^7 f& N( w6 X _serialPort.Handshake = Handshake.None;% }$ R$ o0 l1 ^; K9 V8 i9 c
//设置读/写超时值7 }! T: z* l" F; Q9 W* m
_serialPort.ReadTimeout = 500;6 o. `: v) O5 T" v; B/ F6 l
_serialPort.WriteTimeout = 500;2 F6 ^5 W7 R4 j- j
//打开串行端口& \- W# Q9 |! A6 I5 ^& [8 J
_serialPort.Open();/ X- Q$ Z9 Z9 G" B* n, Y) R
}/ ?# K0 c1 E( b- F, v5 z- x
catch (Exception ex)6 R+ [+ O+ c' Z6 w3 F
{
6 d7 f- x3 v w" ^9 Y0 u; l* | Message.show(ex.Message);/ t3 L. q" N% V, [, x. j( \9 G
}8 o; n. U. B J% Z3 w" k
}5 ?' A' A& [: f* X, L; `
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。) g4 s, r3 W% {6 y# j
按键命名 提示内容. }; K- _/ U; h& m
button_PLY 播放
: N6 L- D. j8 f/ Q button_STP 停止! p4 H7 v0 F6 G8 m: ]0 X& j$ f
button_FWD 快进
3 v: v$ C( r4 `# i) ^ button_RWD 快倒
9 [2 o% H x; ], y! C+ N8 Q button_RCE 播放% ~: H6 X5 q/ [
button_RTM 清零) [$ d) K' u# }2 q2 q# `9 \
button_ZLO 定位到零
) j F6 c; t/ L$ z. u ——双击按钮图标增加按钮处理方法(以录音为例)
8 C/ {6 L: n0 C, b0 Y) R- }6 @ private void button_PLY_Click(object sender, RoutedEventArgs e)
; a# Q. D1 [3 Z4 R* o {
7 Y& a3 l& r! {+ {" A/ k try
- ~0 Q0 M [7 A4 y$ u# ` {
6 b& {* ^+ n _$ \! t //发送从输入信号直接输出方式控制字符串4 w. B. p; a) H
_serialPort.WriteLine("INP F ");
4 Z" o0 C' x" K; r7 p# ` " p" C o" H4 w0 [7 h
//休止100ms
9 m" h3 R9 `( ]7 K- h9 V; T Thread.Sleep(100);
# s/ D% s7 C/ e [ //发送所有通道Ready的控制字符串+ }/ K( r: \4 h1 S
_serialPort.WriteLine("REA F "); . N- v/ P$ `& I
Thread.Sleep(100);
& X. {5 E o) {7 `8 I //发送开始录音的控制字符串。0 J, M2 u/ [- k5 {1 S* x
_serialPort.WriteLine("REC ");! u" K" V; e/ y. r4 u
}+ _% ?3 i7 ^) ^ R
catch (Exception ex) V$ U( D' N" S3 f4 ^" E) L
{5 G3 [8 X Q# Y8 H- E S2 a& {
Message.show(ex.Message);5 h7 J$ p& F2 c% Q' ~+ T
}
% ` Z2 k' H- c( }+ N/ [6 R7 A9 ] }- X8 N! F- e+ m' u6 ?
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
2 e. r( o) N' {, G# A 按以上方法增加相应按键的处理方法,并发送对应的指令即可。, R, p' I6 L0 I1 G# d$ Q& X
播放控制字符串:PLY+空格+回车
; W) b" l, H( A, Q0 S5 I8 m4 b1 o1 P 停止控制字符串:STP+空格+回车
+ m3 W4 ~- Y; s) ]6 W* J# X$ k2 K 快进控制字符串:FWD+空格+回车1 P. I: n, A1 D7 ]3 D( h4 w3 `2 i
快倒控制字符串:RWD+空格+回车, C( M4 E9 }2 Q
复位控制字符串:RTM+空格+回车
$ K4 b+ x% ~; z6 o2 a( Y 定位到零字符串:LZA+空格+回车
0 J- l, r& C6 D3 v+ X
* ?3 g. n7 c- g9 e$ ` 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
" X. Q5 V* _2 ^7 G k3 t; Z( S$ L
9 A' z+ s; U0 ~ Y* C' q# L6 L 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
+ p2 Q# b/ i. P6 W |