<< 向前        下一页 >>

ID : 370

Comm.Open

功能

数据通信时打开线路。

格式

Comm.Open 线路编号

指定项目

线路编号
通过整数型数据指定线路编号

解说

进行数据通信时打开线路。

注意事项

Comm.Open的排斥处理

执行线路打开任务过程中,该任务执行Comm.Close并且在关闭该线路前,其它任务不可打开、使用该线路。

但是,线路打开任务在未关闭线路而处于停止状态时,其它任务可再次打开该线路进行使用。
可使用Comm.State指令确认任务是否占用线路。

打开的任务无需占用线路时,将“程序参数”的“34:多任务的同一线路使用许可”设定为“1:有效”。以便其它任务也可使用打开的线路。
关于设定方法,请参照多功能教导器操作指南中的“程序参数的显示、变更”。
在Comm.input之间、Comm.output之间通过多项任务执行通信时,等待先执行的指令完成后再执行后执行的指令。

程序停止后的Comm.Open

任务未通过Comm.Close从打开状态变为停止状态时,解除任务的排斥处理,但是保持线路的打开状态。第2次以后的Comm.Open不施加CPU负载。

(1)线路编号1在打开状态下,
未通过Comm.Close结束程序或因错误等停止

(2)下次通过相同的程序或其它程序打开线路编号1时,
  不向CPU施加负载。

要将各程序停止关闭时,请将“程序参数”的“32:任务结束时的通信线路自动切换”设定为“1:有效”。
关于设定方法,请参照多功能教导器操作指南中的“程序参数的显示、变更”。

但是,“34:多任务的同一线路使用许可”有效时,此设定无效。

任务联动选项的设定值的动作

设定值 0:无效 1:有效
内容 即使执行Comm.Open的任务停止,也不Close线路,保持Open。 执行Comm.Open的任务停止后,自动执行线路切断处理。
优点 连续执行任务时,可快速执行Comm.Output,Input,以避免重复Open和Close。 对于任务错误等的任务停止进行自动切断,因此线路不会保持使用中状态。
缺点 因任务错误停止时,不会自动切断线路,需要明确进行Comm.Close。 实际安装时需要确保仅可在任务动作期间使用线路。

应用示例

'!TITLE "电装机器人程序"
Sub Sample_CommOpen 
  On Error GoTo Label1
  Comm.Open 8
  On Error GoTo 0
  
  ‘记述处理
  
  Exit Sub
Label1:  '不能打开线路编号8时
  Delay 100  '等待服务器侧准备。
  Resume '再次执行打开的行。

End Sub

通过Ethernet执行Client/Server之间通信的示例如下所示。

Server侧的编码示例(Server的设定:文本方式)

Server侧执行Comm.Open后,需要在Comm.State进行Client的连接等待。如果在未确立连接时执行Comm.Output或Comm.Input,则发生错误。

Sub Main 
  
  Comm.Open 4
  Comm.Clear 4 '清空接收缓存
  Wait Comm.State(4) = 2  ' 用户连接等待

  I1 = 0
  Do

   S1 = Comm.Input(4)
   PrintDbg S1

   Comm.Output 4, "OK " & Timer
   
   Delay 1
  Loop Until I1&lt;>0

  Comm.Close 4
End Sub

Client侧的编码示例(Client的设定:文本方式)

Sub Main
  Comm.Open 8

  I1 = 0
  Do

    Comm.Output 8, "Do " & Timer

    S1 = Comm.Input(8)
    PrintDbg S1
   
    Delay 1
  Loop Until I1&lt;>0 

  Comm.Close 8
End Sub

Server侧线路切断时的自动恢复编码示例(Server的设定:文本方式)

Server侧发生线路切断的情况下,明确记述再次连接时的处理时,指定下述编码。

Sub Main

  Comm.Open 4
  Comm.Clear 4
  Wait Comm.State(4) = 2  ' 用户连接等待

  On Error Goto ErrHandler
  I1 = 0
  Do

   S1 = Comm.Input(4)
   PrintDbg S1

   Comm.Output 4, "OK " & Now   

   Delay 1
  Loop Until I1&lt;>0

  Comm.Close 4

  Exit Sub

ErrHandler: 
  Comm.Close 4, -1  '强制切断 
  PrintDbg "Err = " & Hex(Err.OriginalNumber)
  Comm.Open 4
  Comm.Clear 4
  Wait Comm.State(4) = 2  '等待用户的连接
  Resume '解除错误状态,从发生错误的行开始再次执行  

End Sub

ID : 370

<< 向前        下一页 >>