第五部分 控制软件编写实例3 j& z3 h! q' ^8 F5 F/ I6 W
3 n9 R5 w! ?3 { 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。: \ t' W, t8 h A
1、开发环境
0 v* e; S# y3 }, t5 h" k 编译软件:Microsoft Visual Studio 2010, V, n9 X# b9 ?% k4 A
基础框架:Microsoft .NetFramework 4.0
7 c$ _* k, p( n- |2 ^! n9 { 程序框架:Microsoft WPF
- G: Q# S8 w S 编程语言:C#
2 T9 a8 B- a. t2 i, f$ X* x 2、实例功能( Y+ R" E% E2 w; ~2 S3 \6 c
——播放功能
# E5 Q; A" M' R( N: H+ A ——停止功能
4 y( J" ?3 p# f/ s2 D9 S/ |1 V ——快速前进功能
' s! K& F2 N; ? ——快速倒退功能
' Z: L/ @9 u! P! H9 O6 y4 M ——录音功能1 S1 j3 z# ]% T# k
——复位功能
4 ] M3 |. k9 y* d8 \ ——定位功能& {7 [8 f) s7 [
3、实例代码2 [+ P3 m# A5 v! j
——在Visual Studio 2010中新建一个工程文件。; m7 U7 z- Q1 A! A N; V
——在工程文件中的窗体代码文件中添加IO端口的引用。$ U# E; d. V# Q4 E2 C' Z! x* c
using System.IO.Ports;. l" l! G+ H+ S* p# _. S, l& V: \
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。( T2 s! Z9 K. x
static SerialPort _serialPort;
0 `+ d0 a+ T! Y2 W& o/ S ——双击窗体增加窗体装入事件处理方法
9 G( Z/ X2 d. i7 }0 b private void Window_Loaded(object sender, RoutedEventArgs e)
, D' }4 t' C D( q z& @ m {/ N! O5 u, o" ^& A
}
+ O& F- F/ @; v 在窗体装入事件处理方法中写入端口初始化的代码。
$ d1 `6 X9 A/ b, L private void Window_Loaded(object sender, RoutedEventArgs e)
& Y, C, n b# Z4 J+ g% q. x {
1 x6 F, {0 r5 ~2 c7 d2 M m //创建一个新的串口对象实例
% {( ?# X u, F% I1 U _serialPort = new SerialPort();
& o+ U6 c9 t+ i3 k' o* Q9 g //枚举计算机中的串口
+ \+ Z2 T+ J) S! I+ Q- N1 Z string[] ports = SerialPort.GetPortNames();
I) x! f: i1 ~0 N5 B- w8 N //如果系统没有串口装置则退出& |5 s, U8 I8 P1 o; c) o
if (ports == null)$ p; n7 O2 x- H1 e) Y9 X" K
{
8 E) g b% m. I6 E' N! Z7 Q this.close();
: Z @3 P% ^+ _) j+ |! L }8 Z6 B$ M: A; V% O( s
try7 Y( L% F5 W- ]' [3 e5 M
{' u5 N. N4 B1 t1 V1 F, w. p/ c
//使用系统的第一个串行端口
6 r# B% U% ]8 y) q _serialPort.PortName = ports[0];5 Z0 q" `4 a# G: Q; \4 H; R
//设置为9600的速率
" E. e) C; |/ I4 m4 p. l4 ~& N _serialPort.BaudRate = 9600;; H% y; s+ V$ V+ T
//设置为无校验
8 E$ j5 x7 {5 K& G7 M; A _serialPort.Parity = Parity.None;8 k3 l0 o, ]+ m9 z+ t
# V# i/ V1 P4 ~( ^' p2 ]
//设置为8位数据
L/ C' u: t Q( ^& x _serialPort.DataBits = 8;
) f* j: F+ Y9 i //设置停止位为13 x- l2 C# |% z& V- ]- c
_serialPort.StopBits = StopBits.One;' ]: \ j$ P+ i6 _
//设置为无握手8 l- O/ M7 Y/ A S
_serialPort.Handshake = Handshake.None;$ L O1 {) q) z5 V% w5 J" e! \' C
//设置读/写超时值
0 n8 h, F2 m0 h( I" k _serialPort.ReadTimeout = 500;
* @# x- n" \, h5 u* P _serialPort.WriteTimeout = 500;9 n4 w) ^ a% y2 |; D& z
//打开串行端口5 g: `! S% s( E1 n+ [: p
_serialPort.Open();
8 l8 o7 R5 R; g( D( L }
# v, u4 ^1 S7 b0 J+ [2 x) ^2 X catch (Exception ex)
6 k J1 s& x5 k0 q {6 N w0 w) h0 N9 b3 x7 P
Message.show(ex.Message);0 e7 P! e- |$ C
}
! w' L$ p. J8 N# Q }- N4 S1 O" d$ u6 [2 q2 _
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。2 x- D- W( D+ `) X6 V
按键命名 提示内容
( Z5 U' v( o% l& ^7 T# J button_PLY 播放
( I' [/ g8 E6 g! J' @ button_STP 停止* I' j9 h% Q P7 V8 W
button_FWD 快进
7 h, s" x. \8 ] button_RWD 快倒
|7 A, Z6 [+ \, f. O button_RCE 播放
2 K% Y) e" M: |; y/ f" T button_RTM 清零
) j; m1 @8 y4 Q button_ZLO 定位到零
$ I4 x* ~' M4 ^, i. y ——双击按钮图标增加按钮处理方法(以录音为例)
) _$ U4 h% X2 X3 p3 w! J9 M5 m; u3 k4 q private void button_PLY_Click(object sender, RoutedEventArgs e)
. `1 [0 B( E0 i" g* a7 @& @ {2 G2 A. V5 [! W4 G' _2 o! a
try
, o' I" A$ t. T, L, p1 p# n {
1 Z, A. m6 r3 c" \ //发送从输入信号直接输出方式控制字符串
* h5 s& X' y. `5 }0 P _serialPort.WriteLine("INP F ");
' A9 [; p V6 M" A# m2 } 6 r# E; q3 N% \: F
//休止100ms
, p; }6 z* E+ e' \; N: J Thread.Sleep(100);) C4 G( t6 q3 Q( F
//发送所有通道Ready的控制字符串' z7 s; o$ F( H; b* `& H
_serialPort.WriteLine("REA F "); * ^% p/ F& r3 M @8 W* T& T
Thread.Sleep(100);
' U( K( e6 `7 l# A4 g //发送开始录音的控制字符串。
5 q5 R/ Q1 c3 f: {7 e' v! g7 g _serialPort.WriteLine("REC ");& T& S6 k8 p* \1 V* k
}
% A+ q! n" h2 z6 d catch (Exception ex)
9 R1 \ G% E' m! v0 F' m, D {
" i3 d3 V7 R/ F1 m4 I( h0 E Message.show(ex.Message);. C. r* |) u2 R7 C
}2 N# H0 p: o3 c( ~5 C: L
}2 j+ U# v L/ }, ?
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。, N; c$ u! I1 w3 m; z i
按以上方法增加相应按键的处理方法,并发送对应的指令即可。
9 |5 [, z( b1 h) R, x$ Y4 Y) ? 播放控制字符串:PLY+空格+回车
8 L4 G3 o4 V4 O) u# u5 R, S 停止控制字符串:STP+空格+回车
* O- ?! c9 \4 R7 @# v: | 快进控制字符串:FWD+空格+回车
: z& B/ v# v$ |; I$ J# j5 M+ p 快倒控制字符串:RWD+空格+回车
% B/ W; k' V) B- q, D+ i 复位控制字符串:RTM+空格+回车
% M- K* ? x( ~0 W& q) { 定位到零字符串:LZA+空格+回车9 H6 S/ Z I& a2 u* L' \
# I5 d6 [; B- E( h
写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}. ]8 B" K4 E m0 p5 @5 e
9 B1 s! R5 V0 V' G8 g8 e+ z# S1 G
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
$ k" F' v- E* a8 m7 X; F |