ID : 370
Comm.Open
功能
数据通信时打开线路。
解说
进行数据通信时打开线路。
相关项目
Comm.Close、 Comm.Output、 Comm.Input、 Comm.Clear、 Comm.Count、 Comm.State、 数据通信
注意事项
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时, |
![]() |
![]() |
要将各程序停止关闭时,请将“程序参数”的“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<>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<>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<>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