登录
首页 PLC论坛 台达PLC
回帖 发帖
正文

主题:台达PLC可不可以同时发送和接收数据

点击:2835 回复:13

楼主
我们做的是台达电机控制方向盘,需要同时接收方向盘的转数,还需要给方向盘同时发送控制其动作的命令,同时发送读写会有延迟,请问应该怎么做呢?
19-05-08 08:58
因为不知道你的连接方式.
如果通讯,232的应该支持同时读写.但在程序上是有顺序的,后台通讯是同时的,延迟看具体情况.
如果是硬线连接,高速脉冲,di/do同时也是没问题的.
所以具体描述一下设备情况.
19-05-08 10:52
没什么问题;
19-05-08 11:13
通讯肯定会有延时,问题是你能不能接受这个时间,如果不能还支持其他的控制方式吗,我之前就碰到过PLC与变频器通讯造成延时而影响工艺,后来改成模拟量控制问题解决了。
19-05-08 13:58
我对设备情况不是很了解,我这面使用C++写的PC客户端程序,用的modbus,然后发送不同功能码的数据包,只读取数据或只发送数据没有延迟,两个数据包一起发就会出现延迟。
19-05-08 15:27
这个延时要想办法解决,因为想实时读取方向盘的转数,还要在车辆碰撞时发送让方相盘抖一下的命令,如果有延迟,抖动延迟两秒,就很鸡肋了。请问一下,你以前的解决方法,谢谢
19-05-08 15:30

引用 844638002 在 2019/5/8 15:30:37 发言【内容省略】

不是说了吗,改模拟量控制了,不用通讯了,不过你这是一对一估计延迟也就零点几秒吧。
19-05-08 16:00
那你用的通讯.通讯用的485还是232还是tcp?
你发了什么数据包?一起发(同时是不可能的)是什么意思?出现了什么情况的延迟?
你要求很严格的话,不如直接用硬线发方向盘抖动.
方向盘读数也可以不用通讯方式,车辆碰撞又是怎么回事?
实在不行,你把你服务的图纸发来,或者把你的C++有关部分的程序发来.
19-05-08 16:04
两个要求,实时读数,然后碰撞是模拟的条件,碰撞了我就发抖动的命令。简单说就是读数和发送抖动命令,modbustcp  03和10两个功能码,现在是我发送03读数据 然后再发写数据的时候,联机监控,会显示plc D0 接到数据的时间和我发送的时间延迟了两秒或更久。硬线是什么?
19-05-08 16:16
//C++中连接和发送的语句
static int acpt = -1, ct = -1;
if(ct != 0)
{
ct = tcpModbusSocket.Connect("192.168.1.5",502);
if(ct == 0)
{
tcpModbusSocket.SendtoService("192.168.1.5",502,(char*)&modbusSRPacket,sizeof(ModbusSRPacket));
     }
}
else
{
tcpModbusSocket.SendtoService("192.168.1.5",502,(char*)&modbusSWPacket,sizeof(ModbusSWPacket));
tcpModbusSocket.SendtoService("192.168.1.5",502,(char*)&modbusSRPacket,sizeof(ModbusSRPacket));
}
发送的数据包
//modbus发送读数据请求数据包
struct ModbusSRPacket
{
ModbusSRPacket()
{
ask_high = 0x00;
ask_low = 0x00;
sign_high = 0x00;
sign_low = 0x00;
length_high = 0x00;
length_low = 0x06;
unit_sign = 0x01;
func_code = 0x03;
start_addr_high = 0x00;
start_addr_low = 0x04;
num_register_high = 0x00;
num_register_low = 0x05;
}
byte ask_high;//事务处理标识符
byte ask_low;//事务处理标识符
byte sign_high;//协议标识符
byte sign_low;//协议标识符
byte length_high;//数据长度
byte length_low;//数据长度
byte unit_sign;//设备地址
byte func_code;//功能码
byte start_addr_high;//起始地址
byte start_addr_low;//起始地址
byte num_register_high;//寄存器数量
byte num_register_low;//寄存器数量
};
//modbus发送写数据的数据包
struct ModbusSWPacket
{
ModbusSWPacket()
{
ask_high = 0x00;
ask_low = 0x00;
sign_high = 0x00;
sign_low = 0x00;
length_high = 0x00;
length_low = 0x0F;
unit_sign = 0x01;
func_code = 0x10;
start_addr_high = 0x00;
start_addr_low = 0x00;
num_register_high = 0x00;
num_register_low = 0x04;
num_write_bt = 0x08;
Self_Alignment_high = 0x00;
Self_Alignment_low = 0x00;
My_ShakeVal_high=0x00;
My_ShakeVal_low=0x00;
My_ShakeFre_high=0x00;
My_ShakeFre_low=0x00;
Steer_Damp_high=0x00;
Steer_Damp_low=0x35;
}

byte ask_high;//事务处理标识符
byte ask_low;//事务处理标识符
byte sign_high;//协议标识符
byte sign_low;//协议标识符
byte length_high;//数据长度
byte length_low;//数据长度
byte unit_sign;//设备地址
byte func_code;//功能码
byte start_addr_high;//起始地址
byte start_addr_low;//起始地址
byte num_register_high;//寄存器数量
byte num_register_low;//寄存器数量
byte num_write_bt;//写字节的个数
byte Self_Alignment_high;//
byte Self_Alignment_low;//方向盘是否回正 0回 1不回 3震动
byte My_ShakeVal_high;
byte My_ShakeVal_low;//方向盘晃动量 幅度  100
byte My_ShakeFre_high;
byte My_ShakeFre_low;//方向盘晃动频率 600
byte Steer_Damp_high;
byte Steer_Damp_low;//扭矩 阻尼  45
};
19-05-08 16:46

上一页下一页

工控新闻

更多新闻资讯