在使用Github上开源的S7.net 跟西门子PLC通讯时遇到了一个问题。
在逐步调试时发现每次走到异步发送的地方之后,便阻塞在那里。
经过几天的测试,原来是因为多线程同时对同一个PLC对象操作。造成的错误。
解决方法:单独创建一个线程及消息队列,然后将需要发送的数据放入队列中。PLC连接对象只由新创建的线程调用,线程循环检测队列中的个数,如果有数据需要发送,则调用PLC对象发送。
问题猜测:可能跟S7.NET中读写使用同一个stream有关。
教训:跟下位机通讯,或者说操作某一个资源,尽量只使用一个线程去操作。