第五部分 控制软件编写实例
w& r2 S* Y f% s! [6 F/ O3 Y9 I* K. P0 N/ G& x' |8 Y
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
8 ]% p1 X8 Q8 |5 Y1 w2 N 1、开发环境
6 N$ U4 O3 {8 U/ m' S; J 编译软件:Microsoft Visual Studio 20109 I5 v% n, t# s: B/ m: U7 {' u
基础框架:Microsoft .NetFramework 4.0
8 I; ?0 G v0 @( \# @) _2 H 程序框架:Microsoft WPF! d5 ^" V2 k1 K" n! \ y8 S
编程语言:C#0 P7 c4 | m+ P( P! o, B; Y
2、实例功能
$ l9 u, G8 T; Z/ z ——播放功能
1 s# |$ U' ~( C& E0 {2 H ——停止功能
+ U% r( O) H9 W5 q) q ——快速前进功能
, A! y. @7 v' B* `4 i3 w: r ——快速倒退功能
+ F. G4 x2 R6 }3 h ——录音功能
! |/ U% b. h9 X% L' H ——复位功能" {& S2 I; Y& D5 m e
——定位功能
/ I+ ~6 Q5 p c+ A% _: w% w 3、实例代码8 @8 q6 H6 J" i
——在Visual Studio 2010中新建一个工程文件。
# Y; _2 ?6 l9 N8 R9 _: a5 v$ ]/ ?7 Y ——在工程文件中的窗体代码文件中添加IO端口的引用。
0 @. T9 N3 P) V, w2 f using System.IO.Ports;
* k: \! J0 x$ ~* h9 f ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
- I& }2 [- H9 J4 r* M0 }6 _ static SerialPort _serialPort;
5 _2 [; P% T6 b) n& @ ——双击窗体增加窗体装入事件处理方法- e. y) s* \0 j7 K8 j/ ~5 E
private void Window_Loaded(object sender, RoutedEventArgs e)
/ u& A& w1 k3 M& G8 r9 ~* q1 E {3 W+ q; x: K6 ]$ ?0 r, B
}
! E3 ?1 Z4 ^5 B8 u# k 在窗体装入事件处理方法中写入端口初始化的代码。8 ^; I8 f5 Z1 t0 L( ~( k# Z3 Z$ P
private void Window_Loaded(object sender, RoutedEventArgs e)
# |% F% H, R' n4 f. N+ X" ` {
p. ?+ v9 a9 m# |9 @ //创建一个新的串口对象实例
$ j; v- `! F& {# E; D o: a _serialPort = new SerialPort();$ N1 @/ H/ j! O5 ?
//枚举计算机中的串口
6 R; h& J' _- I) k4 L0 r string[] ports = SerialPort.GetPortNames();/ p2 a, ]4 h! b8 c0 `; n, [8 A7 ?
//如果系统没有串口装置则退出
0 N9 T. I `4 l! Z3 k: r0 o if (ports == null)
# o6 J% J. k5 z% g" N7 m* W {
3 W$ ^( f7 Y' ^& }0 q this.close();: {, o* _% o2 e5 i4 ^# G% k
}
5 ~3 P$ f7 p! \0 W! ^ try* c- Z, A1 b, X/ o
{2 s2 c4 Y. R% K! l' U8 J" a
//使用系统的第一个串行端口
. ~3 [8 Y, |3 r! R6 `, P2 o9 F. q _serialPort.PortName = ports[0];( N2 _7 i1 H; i: f
//设置为9600的速率
9 I: T# [& _: @9 T) T$ I _serialPort.BaudRate = 9600;8 Z5 H$ ~ J: ?/ z! u* ?
//设置为无校验: f0 _! j9 m1 }" ?. F$ D2 |/ O
_serialPort.Parity = Parity.None;2 [! ~) R4 {( p# d0 J
# c5 X6 `- t G- [ [( h& k //设置为8位数据
8 a1 c" ]) ^5 t9 d _serialPort.DataBits = 8;
* `+ i! L$ w1 r* H$ W. g7 d3 N //设置停止位为1
5 {& t* s" @9 v2 f) {8 p1 ^ _serialPort.StopBits = StopBits.One;& a; b" E; D( ]) R; g$ {
//设置为无握手) G! B+ @. b4 T
_serialPort.Handshake = Handshake.None;, \9 G |# F0 q( L, e5 o" H; W: S
//设置读/写超时值
" W$ `3 m4 t( m1 |+ V! B' C _serialPort.ReadTimeout = 500;
5 D6 c8 y% |& `" g! V _serialPort.WriteTimeout = 500;
7 i6 }0 w/ G, D" X# Y. x6 i //打开串行端口8 @" ~& N+ [# A
_serialPort.Open();
! S2 g/ x0 t7 l! N# e3 U3 ?6 O! @ }4 p3 V A4 x; V' b1 h. w& |# A
catch (Exception ex)
! q8 x1 G7 X. _8 X2 G {
; G @; ]% ^! Y+ [# N& `3 j Message.show(ex.Message);1 g+ H( [# Z- j/ ^
}& B o( @9 e' g, V& v
}2 }5 \4 K# s& A9 \1 z, q, w
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
% J) [0 g) y4 j0 O3 w( \: ? 按键命名 提示内容4 A' e, @3 y" n, r; r! Z. s9 r
button_PLY 播放+ r9 H4 v, U# c7 X) v5 v
button_STP 停止 L/ y" D7 L* ^, I$ D/ J% U- U
button_FWD 快进
( Y4 [, l) f, f- P% U9 w& ~7 W button_RWD 快倒: R i9 I- L* {: F
button_RCE 播放8 w& ~9 F- X/ m1 t
button_RTM 清零
, H) g$ [4 q3 j/ ~% H button_ZLO 定位到零
) T& }9 Q/ b/ ]7 I5 R9 B. N/ z ——双击按钮图标增加按钮处理方法(以录音为例)
2 G3 Z+ b7 w, ?8 w" t2 Z- e private void button_PLY_Click(object sender, RoutedEventArgs e)
+ L) m, G2 L! c( n% ?' t- U$ e {, N A, J$ J! T* b! C& r: R1 |3 E" F
try
" j7 N2 J9 o; h+ l3 j" n; ?( f {6 [5 Q# m( @4 l/ }7 E# d, c- O
//发送从输入信号直接输出方式控制字符串! I ]" V/ b" P7 Y, \
_serialPort.WriteLine("INP F ");
4 R3 E0 d9 o: |( ? H1 Q+ Z
' Z( {; g' V# y5 d; D- _% F8 Y //休止100ms
% P J3 U2 O) H! l: C Thread.Sleep(100);
; B- \$ C: P- L m2 p( a$ z1 S //发送所有通道Ready的控制字符串
) n# J) B! {$ o( J* r# u _serialPort.WriteLine("REA F ");
: \" r: k1 s" ? M Thread.Sleep(100);
' n6 m- [/ P7 [5 _ //发送开始录音的控制字符串。! b3 [/ r+ e' u5 f6 w7 r
_serialPort.WriteLine("REC ");. {/ d, D0 U, p& [
}/ X7 f' V1 ]+ R& M' J/ v2 W
catch (Exception ex)
5 a% e& u- O* |3 S9 D. g0 P {
( @/ {* o/ u* u; w" u- L Message.show(ex.Message);
9 v* E/ W% y$ Y# W+ ^ }
$ }- U* _( |/ T5 Y3 g8 u }
1 o$ ~; o! ?/ F" `2 K 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。; X9 Q2 p6 T7 [) r+ s/ v; ?
按以上方法增加相应按键的处理方法,并发送对应的指令即可。' z( u4 k1 \+ `3 _: v
播放控制字符串:PLY+空格+回车8 p7 k$ f, {7 b. @7 k4 s% m. a
停止控制字符串:STP+空格+回车$ N0 L2 c( q1 f, s# k& {% w+ M
快进控制字符串:FWD+空格+回车! l# j, s1 V8 L7 ^' z
快倒控制字符串:RWD+空格+回车7 e4 s+ g& q, e1 w( `3 M
复位控制字符串:RTM+空格+回车5 X Z: U# [2 T; ^' Y
定位到零字符串:LZA+空格+回车4 m0 z: a2 f2 n0 `; ?: g
2 |. `5 q q8 i; z8 O7 \: s
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}! @) f9 v6 H/ k4 X! Q3 A4 n
- z+ u' e+ l1 \7 C( l1 J 有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。) ?/ l, h/ _) P S
|