第五部分 控制软件编写实例
& d, K2 l2 Y1 n% `6 d
8 w0 ^* C1 f/ Q6 L# l9 E/ M8 d 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。
6 x- t5 L% l7 h3 a' X" K1 f 1、开发环境* X& x1 A" I5 g
编译软件:Microsoft Visual Studio 20100 N! Z Z1 X3 S% \' ]; d+ m
基础框架:Microsoft .NetFramework 4.0* u4 Z2 P5 t( D6 O+ J
程序框架:Microsoft WPF
0 X' c( F: z) w0 F/ {" G" C$ S3 N I 编程语言:C#( l3 _( \9 v/ e/ G+ e" z$ l
2、实例功能, q$ C1 q/ ~2 [: v1 X' n6 n ?
——播放功能
, a+ D" c. n% T. L- H Y$ N/ ~8 e ——停止功能" a' x# w$ O" q9 L! e( H+ J9 M6 `
——快速前进功能' Q! p- J7 A5 g3 v3 u0 Y2 `
——快速倒退功能
5 i; y8 D/ h0 d9 | U/ r ——录音功能
* [3 O0 ?% d2 D+ Q ——复位功能! E" x: J& x7 ]' {/ \/ |5 ]5 }
——定位功能, j& G; R' {* x& X( e+ X
3、实例代码3 k M; Z, b7 p, h
——在Visual Studio 2010中新建一个工程文件。
+ K4 I8 Q! H/ V9 W( R# |, T ——在工程文件中的窗体代码文件中添加IO端口的引用。
6 {% v# V. |: d2 d( { J using System.IO.Ports;2 P& D* N& H2 l( Z6 ~
——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。
6 j& }- p2 \+ r static SerialPort _serialPort;
: p4 \) M# T" s8 N. z7 ?7 J$ P ——双击窗体增加窗体装入事件处理方法4 G$ w( e4 m. `+ i9 v3 w
private void Window_Loaded(object sender, RoutedEventArgs e)" o* P. A3 @5 d! U& D. U
{
! Q0 F& E9 t0 ^% {0 Y }7 p$ t, L1 m U' \
在窗体装入事件处理方法中写入端口初始化的代码。
5 G, l& [' y# f9 u- \1 i private void Window_Loaded(object sender, RoutedEventArgs e). C) a+ D, _! \
{* s9 {+ K ~+ \' `/ ~5 U- ]
//创建一个新的串口对象实例8 U1 x5 @" G" r ~. m
_serialPort = new SerialPort();
% X& O( {, a/ z7 H u //枚举计算机中的串口. W- @' \3 Y" D7 H
string[] ports = SerialPort.GetPortNames();+ Z7 w8 r U4 g# a% M8 l
//如果系统没有串口装置则退出0 h: i7 t- K1 f
if (ports == null)& Y ]: H; ^# o9 V: w, z0 {; ^# O
{
0 x+ s$ L. ^4 K this.close();
( T/ f! q- B% H, [4 J9 u' z/ u } N" I% q9 A7 J4 N0 D$ [+ t- E. j
try
$ A/ |! i7 V# v {% A* r+ S/ B; V8 _8 s& `
//使用系统的第一个串行端口
( E- R; |3 P J# y( \/ E1 \ _serialPort.PortName = ports[0];
( v( l* H# [! ]) D7 e9 n //设置为9600的速率* j/ r# V& i% i8 @- ^
_serialPort.BaudRate = 9600;' H7 ^1 }0 @' d) k P1 R3 d
//设置为无校验! L4 n# y3 s: s/ U8 ]6 c- Z. v
_serialPort.Parity = Parity.None;
) S8 w x* H) c " q% r, E" y$ N7 N& }1 @
//设置为8位数据
) W) C. y' @5 L _serialPort.DataBits = 8;4 T4 H4 Y0 P) }6 c5 v1 y) y
//设置停止位为16 q8 W+ s* x* [6 `
_serialPort.StopBits = StopBits.One; j' F2 _' R( F
//设置为无握手/ D' J1 r+ V% o" Q. I* x
_serialPort.Handshake = Handshake.None;
% V1 _9 u, X, X //设置读/写超时值8 w4 ]* k0 _# Q1 d
_serialPort.ReadTimeout = 500;
( L" W1 C5 r% U4 z. T: w _serialPort.WriteTimeout = 500;
8 u: h" }3 C7 M8 i& D% ] //打开串行端口5 O% P) O; b# n
_serialPort.Open();
\7 ^6 A# D3 }+ {. G }
) r7 Y1 ~) Z. _ c4 w0 x catch (Exception ex)
# b, \* T; H' O {
2 v; R% I* {9 E% B Message.show(ex.Message);
3 I/ ~: u4 `( k- T }
1 H T* _. k1 }7 J4 _! b6 d }3 j5 C5 e, D5 Q. [7 W/ C0 c* {
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。
4 `% Z M7 R/ i! R3 M! Q: X3 T 按键命名 提示内容& F4 l5 l4 ~9 F( B: d2 U
button_PLY 播放0 R% |/ n+ X3 q+ t& k( Y M& D" n
button_STP 停止
) D& r! c, n6 a- _4 z button_FWD 快进5 v% y% k3 J$ c( p# x7 u0 x" D
button_RWD 快倒
3 e. ^) y8 M, V6 `8 b" G" v button_RCE 播放
8 e% m3 @% b7 m button_RTM 清零
: P% y6 r/ I( ], ~8 X# s! \' B button_ZLO 定位到零
: V! b1 V: ^3 o0 N m ——双击按钮图标增加按钮处理方法(以录音为例): }# ], }, C! v. b# M. }5 S+ n" f* Y
private void button_PLY_Click(object sender, RoutedEventArgs e)& p q+ R, S; t& I$ L
{1 z9 h7 f) H. C& [8 k& @9 ~' P9 W
try; U' o3 U, w, O5 E& z2 C# L
{
1 s/ i' h$ O1 J6 ]' g6 A% C //发送从输入信号直接输出方式控制字符串; L( k. v; [0 h- `( u
_serialPort.WriteLine("INP F ");: F# e( T$ r% C8 y
6 x% H; a' I. K! ^
//休止100ms
( G; H! N, [" e8 }3 W' C Thread.Sleep(100);7 g$ n* ^. l) r* c& g
//发送所有通道Ready的控制字符串0 g7 ^1 D" J$ Z9 ] w6 \
_serialPort.WriteLine("REA F ");
( e8 t+ q# w! r6 `$ k. p Thread.Sleep(100);7 }4 n, y. f, S
//发送开始录音的控制字符串。5 z4 k; O7 J5 V# W& X) u7 V8 P$ k
_serialPort.WriteLine("REC ");
, z* X8 G0 u& i# v }3 c2 j9 h+ D. V$ v7 b
catch (Exception ex)5 A. ?+ A6 {% D9 K0 _% a9 L
{2 c0 v) z/ p, x$ r' k
Message.show(ex.Message);
. d. d) v9 I6 K3 ?! x1 i# M1 } }: s$ }5 i3 [) C+ M( j5 ]
}7 E0 {5 Z: l% G3 p& o8 g$ n
注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。$ y* W; u# A: @
按以上方法增加相应按键的处理方法,并发送对应的指令即可。
* q1 T9 q' l$ l7 ?) W2 y 播放控制字符串:PLY+空格+回车
$ c' w: z9 w( ]: ] 停止控制字符串:STP+空格+回车" h) \7 _+ D6 b4 S9 d
快进控制字符串:FWD+空格+回车3 y+ C8 q) V5 E
快倒控制字符串:RWD+空格+回车
, c$ o" q. h) g4 Y8 S 复位控制字符串:RTM+空格+回车. Q# |6 x7 {3 I3 O8 i& H
定位到零字符串:LZA+空格+回车
% L% L' P p% c$ r* K, e
5 i) T/ c! t0 h: X8 C% u5 i 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}$ C+ Q* A# f: I/ k9 H. o) \
- I2 w, p* |; Y: C4 Z
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
1 ^* l& X/ c" k7 U H4 h |