第五部分 控制软件编写实例
# g1 a3 C# R6 x( ?9 T! {0 J
7 B ~9 x8 C3 k: r( m& j, i 在这一部分我将给大家介绍STUDER录音机控制软件的编写实例。编写控制软件使用哪种计算机编程语言都可以,关键是你熟悉哪个语言、熟悉哪个语言的RS232串行端口编程方法。1 D1 x( _; z$ {3 O* X( k5 ]6 S
1、开发环境
2 l% o* h4 W. \7 [7 J0 K/ b 编译软件:Microsoft Visual Studio 2010
& |) P% G3 Y) T" d- b6 t+ \- D 基础框架:Microsoft .NetFramework 4.03 {6 y! h# _) y+ N0 ?0 P
程序框架:Microsoft WPF* y$ Q2 V1 o2 f. P9 y* j* u9 E
编程语言:C#
, G. a/ U7 }6 M4 N" S3 q 2、实例功能
5 a" |0 Z1 N/ d1 a# j/ b ——播放功能( b! R$ p- G" i9 O7 k
——停止功能
& _) M2 T0 R- j: L/ w! l$ K ——快速前进功能
, l! ^( |8 `3 G. |# ]# e2 q. E ——快速倒退功能# @4 n* ] F- N0 U$ W: W
——录音功能4 M, H% q+ U3 \7 l
——复位功能
" I/ V" p% W7 n6 ?5 ], z ——定位功能
: I# O; h; h8 Q 3、实例代码
" z0 W8 M J; c5 B q ——在Visual Studio 2010中新建一个工程文件。
" J" j ~/ m% i; i* A ——在工程文件中的窗体代码文件中添加IO端口的引用。
# o$ l" K9 p0 Y" h using System.IO.Ports;
' R* v/ j% @5 }, T ——在窗体代码文件的程序类中定义一个SerialPort类型的静态变量。: F1 l* G& G$ J! k. d7 \) N6 T
static SerialPort _serialPort;" p. U3 h& L% T4 s* l. f9 J
——双击窗体增加窗体装入事件处理方法
. b, h3 ?' j A m private void Window_Loaded(object sender, RoutedEventArgs e)
9 E# K0 _6 E% u4 t4 a, Z { f" y6 t0 d6 B
}
# |2 w1 y9 N D: n; l1 I 在窗体装入事件处理方法中写入端口初始化的代码。
# w H3 S# q! K4 F; H private void Window_Loaded(object sender, RoutedEventArgs e)/ {. ` M- j3 E
{
3 Q; x. C8 J o; ^( K0 q9 ] _ //创建一个新的串口对象实例$ D3 z+ {* @) f8 V0 J- R. V
_serialPort = new SerialPort();% Y# i3 R4 G7 ^1 h, A8 m
//枚举计算机中的串口
8 y& H& g* c) a V# `, h" N$ S string[] ports = SerialPort.GetPortNames();1 z4 k2 U t1 ^- `
//如果系统没有串口装置则退出
6 y, V* \8 v" k if (ports == null)9 N" `% T9 @6 o# k6 Y+ F7 Y
{
6 a8 [% b- W# H5 `+ \+ C- N! d this.close();
, _. A) }0 L( g9 n S# H) D1 Q6 }5 r }
2 ?, y* K6 q& ^ try
) R, b( X- V a2 @( p6 h5 q {
( ~0 V7 I# G H //使用系统的第一个串行端口# R4 S: g. |! e3 s% K* c+ { e5 i' F
_serialPort.PortName = ports[0];6 H- ?9 I( y2 }8 J g3 w
//设置为9600的速率# f& \, L, p( z+ n* \) e# H, o# S, I
_serialPort.BaudRate = 9600;2 X, @* n7 R+ T
//设置为无校验
4 Q( V% X* w7 b, Z" U$ P _serialPort.Parity = Parity.None;) d; g: ]( E( {1 X) I
0 x9 r) [2 o' Q1 {# P& o) a7 y- ` //设置为8位数据
, O, Y u3 v5 u l _serialPort.DataBits = 8;
, D5 F. g1 Q, [+ N) f //设置停止位为12 f5 _7 T0 q3 [1 E
_serialPort.StopBits = StopBits.One;& n% }9 |8 s2 ~% b; h
//设置为无握手
+ ^* E3 K+ I* G/ w5 v _serialPort.Handshake = Handshake.None;; ]+ O2 t# b! d
//设置读/写超时值
# E" ^$ A5 U7 ]7 ^ _serialPort.ReadTimeout = 500;
5 y+ F" H- O! [1 E3 k. L! T _serialPort.WriteTimeout = 500;5 u4 g5 R8 D0 L* U" f1 ~/ q; A
//打开串行端口- B) J* Q5 C; a0 S1 P3 ?
_serialPort.Open();
. j7 k9 o5 `: i l2 |: }& G0 } }7 }4 O0 u$ B5 k4 T
catch (Exception ex)
5 _' G3 |" B8 E) e {
- R2 u N, w. [ Message.show(ex.Message);, c6 ?9 P n0 x
}$ B9 e" d6 k9 \8 z( K7 y/ T
}) N/ U/ l2 h& L1 M7 E1 d
——从工具箱中向窗口添加相关按钮,命名按钮及提示内容。4 b8 o0 F, _1 B3 p; w- x
按键命名 提示内容
( Y9 y% ~! i O: f button_PLY 播放
! h/ n* P, ^6 c2 V% }, |* y" K2 q button_STP 停止1 w) G- u+ z* a0 O+ q% ^
button_FWD 快进
1 O' e% a5 E7 A2 |& S5 |2 { button_RWD 快倒
. n* ?7 T. Y- m. M2 \ button_RCE 播放7 ?, L1 R* A' D2 T- b( z# p
button_RTM 清零 x7 A& x2 ]# a/ g
button_ZLO 定位到零
" B) [1 j2 Q' z5 w, [ ——双击按钮图标增加按钮处理方法(以录音为例). j! b& Q6 v% m% B: A0 Q" _6 {
private void button_PLY_Click(object sender, RoutedEventArgs e)" T) Q4 F+ I, d& A
{+ k) n3 p% ^! i, k1 K
try
. `2 w: {1 b' y( _9 e- }! z {
# c8 \5 w ~/ ]3 ]! Z& k //发送从输入信号直接输出方式控制字符串
; d3 ^2 g) c3 q _serialPort.WriteLine("INP F "); B9 ^3 _; B# B7 M1 I1 K2 W7 x2 b0 k# d
# V( O, A1 T$ E4 D, e% \9 e //休止100ms
8 {# P$ k6 G! [& L Thread.Sleep(100);
8 W" \& L4 [1 ^" @6 u3 Q+ v" n //发送所有通道Ready的控制字符串) W! Z0 m3 ]6 @! y
_serialPort.WriteLine("REA F "); , {3 ?+ u. |3 g1 L6 W' r
Thread.Sleep(100);
8 _2 g# y2 T8 ?9 s0 }/ X. t+ w0 p; N //发送开始录音的控制字符串。& k- i6 @- I' V; z; j7 V
_serialPort.WriteLine("REC ");3 D9 M- ^' ^2 P P/ o3 ]* c& k
}
0 e6 x( G' \ N- v, ^2 W' k3 Z2 v catch (Exception ex), Y" e0 Y. o* e' l0 z+ c0 l4 L2 ]
{ V. Q3 b; I5 e. c
Message.show(ex.Message);; @; y" f. Y- \% g f" t
}
: z( |# ^4 ]9 @* V2 Y& M. u }
* U+ L3 y( L" z 注:发送REC指令后录音机就开始起动录音,不需像手动录音时需同时按送录音和播放键才能录音。. Z% t+ B) T J0 s
按以上方法增加相应按键的处理方法,并发送对应的指令即可。
! a% a' e) v) N2 f( ~$ E 播放控制字符串:PLY+空格+回车
3 k" K/ a9 S0 e' ~! A8 v! G \4 f 停止控制字符串:STP+空格+回车. w5 U# b6 e8 R$ [9 w& m. t2 K
快进控制字符串:FWD+空格+回车
% m" _5 p( K( k) U6 Y 快倒控制字符串:RWD+空格+回车 l% X& v* V4 X5 J# _
复位控制字符串:RTM+空格+回车
+ c' z/ }/ L- l2 J+ N7 e 定位到零字符串:LZA+空格+回车; V/ G0 m2 h1 z2 a* C( e' r
9 P& {: |# b, f' k2 U 写好这此代码后,接好连线,编译运行就可以控制你的录音机了,就这么简单,你不觉得吗?!{:4_240:}
* `# ^* \7 {/ C' A0 l& | * Z& O, W, y+ Z0 s) s7 s0 X0 ]
有了这个基础,你就可以根据STUDER控制指令集实现更多的控制功能了。
9 l$ T G! e( [+ o, v8 _3 E2 x% N |