第五部分 控制软件编写实例
: a( k0 p2 l$ z; g+ z) J4 A! f/ ^ v7 L: O7 i6 V1 _. N
在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。- q5 w7 x, N5 r5 u1 w: r. U
1、开发环境2 _$ y9 P8 |# Y+ ?7 `6 F0 H2 B4 e' ~
编译软件:Microsoft Visual Studio 20100 ^1 d9 E. P2 g4 V7 G. \" y+ k9 X
基础框架:Microsoft .NetFramework 4.0# J" J5 Z6 H! F7 N/ z
程序框架:Microsoft WPF
0 u+ ^* E- ?: N# q4 o 编程语言:C#
, f! h( n' Z) G; Z 2、实例功能$ m$ c/ N$ c3 N# K# h' i5 G
——播放功能' R* _9 i6 p- c- @) i
——停止功能8 R( h6 B3 k) q/ y: ^
——快速前进功能
( {: Z$ l) j. V. w! m$ U ——快速倒退功能- D- I8 l0 q c0 F p* _
——录音功能
6 R; w( B, V' ` y7 P4 V ——复位功能- Y6 o1 m" x1 N) W' K* r) a
——定位功能& h7 G& s" {8 s6 t
3、实例代码
8 C M& \& A: r) q) Z ——在Visual Studio 2010中新建一个工程文件。
1 L4 }- s; t* U. e8 a9 W ——在工程文件中的窗体代码文件中添加IO端口的引用。
3 q% d' I1 X: g3 d! f. e) P6 ~ using System.IO.Ports;; E( D' o/ O: N9 j. L6 d7 h* u
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
( j3 S3 q1 U9 u! Y- ? static SerialPort _serialPort;! ^1 ~3 p8 l5 x$ a2 @: E- p
——双击窗体增加窗体装入事件处理方法+ B; \. P. r7 g9 v- J* H
private void Window_Loaded(object sender, RoutedEventArgs e)% |4 o E. z, b
{
$ o7 q- P! N, B6 R; {! B! h# H& y) ` }; X- G4 u' F4 z+ { c6 Q
在窗体装入事件处理方法中写入端口初始化的代码。
$ x) E/ Y& e1 s: K private void Window_Loaded(object sender, RoutedEventArgs e)- l+ L. L" ?8 r1 J- C" u- b% H& E+ A
{: Y7 C9 m( c9 f2 X
//创建一个新的串口对象实例( `, g% y6 b b$ A9 \, `5 n
_serialPort = new SerialPort();$ G8 P1 p1 P2 d6 X3 G
//枚举计算机中的串口
! a- O" W$ Q4 p+ R! w string[] ports = SerialPort.GetPortNames();; {8 b3 A1 `! B$ w" o7 Q' }+ `
//如果系统没有串口装置则退出
( N% L$ W; i4 d( c) n5 r if (ports == null)
# N& G- v" b6 z* T+ a: {' l3 x* Z {
p" I4 Y F2 G7 X* Q7 u this.close();
2 y6 s7 n( Q3 b- `8 A }
, `6 Z; Y, C: L* p; ] try5 a- [2 w# f5 D, s$ G$ J5 |
{
$ `; L0 ^$ W& o+ I //使用系统的第一个串行端口7 j/ `# O* k% l" {1 z/ Y3 u
_serialPort.PortName = ports[0];9 t2 Q% u$ ~; b1 Q7 E9 ]2 m
//设置为9600的速率
# u' U& k. }7 O: F _serialPort.BaudRate = 9600;
: m: ^+ ~0 ]8 F% r //设置为无校验
( r( i- X; m+ M+ [# v* ]* w7 P- o+ H _serialPort.Parity = Parity.None;" S1 h: x- l+ t4 w' P- u
; }; Q# h$ ^, [' M
//设置为8位数据
# l6 y1 \& Y& S+ W& r | W _serialPort.DataBits = 8;5 V9 K) O, D8 G5 ?; w
//设置停止位为1
0 ?( b( m, N4 p$ H7 @ _serialPort.StopBits = StopBits.One;* a5 E, s$ I l/ Q
//设置为无握手% s7 k |" _) A
_serialPort.Handshake = Handshake.None;- |; R, u5 S* o9 ?5 \7 N( A
//设置读/写超时值
6 j/ X6 O7 {9 J _serialPort.ReadTimeout = 500;8 z1 O' L+ X5 x" V2 C8 t7 p9 K9 I
_serialPort.WriteTimeout = 500;
; n3 b) ?. k' c. p7 z //打开串行端口
" E! w0 l# g! Y4 h- q; `$ j _serialPort.Open();0 ?* ]$ n/ _, |$ B8 ^
}
# [6 Z) E3 I: X8 T$ f* p catch (Exception ex)2 e9 f& Q, q1 e) g2 }
{ u- }; V/ a/ h- }/ H
Message.show(ex.Message);
0 ~6 H8 }. F) J) f }
9 c- e4 E. y4 G4 O9 e% y6 l }
/ Z3 J& C8 j6 R, f# j ? ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
- e _5 ]5 U; s. v4 _ 按键命名 提示内容
5 J4 N' s3 d5 U1 _( }' P% y( o3 C button_PLY 播放; v% x/ ?9 C$ g( {
button_STP 停止
) S& M9 ^( x$ E button_FWD 快进
. n1 J1 X! c2 ~" ~3 ?+ n button_RWD 快倒" T) D' e- J& J- V2 I' j# _
button_RCE 播放" W9 G- t- a8 u7 D/ `. r
button_RTM 清零
3 I% @0 E$ f- J button_ZLO 定位到零8 i N. y, S9 ]' `
——双击按钮图标增加按钮处理方法(以录音为例)% E1 V+ o) _* B$ G7 y
private void button_PLY_Click(object sender, RoutedEventArgs e)# i: y. A2 E$ L0 G) ?
{7 g7 I$ g- e1 {$ J
try
1 j5 @+ Q5 ^7 B5 A; `+ w {1 j1 D* _0 w2 ^
//发送从输入信号直接输出方式控制字符串/ n/ y; q" V+ @$ E( J/ m
_serialPort.WriteLine("INP F ");
: C) b; W4 @# M 3 ?5 ]3 F( F% ]6 _; g
//休止100ms0 L: C- o6 ^& @. i- }% F1 L/ v
Thread.Sleep(100);& j4 P0 N$ D5 r! i
//发送所有通道Ready的控制字符串6 {) |7 O" R0 [9 W1 u
_serialPort.WriteLine("REA F ");
+ P: K5 Z2 \3 C& j$ _$ a Thread.Sleep(100);
5 y; ^' g: i6 p% h* X //发送开始录音的控制字符串。
5 x [; l, r! Z0 N; o _serialPort.WriteLine("REC ");
' i7 p R$ e. ~& R! h }
1 |: d( J) n) F) m/ l" a7 I0 s catch (Exception ex)9 h5 j# |1 z3 I: Q5 O6 u4 w. ^$ A
{
0 X, x* J* M- D! r Message.show(ex.Message);
+ G, l% P* G" W7 F3 v }# R0 X3 f/ f/ v) V) H+ [
}
5 E8 ^4 r% I( F* z5 C" L1 w2 ~- ~ 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
5 I2 ~7 P$ |# y I3 S# H 按以上方法增加相应按键的处理方法,并发送对应的指令即可。1 @" D+ k% O6 A7 [: k
播放控制字符串:PLY+空格+回车
- Y& z/ `& ?/ G) O1 v+ L# f. U. t 停止控制字符串:STP+空格+回车) Z. Y: H$ r# p& i5 s
快进控制字符串:FWD+空格+回车
- ]$ }9 a0 j; E4 B 快倒控制字符串:RWD+空格+回车/ b# x" l" T* h; ~8 `$ N
复位控制字符串:RTM+空格+回车# T) H/ p) I( K. P6 K: @% I _
定位到零字符串:LZA+空格+回车1 N* z1 L. d% ~- p
# ?$ y3 u+ |9 H4 }9 a 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}. A# _- w& Z K# c
; a Y9 j, v l* Z. ]
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
0 } |8 I8 Q# O/ ?4 l6 R+ W |