第五部分 控制软件编写实例
" ^' T- [2 s! }5 K \2 P8 V
. Q! w" o) M# b% _0 V% v 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
, I3 ], Q# |: O/ B- B 1、开发环境' G: [# r: T1 c0 e8 e
编译软件:Microsoft Visual Studio 2010( Y F# n! \/ f( a* G3 N; z% A
基础框架:Microsoft .NetFramework 4.0
) k! x& q; s" q" e6 A: i8 ~+ S0 R 程序框架:Microsoft WPF" j! O- R2 f, V
编程语言:C#
: J7 F) K0 o8 P- b: G% [4 t 2、实例功能1 z' M" h$ t4 y8 b
——播放功能
: k1 R! e3 D( a/ H5 N' y+ o8 L ——停止功能1 L0 U. P' r0 r ?
——快速前进功能
" I* G+ |1 L9 V8 h3 Q t% y ——快速倒退功能
4 w- H' J, j% V7 T* {2 z8 a ——录音功能
7 M+ X8 N3 x2 J ——复位功能7 ~" f! S0 ~9 Q$ \! y5 G
——定位功能1 q6 Y. a% E2 ^0 X9 i$ x
3、实例代码+ v4 t$ o8 I: Y
——在Visual Studio 2010中新建一个工程文件。. d7 a+ C. l9 @ R) y7 I: P. {! U
——在工程文件中的窗体代码文件中添加IO端口的引用。6 c3 U& |# D- e0 K$ r; ?
using System.IO.Ports;
6 @0 p# E7 A9 n- f$ D% w8 x1 ~5 k ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
- t# C* U! f. C' u) @3 t6 D u4 R static SerialPort _serialPort;, ] k. h2 M" b3 u2 Y
——双击窗体增加窗体装入事件处理方法2 ~" u4 l6 `! k* Z
private void Window_Loaded(object sender, RoutedEventArgs e)
* K2 N+ t5 S1 l9 F, r3 O2 t3 h {
0 U( l& u( L3 e& ~' H ?; n }
G1 h0 j) g2 Q( A( V- ` 在窗体装入事件处理方法中写入端口初始化的代码。
. S, }; ]3 X) a7 W! `1 B9 T private void Window_Loaded(object sender, RoutedEventArgs e)# M) h6 W. E; o$ f2 K o& X
{& @, [) ^+ V* N2 M% z5 I
//创建一个新的串口对象实例
' C2 B. G, t2 O3 L6 _ _serialPort = new SerialPort();. e# Z+ b' {. r
//枚举计算机中的串口
4 C+ m3 `1 J8 _6 V7 W% S string[] ports = SerialPort.GetPortNames();
' c3 U9 j% A6 x //如果系统没有串口装置则退出
, n( B: Z9 j x% G. |8 H: X if (ports == null)
. y; Z" v9 X: m7 @+ @& M {
$ ?: ]& N" `3 W. M this.close();
3 a x0 W" ?/ v- _" y# w" R1 m% L }
$ Q8 B! x7 G; n try* p7 B8 ], D5 Z/ y n' k
{
1 E% U2 i1 B' A //使用系统的第一个串行端口) k, o- F7 k+ i
_serialPort.PortName = ports[0];% k, V- E' Z' K# q+ B" q. T' }
//设置为9600的速率( q. K& g+ [) C2 U
_serialPort.BaudRate = 9600;
- \- |: v% \( A" g1 U8 l3 u+ i //设置为无校验
& t* q, N' \- W' i/ m( q4 T _serialPort.Parity = Parity.None;: G2 w% ^2 r+ W. ]& @% m/ z* z" D/ x
* g; w" K& O: P7 | //设置为8位数据( w7 C. ^6 X$ E0 j$ l, I5 G
_serialPort.DataBits = 8;( j# D9 n2 S. y8 @" ?) X) X& W4 f
//设置停止位为1
2 }* |: g6 K+ H; u- t _serialPort.StopBits = StopBits.One;3 w T6 t( u7 T3 ~' B4 F
//设置为无握手5 R, }2 X8 d+ O5 [8 W4 M' S9 u
_serialPort.Handshake = Handshake.None;- B- K4 p4 Q$ N$ z+ _/ S8 n- H
//设置读/写超时值
( \# f3 O3 f5 c% P _serialPort.ReadTimeout = 500;3 ` b+ A0 `0 g3 f
_serialPort.WriteTimeout = 500;! B/ M& e+ D+ M; L, d* P
//打开串行端口- |- ~4 }0 \7 p# p% {# [
_serialPort.Open();
/ ~9 K+ ^+ w9 ] }
/ W A4 H0 y. m& a6 R catch (Exception ex)1 d* J2 z4 W) {
{8 a# T. a% R9 H P+ R
Message.show(ex.Message);# m+ N/ i }+ \
}5 a) j1 H4 O, ~+ E" w( ~
}
U- C! h! I: }2 {4 u ——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
0 U3 ]! Z& q4 }" _# C. t' V4 b 按键命名 提示内容2 P9 j$ v# {! c% D( G0 [/ b
button_PLY 播放9 @3 v8 {5 I/ o5 V+ Y+ i
button_STP 停止& A# Y: M+ G1 @( [" E' m5 x
button_FWD 快进
. ~% l; ^' B; X& ]$ `7 y9 ? button_RWD 快倒
9 [. M4 t+ q3 v4 S- ^, L button_RCE 播放
% G- e% g* C$ S: y- s button_RTM 清零
' O* v) Y( z6 h. P, u button_ZLO 定位到零
* l$ z. C2 g' W* ~3 H ——双击按钮图标增加按钮处理方法(以录音为例)
( v" L* t: d% _9 V. p/ `; X" V private void button_PLY_Click(object sender, RoutedEventArgs e)
0 l0 j3 e3 t6 y3 i% u {2 a- O9 l! d# S- u
try8 u% }1 C& k! w. r+ n# {& L+ Z, q
{* X' Z3 Z* m) z% ~# I' A9 }
//发送从输入信号直接输出方式控制字符串' B* J, o' o% {
_serialPort.WriteLine("INP F ");
# u) X# \8 E; J. ~ U, F+ p + d* ?6 c# U& ?% H0 t& G: U+ Q8 }
//休止100ms O, b( `: z$ B0 |9 N' n
Thread.Sleep(100);
& m/ q3 g. ~/ J4 I //发送所有通道Ready的控制字符串! W. f9 G6 B9 ~
_serialPort.WriteLine("REA F ");
; C8 e4 h, @0 i9 k Thread.Sleep(100);
. Q- {- s- ]2 Q. E: P; B; X //发送开始录音的控制字符串。
( D! z. {3 v& q1 V" y1 ?) ?2 k _serialPort.WriteLine("REC ");
* d# y5 b4 N0 X0 E+ }" v }- d, A$ m- ~7 K. C) k9 j
catch (Exception ex)
E0 c" {: t" L {
8 Z7 v1 [8 O& v Message.show(ex.Message);
$ R. X0 [& D5 T5 M }
6 x* U# t C9 t4 h! A }
) n$ n% I3 ]6 C 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。
! [3 s. g# g: q 按以上方法增加相应按键的处理方法,并发送对应的指令即可。6 s4 |4 V# f# I/ q
播放控制字符串:PLY+空格+回车4 U+ Q4 q5 K- y4 q% z0 E# w
停止控制字符串:STP+空格+回车& Y! L7 g6 x$ Z+ V$ R
快进控制字符串:FWD+空格+回车
, e$ l: k- W7 I6 F/ N" u 快倒控制字符串:RWD+空格+回车6 s4 E$ d' ^, f1 P5 z. ~3 i
复位控制字符串:RTM+空格+回车
) X1 y/ g" _. H# L; ~ 定位到零字符串:LZA+空格+回车
! G. c) f- f Y$ S& n+ z% |
& A$ T& w! N! h, R- }5 W 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}; |+ D R& s+ g- M% a
4 f s) X5 I& W5 z* @# Z1 q
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。' h: x. N8 H) ]8 D) P0 v1 a5 V& _
|