哎,又来提问了,还是关于ClientSocket,惭愧
ClientSocket与PLC通信,发送指令后PLC会返回不同寄存器的值。
比如我现在用两个定时器不断发送指令(分别读取两个寄存器的值),
而PLC每 接收到我发的指令 就会返回当时寄存器的值,格式完全相同,只是内容不同(从内容上看不出来自于哪个寄存器)
我在OnRead事件用ReveiceBuf函数读取,问题就是我怎么区分收到的数据 是哪个寄存器的值呢?
说一下我想到的思路:
1、用多个ClientSocket组件,相当于多个客户端,但是这个很麻烦,绝对不是最好的方法
2、用IdTCPClient组件,采用阻塞模式,这样就不存在区分的问题了,但是有隐患。如果我需要多个数据同时发送,等待时间 会不会有点长。而且需要一个数据发送不成功,并不影响别的数据的发送(多个定时器发送不同的数据内容)
3、多线程。。。没用过。。。不知道该怎么处理
其实问题很简单,就是通过一个端口读取不同寄存器的值,我需要对不同的寄存器做不同的处理,但是我区分不出来数据来自于哪个寄存器
[解决办法]
就是你的思路吧
建议使用1 建立与寄存器对应的连接 其实不麻烦 每个寄存器查询都有单独的连接
[解决办法]
这个不可能不知道的
自己做个匹配就可以了
或者我这么说吧,如果有多个客户端,每个client都给server发数据,server返回给各个client
你说server是怎么返回的呢?
比如我有A B C 3个client 都连上了server server再接收到数据的时候分别返回a b c给A B C
那这个server怎么知道该怎么去对应?
Socket->Handle
[解决办法]
我觉得这个没有办法实现
因为你的工作就是Client向server发指令
至于返回哪个寄存器里的值是server的事情
除非他返回的值里包含了这些信息,要不然client是没有办法知道的.你这个可能要跟server沟通一下,让他们的返回值的里包含你需要的信息,你在client来抓应该是没办法抓
[解决办法]
异步处理的话,发送方一般都有一个ID,在收到返馈时根据ID来判断是哪条指令的执行结果。