P phoenix_19 Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-24 #1 好多RS-485接口(十几个),负责采集数据和处理信息,然后好多RS-485接口转换成一个RS232连接到PC,我用MSCOMM控件实现多机通讯,在发送数据时,要循环的发送RS-485接口端号,该怎样实现?那接受数据该怎么办?<br>或者多机通讯的原理?<br>请路过的大虾们请教?有源代码,最好!<br>在下先谢谢了
好多RS-485接口(十几个),负责采集数据和处理信息,然后好多RS-485接口转换成一个RS232连接到PC,我用MSCOMM控件实现多机通讯,在发送数据时,要循环的发送RS-485接口端号,该怎样实现?那接受数据该怎么办?<br>或者多机通讯的原理?<br>请路过的大虾们请教?有源代码,最好!<br>在下先谢谢了
C chinapr Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-24 #2 按232的方法发送和接收数据就可以了.你可不管485的存在
P phoenix_19 Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-24 #4 谢谢chinapr和网中戏的建议,先从一台电脑通过一个RS232串口,在发送数据时,要循环的发送RS-485接口端号,该怎样实现?要接受每个RS485的数据,那接受数据该怎么办?
K kutou008 Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-24 #5 用API写,可以参考<br>http://www.21learning.com/program_more.asp?id=1088
Z zywcd Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-24 #6 485是按照下位机地址区分的。会有一个地址码,下位机地址如果和地址码匹配,则接收改组数据。到时候你的通讯设备会给你通讯格式。<br>对你开发而言,和232一样。
D dey-999 Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-24 #8 我们做的上位机通讯程序正好是和你一样的,当然了,我们有两种办法,另外一种是用磨沙卡,它回自动的接上N条线作为扩展串口.我们的实现方法是:<br>1.定义终端类,每个终端作为一个实例,加入到TList队列中,线程打开时取第一个终端,然后每次线程轮巡时取下一个终端,每一次轮巡都包括一次读串口和一次写串口操作,当然读就包括了所有端口发过来的信息,根据协议知道是谁发的,写是给当前轮巡到的终端发送信息<br>2.上位机和终端的通讯是根据地址和操作码决定的,所谓操作码是你自己定义的操作代码,表明的是你操作终端的当前步骤和下一个步骤,其他信息还包括显示信息等<br>3.上位机的串口通讯一般是用API实现的,因为API还是比较好操作的
我们做的上位机通讯程序正好是和你一样的,当然了,我们有两种办法,另外一种是用磨沙卡,它回自动的接上N条线作为扩展串口.我们的实现方法是:<br>1.定义终端类,每个终端作为一个实例,加入到TList队列中,线程打开时取第一个终端,然后每次线程轮巡时取下一个终端,每一次轮巡都包括一次读串口和一次写串口操作,当然读就包括了所有端口发过来的信息,根据协议知道是谁发的,写是给当前轮巡到的终端发送信息<br>2.上位机和终端的通讯是根据地址和操作码决定的,所谓操作码是你自己定义的操作代码,表明的是你操作终端的当前步骤和下一个步骤,其他信息还包括显示信息等<br>3.上位机的串口通讯一般是用API实现的,因为API还是比较好操作的
Z zhaokaien Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-24 #9 建议这样的系统用CAN更好,485恐怕比较麻烦
P phoenix_19 Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-24 #10 谢谢大家的建议,大家都提到用api来做。dey-999,讲的比较清楚,你可不可以发段源代码给我?我的信箱是phoenixli_19@yahoo.com.cn
H HSB_YQ Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-24 #11 应该不用那么复杂吧,用API和多线程来跟下位机通讯是很好,可是写起来要做很多处理,不如用第三方串口控件,我用了几个串口控件觉得 ComPort v3.10 比较好用,支持Delphi567和2005、2006,不像MSCOMM使用那么麻烦,单就这个控件来说不用打包和注册就能直接拿到其他机器使用。在多机通讯来说,楼上dey-999说的地址编码和操作码方式是最常用的,地址码分辨要通讯的下位机,操作码说明要进行的操作,都是由开发者自己定的协议,其实通过循环查询的方式就很容易解决多机通讯的问题了,速度上绝对跟得上。要解决竞争冒险的问题,在下位机数量不是很庞大的情况下,主要是由上位机按地址逐一查询下位机,进行通讯和数据交换。当然,多线程是最好的,但对编程技术要求又更高点。
应该不用那么复杂吧,用API和多线程来跟下位机通讯是很好,可是写起来要做很多处理,不如用第三方串口控件,我用了几个串口控件觉得 ComPort v3.10 比较好用,支持Delphi567和2005、2006,不像MSCOMM使用那么麻烦,单就这个控件来说不用打包和注册就能直接拿到其他机器使用。在多机通讯来说,楼上dey-999说的地址编码和操作码方式是最常用的,地址码分辨要通讯的下位机,操作码说明要进行的操作,都是由开发者自己定的协议,其实通过循环查询的方式就很容易解决多机通讯的问题了,速度上绝对跟得上。要解决竞争冒险的问题,在下位机数量不是很庞大的情况下,主要是由上位机按地址逐一查询下位机,进行通讯和数据交换。当然,多线程是最好的,但对编程技术要求又更高点。
小 小虾米爱吃鱼 Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-24 #12 发:你就写段程序轮巡发送到各个地址就可以了!<br>接:你最好是写一个单独的线程一直不断的接收,有符合条件的数据来了就触发你的事件,没有就继续收<br>API蛮好用,别用控件了,那玩意好用是好用,总之觉得还是自己谢谢API对自己比较有提高
发:你就写段程序轮巡发送到各个地址就可以了!<br>接:你最好是写一个单独的线程一直不断的接收,有符合条件的数据来了就触发你的事件,没有就继续收<br>API蛮好用,别用控件了,那玩意好用是好用,总之觉得还是自己谢谢API对自己比较有提高
P phoenix_19 Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-24 #13 谢谢大家宝贵的意见,有没有简单的API通讯的例子,与多个RS485转换成一个RS232的通讯的代码
N nicai_wgl Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-24 #14 我的思路:<br> 1、一定要PC主动,下位机被动方式,即PC可以主动和某一下位机通讯、收发数据,而下位机不能主动和PC通讯,否则PC机这边很难处理,就是说某一时刻PC只与一个下位机通讯。<br> 2、不同的下位机可以通过不同的地址或者标示码识别,以便PC可以和特定的下位机通讯。<br> 3、剩下的问题就是PC轮流和下位机通讯、收发数据了,建议按一个串口一个线程,在多串口时可以有一定的并行性。<br> 4、还有就是定义PC机和下位机的通讯协议了,通过协议来收发数据就可以了。
我的思路:<br> 1、一定要PC主动,下位机被动方式,即PC可以主动和某一下位机通讯、收发数据,而下位机不能主动和PC通讯,否则PC机这边很难处理,就是说某一时刻PC只与一个下位机通讯。<br> 2、不同的下位机可以通过不同的地址或者标示码识别,以便PC可以和特定的下位机通讯。<br> 3、剩下的问题就是PC轮流和下位机通讯、收发数据了,建议按一个串口一个线程,在多串口时可以有一定的并行性。<br> 4、还有就是定义PC机和下位机的通讯协议了,通过协议来收发数据就可以了。
J janker Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-25 #16 485通讯用半双工方式,发命令给第一个终端,然后等待应答;然后下一个终端。。。依次循环。这里好象不涉及多线程,采用循环查询方式,并且是主从通信方式。终端用地址码区分的,通信协议可以自己定义,也可以采用标准的,比如MODBUS
485通讯用半双工方式,发命令给第一个终端,然后等待应答;然后下一个终端。。。依次循环。这里好象不涉及多线程,采用循环查询方式,并且是主从通信方式。终端用地址码区分的,通信协议可以自己定义,也可以采用标准的,比如MODBUS
S superego Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-25 #17 串口是不不支持共享的,发送数据是一个接一个的发送与接收的,只要你与下位机取得通讯后,通过下位机的机号或地址来循环发送与接收就行了.
D dongy_143 Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-25 #18 介意你加个设备,串口服务器,然后用Nport定义串口服务器的各个口,有8个口的,有16个口的;还有24个口的,够你用的了;<br>我们就是这样搞的
P phoenix_19 Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-25 #19 谢谢大家的意见,不知能否给个相关实际的例子或者源代码先?
E eachbuilder Unregistered / Unconfirmed GUEST, unregistred user! 2006-08-25 #20 串口通讯参数:上位机奇偶校验设置:paMark(9位,第九位为1)为呼叫下位机,paSpace(9位,第九位为0) 为和下位机数据通讯