第五部分 控制软件编写实例5 N( c" ~! G [. D* K) O
# ^$ c3 C5 T& j) c9 X k s0 H) f 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。& L* N1 b9 P/ ^. L8 l
1、开发环境
0 q, K3 ?. s, o Y6 P, w 编译软件:Microsoft Visual Studio 2010
0 p5 }- w0 u4 f! l& E. D- ^ 基础框架:Microsoft .NetFramework 4.0+ W% ^+ |) @' E
程序框架:Microsoft WPF
' j# U; o3 Z, g5 v 编程语言:C#
2 ]: [4 f4 {" q% b4 o 2、实例功能$ v- j( K; l8 W$ T) H9 J
——播放功能: A: y7 h/ ~1 s [ f- ^
——停止功能
: f' {- ^' j. i Q ——快速前进功能
; N5 u5 A4 j l ——快速倒退功能
- L) P, Q% a1 c- t! N ——录音功能
) b( @" e- E% e N ——复位功能
\; t% C' W: T9 V1 s% O ——定位功能
; ^) Y- F! z) C$ A# D 3、实例代码 O U) ^& o3 F* x% t( b
——在Visual Studio 2010中新建一个工程文件。3 i' G2 c, L: ~
——在工程文件中的窗体代码文件中添加IO端口的引用。
( h8 q8 m, G$ N using System.IO.Ports;
5 l) a% J8 u, b+ G5 ]" O: D8 l ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。" ]1 B5 q% R9 Z$ K
static SerialPort _serialPort;+ F# t+ [8 `) j
——双击窗体增加窗体装入事件处理方法! }" v7 }/ ^- X; b/ k+ i+ ^
private void Window_Loaded(object sender, RoutedEventArgs e)8 S1 P& ?, t. i [
{7 k' C: X7 a$ g2 s
}
# R6 e" g0 I& l. G" r 在窗体装入事件处理方法中写入端口初始化的代码。& p/ g0 }9 c( p" I
private void Window_Loaded(object sender, RoutedEventArgs e)5 V; \' m) U: E
{
1 R3 p# C6 P. A, E //创建一个新的串口对象实例$ a6 S% |6 N `+ c( \* c
_serialPort = new SerialPort();
3 n" o# h* p- s //枚举计算机中的串口
5 C& v/ \1 z2 b( C, \# Q& E% Y: f9 O string[] ports = SerialPort.GetPortNames();
5 ]+ l2 q& g$ {* @+ S' ^0 P //如果系统没有串口装置则退出' g. A+ j- W( I* Y
if (ports == null)
' J: R( V! E2 j: V/ x/ p5 v( b" { {
3 P; { z0 v! E! a8 j. [; V5 z ?& ~ this.close();
/ ?6 W: u9 r: ~5 } g6 v& ~$ a+ b U }2 g( t p2 d$ x4 o, k
try5 U( `3 n( m0 W0 @
{) {3 Q8 ~# |4 U5 N
//使用系统的第一个串行端口3 e" F/ F( R* C& o/ J' q% }2 G; `
_serialPort.PortName = ports[0];
: U6 q4 ]1 I8 h$ j //设置为9600的速率
' i7 ^. F( J# a0 D0 w& H _serialPort.BaudRate = 9600;8 a y1 k, K( O4 Y/ D2 K6 Z
//设置为无校验' A; Q- B* q, ~" S8 Z
_serialPort.Parity = Parity.None;5 T5 p" v! |1 [3 O
8 M3 b& e2 { @* M7 T3 l //设置为8位数据; O, I( I2 H9 m! X
_serialPort.DataBits = 8;& u1 x4 k" P4 w& @8 P: N7 h0 i
//设置停止位为1
% T# o- Q L; w" x _serialPort.StopBits = StopBits.One;- F8 b- `- s7 B" b
//设置为无握手
! f6 K! u# E9 ~( D3 F$ I! ?! g _serialPort.Handshake = Handshake.None;
# T. y1 `8 _9 [ //设置读/写超时值1 E( D/ |! ?9 d9 n
_serialPort.ReadTimeout = 500;
5 u" d, Y. m; \* l9 @ _serialPort.WriteTimeout = 500;
9 ~. v: e+ Q5 X+ a' @. } //打开串行端口6 {, J0 x7 M1 @
_serialPort.Open();
5 _5 b- o- z! B0 v+ j& d: H: [5 ] }7 \ t" h3 o' T$ Q
catch (Exception ex)
2 Y* P7 I1 |2 V4 ]$ { {
5 \! r% c; k4 U3 M Message.show(ex.Message);
0 o$ B/ B" F1 j9 Q) ?8 D5 ~ }( Z8 w# p. s9 H, Y+ t; }) p
}6 ~4 w# ]$ e' F' L4 I
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
2 G& P6 J4 X: m( \( f; c7 F 按键命名 提示内容; C2 I, O3 o2 y% u# x* [0 W
button_PLY 播放& ?. s1 ?3 N- n+ z. v
button_STP 停止/ e6 S% O/ `" p/ V8 P0 M O! C
button_FWD 快进) N: O5 `4 g& `; N+ W
button_RWD 快倒: L/ Y; W& }- r( m9 @& }
button_RCE 播放0 F+ R6 T6 k5 b* |- B: a/ N# w, e
button_RTM 清零
7 V4 Y% h( P, B; f" z$ f& @, }1 @ button_ZLO 定位到零8 k; z u. s7 z- y0 y" D. m" b* _
——双击按钮图标增加按钮处理方法(以录音为例)
3 I$ Y1 J4 u3 t, D/ \5 u/ Q private void button_PLY_Click(object sender, RoutedEventArgs e)3 N# a/ s6 n* w+ ]
{
- x$ T' K3 w! N& p try
/ O/ `# e4 x$ v& k% J {
& r3 L. ]5 Z: \- ~ //发送从输入信号直接输出方式控制字符串( T0 G. X/ e5 Y+ Q; O. P; w5 [/ J
_serialPort.WriteLine("INP F ");
' y1 L2 d7 A" _" H: N1 Z) o) Z% Q % `% |, h) t' N& a; p% H
//休止100ms; V9 A' O6 h+ f
Thread.Sleep(100);
9 L7 g7 ^$ {7 v9 {& f //发送所有通道Ready的控制字符串
" T9 Q! ~5 a" a _serialPort.WriteLine("REA F "); % V$ k V' `% N- T# _9 N; R! l
Thread.Sleep(100);
( C( h4 T+ f, [* r% ? //发送开始录音的控制字符串。% `' f$ I$ z4 e. u2 ^
_serialPort.WriteLine("REC ");2 Q7 C! z% v1 [3 X
}
3 Q$ ?" z" T: g: n) s, z5 |2 m catch (Exception ex)% `: N$ B U3 x1 N% @, _
{
3 v; D: }, G0 f: l8 d Message.show(ex.Message);. D9 o" L3 |$ c6 x" @
}# |, L) I% d i
}4 p5 d, A, M# w, O. ^5 O& {# A* J
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。, w5 N: i* W5 _* A D
按以上方法增加相应按键的处理方法,并发送对应的指令即可。
* L0 g+ Q+ h9 p3 m7 g5 C 播放控制字符串:PLY+空格+回车
5 l I( g0 ~) i" e$ X 停止控制字符串:STP+空格+回车
1 i( c7 ?2 b1 J% f5 x 快进控制字符串:FWD+空格+回车
+ W/ [! V" y) T$ ^6 g) e 快倒控制字符串:RWD+空格+回车
, B2 X& V8 `; t 复位控制字符串:RTM+空格+回车2 i& Z H J4 ^5 i" w% F
定位到零字符串:LZA+空格+回车* ]; h# p' m) ]; s# h6 I0 _
O& t8 [9 M, F2 f9 P 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}2 f" W4 M0 a P+ C; g
/ ~8 ?) u) O& @9 v W6 | y0 q
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
9 x. ^ |, d% D: k' M, N! [ |